import { api } from '../../lib/api.mjs'; const VEHICLE_TYPES = ['Bucket Truck', 'Van', 'Pickup Truck', 'Trailer', 'Digger Derrick', 'Other']; class VehicleForm extends HTMLElement { #onSave = null; connectedCallback() { if (!this.shadowRoot) { this.attachShadow({ mode: 'open' }); this.shadowRoot.innerHTML = ``; } } open(vehicle, onSave) { this.#onSave = onSave; const isEdit = !!vehicle; const d = this.shadowRoot.querySelector('dialog'); d.innerHTML = `
${isEdit ? 'Edit Vehicle' : 'Add Vehicle'}
${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 unit = d.querySelector('#v-unit').value.trim(); const errEl = d.querySelector('#form-error'); if (!unit) { errEl.textContent = 'Unit number is required'; d.querySelector('#v-unit').focus(); return; } errEl.textContent = ''; const saveBtn = d.querySelector('#dlg-save'); saveBtn.disabled = true; saveBtn.textContent = 'Saving…'; const payload = { unit_number: unit, description: d.querySelector('#v-desc').value.trim(), vehicle_type: d.querySelector('#v-type').value, active: isEdit ? d.querySelector('#v-active').checked : true, }; try { if (isEdit) await api.put(`/registry/vehicles/${vehicle.id}`, payload); else await api.post('/registry/vehicles', payload); d.close(); window.dispatchEvent(new CustomEvent('wo:toast', { detail: { message: isEdit ? 'Vehicle updated' : 'Vehicle added', type: 'success' } })); this.#onSave?.(); } catch (err) { errEl.textContent = err.message; saveBtn.disabled = false; saveBtn.textContent = isEdit ? 'Save Changes' : 'Add Vehicle'; } }); d.showModal(); d.querySelector('#v-unit').focus(); } #esc(s) { return (s || '').replace(/&/g,'&').replace(//g,'>'); } } customElements.define('vehicle-form', VehicleForm);