import { useState, useEffect } from 'react'; import { useToast } from '../contexts/ToastContext.jsx'; import { api } from '../utils/api.js'; export default function AddChildAliasModal({ onClose }) { const toast = useToast(); const [aliases, setAliases] = useState([]); const [editingAlias, setEditingAlias] = useState(null); // null = new entry const [form, setForm] = useState({ firstName: '', lastName: '', dob: '', phone: '', email: '' }); const [avatarFile, setAvatarFile] = useState(null); const [saving, setSaving] = useState(false); useEffect(() => { api.getAliases().then(({ aliases }) => setAliases(aliases || [])).catch(() => {}); }, []); const set = k => e => setForm(p => ({ ...p, [k]: e.target.value })); const resetForm = () => { setEditingAlias(null); setForm({ firstName: '', lastName: '', dob: '', phone: '', email: '' }); setAvatarFile(null); }; const handleSelectAlias = (a) => { if (editingAlias?.id === a.id) { resetForm(); return; } setEditingAlias(a); setForm({ firstName: a.first_name || '', lastName: a.last_name || '', dob: a.date_of_birth ? a.date_of_birth.slice(0, 10) : '', phone: a.phone || '', email: a.email || '', }); setAvatarFile(null); }; const handleSave = async () => { if (!form.firstName.trim() || !form.lastName.trim()) return toast('First and last name required', 'error'); setSaving(true); try { if (editingAlias) { await api.updateAlias(editingAlias.id, { firstName: form.firstName.trim(), lastName: form.lastName.trim(), dateOfBirth: form.dob || null, phone: form.phone || null, email: form.email || null, }); if (avatarFile) await api.uploadAliasAvatar(editingAlias.id, avatarFile); toast('Child alias updated', 'success'); } else { const { alias } = await api.createAlias({ firstName: form.firstName.trim(), lastName: form.lastName.trim(), dateOfBirth: form.dob || null, phone: form.phone || null, email: form.email || null, }); if (avatarFile) await api.uploadAliasAvatar(alias.id, avatarFile); toast('Child alias added', 'success'); } const { aliases: fresh } = await api.getAliases(); setAliases(fresh || []); resetForm(); } catch (e) { toast(e.message, 'error'); } finally { setSaving(false); } }; const handleDelete = async (e, aliasId) => { e.stopPropagation(); try { await api.deleteAlias(aliasId); setAliases(prev => prev.filter(a => a.id !== aliasId)); if (editingAlias?.id === aliasId) resetForm(); toast('Child alias removed', 'success'); } catch (err) { toast(err.message, 'error'); } }; const lbl = (text, required) => ( ); return (