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 = `
`;
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);