import { api } from '../../lib/api.mjs'; const CATEGORIES = ['Fusion Splicer', 'OTDR', 'Blower', 'Reel', 'Generator', 'Power Meter', 'Cable Locator', 'Other']; class EquipmentForm extends HTMLElement { #onSave = null; connectedCallback() { if (!this.shadowRoot) { this.attachShadow({ mode: 'open' }); this.shadowRoot.innerHTML = ``; } } open(equipment, onSave) { this.#onSave = onSave; const isEdit = !!equipment; const d = this.shadowRoot.querySelector('dialog'); d.innerHTML = `
${isEdit ? 'Edit Equipment' : 'Add Equipment'}
${isEdit ? `
Active
` : ''}
`; if (window.lucide) lucide.createIcons({ root: d }); d.querySelector('#dlg-close').addEventListener('click', () => d.close()); d.querySelector('#dlg-cancel').addEventListener('click', () => d.close()); d.querySelector('#dlg-save').addEventListener('click', async () => { const name = d.querySelector('#eq-name').value.trim(); const errEl = d.querySelector('#form-error'); if (!name) { errEl.textContent = 'Name is required'; d.querySelector('#eq-name').focus(); return; } errEl.textContent = ''; const saveBtn = d.querySelector('#dlg-save'); saveBtn.disabled = true; saveBtn.textContent = 'Saving…'; const payload = { name, asset_tag: d.querySelector('#eq-tag').value.trim(), category: d.querySelector('#eq-cat').value, active: isEdit ? d.querySelector('#eq-active').checked : true, }; try { if (isEdit) await api.put(`/registry/equipment/${equipment.id}`, payload); else await api.post('/registry/equipment', payload); d.close(); window.dispatchEvent(new CustomEvent('wo:toast', { detail: { message: isEdit ? 'Equipment updated' : 'Equipment added', type: 'success' } })); this.#onSave?.(); } catch (err) { errEl.textContent = err.message; saveBtn.disabled = false; saveBtn.textContent = isEdit ? 'Save Changes' : 'Add Equipment'; } }); d.showModal(); d.querySelector('#eq-name').focus(); } #esc(s) { return (s || '').replace(/&/g,'&').replace(//g,'>'); } } customElements.define('equipment-form', EquipmentForm);