import { api } from '../../lib/api.mjs';
class PeopleForm extends HTMLElement {
#onSave = null;
connectedCallback() {
if (!this.shadowRoot) {
this.attachShadow({ mode: 'open' });
this.shadowRoot.innerHTML = ``;
}
}
open(person, onSave) {
this.#onSave = onSave;
const isEdit = !!person;
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('#p-name').value.trim();
const errEl = d.querySelector('#form-error');
if (!name) { errEl.textContent = 'Name is required'; d.querySelector('#p-name').focus(); return; }
errEl.textContent = '';
const saveBtn = d.querySelector('#dlg-save');
saveBtn.disabled = true;
saveBtn.textContent = 'Saving…';
const payload = {
name,
role: d.querySelector('#p-role').value.trim(),
email: d.querySelector('#p-email').value.trim(),
phone: d.querySelector('#p-phone').value.trim(),
active: isEdit ? d.querySelector('#p-active').checked : true,
};
try {
if (isEdit) await api.put(`/registry/people/${person.id}`, payload);
else await api.post('/registry/people', payload);
d.close();
window.dispatchEvent(new CustomEvent('wo:toast', { detail: { message: isEdit ? 'Person updated' : 'Person added', type: 'success' } }));
this.#onSave?.();
} catch (err) {
errEl.textContent = err.message;
saveBtn.disabled = false;
saveBtn.textContent = isEdit ? 'Save Changes' : 'Add Person';
}
});
d.showModal();
d.querySelector('#p-name').focus();
}
#esc(s) { return (s || '').replace(/&/g,'&').replace(//g,'>'); }
}
customElements.define('people-form', PeopleForm);