diff --git a/js/components/pages/page-create.js b/js/components/pages/page-create.js index fd12648..e08f158 100644 --- a/js/components/pages/page-create.js +++ b/js/components/pages/page-create.js @@ -4,10 +4,12 @@ import { auth } from '../../services/auth.js' import { directus } from '../../services/directus.js' import { SUPPORTED_CURRENCIES } from '../../services/currency.js' +const STORAGE_KEY = 'dgray_create_draft' + class PageCreate extends HTMLElement { constructor() { super() - this.formData = { + this.formData = this.loadDraft() || { title: '', description: '', price: '', @@ -26,6 +28,27 @@ class PageCreate extends HTMLElement { this.submitting = false } + loadDraft() { + try { + const saved = localStorage.getItem(STORAGE_KEY) + return saved ? JSON.parse(saved) : null + } catch (e) { + return null + } + } + + saveDraft() { + try { + localStorage.setItem(STORAGE_KEY, JSON.stringify(this.formData)) + } catch (e) { + // Storage full or unavailable + } + } + + clearDraft() { + localStorage.removeItem(STORAGE_KEY) + } + async connectedCallback() { // Check if logged in if (!auth.isLoggedIn()) { @@ -33,6 +56,7 @@ class PageCreate extends HTMLElement { return } + this.hasDraft = !!localStorage.getItem(STORAGE_KEY) await this.loadCategories() this.render() this.unsubscribe = i18n.subscribe(() => this.render()) @@ -67,6 +91,17 @@ class PageCreate extends HTMLElement { } } + validateMoneroAddress(address) { + if (!address) return false + // Standard addresses: start with 4, 95 chars + // Subaddresses: start with 8, 95 chars + // Integrated addresses: start with 4, 106 chars + const standardRegex = /^4[0-9A-Za-z]{94}$/ + const subaddressRegex = /^8[0-9A-Za-z]{94}$/ + const integratedRegex = /^4[0-9A-Za-z]{105}$/ + return standardRegex.test(address) || subaddressRegex.test(address) || integratedRegex.test(address) + } + disconnectedCallback() { if (this.unsubscribe) this.unsubscribe() } @@ -76,6 +111,13 @@ class PageCreate extends HTMLElement {