import { t, i18n } from '../../i18n.js'; import { router } from '../../router.js'; class PageCreate extends HTMLElement { constructor() { super(); this.formData = { title: '', description: '', price: '', category: '', location: '' }; } connectedCallback() { this.render(); this.unsubscribe = i18n.subscribe(() => this.render()); } disconnectedCallback() { if (this.unsubscribe) this.unsubscribe(); } render() { this.innerHTML = /* html */ `

${t('create.title')}

`; this.setupEventListeners(); } setupEventListeners() { const form = this.querySelector('#create-form'); const cancelBtn = this.querySelector('#cancel-btn'); form.addEventListener('submit', (e) => this.handleSubmit(e)); cancelBtn.addEventListener('click', () => router.back()); form.querySelectorAll('input, textarea, select').forEach(input => { input.addEventListener('input', (e) => { this.formData[e.target.name] = e.target.value; }); }); } async handleSubmit(e) { e.preventDefault(); const form = e.target; const submitBtn = form.querySelector('[type="submit"]'); submitBtn.disabled = true; submitBtn.textContent = t('create.publishing'); await new Promise(resolve => setTimeout(resolve, 1000)); console.log('Creating listing:', this.formData); router.navigate('/'); } escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; } } customElements.define('page-create', PageCreate); const style = document.createElement('style'); style.textContent = /* css */ ` page-create .create-page { max-width: 600px; margin: 0 auto; } page-create .create-page h1 { margin-bottom: var(--space-xl); } page-create .create-form .form-group { margin-bottom: var(--space-lg); } page-create textarea.input { resize: vertical; min-height: 120px; } page-create .image-upload { border: 2px dashed var(--color-border); border-radius: var(--radius-lg); overflow: hidden; } page-create .upload-area { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-2xl); cursor: pointer; transition: background-color var(--transition-fast); } page-create .upload-area:hover { background-color: var(--color-bg-secondary); } page-create .upload-icon { font-size: 2rem; margin-bottom: var(--space-sm); } page-create .form-actions { display: flex; gap: var(--space-md); justify-content: flex-end; margin-top: var(--space-xl); } `; document.head.appendChild(style);