'use client'; import { useState, useTransition } from 'react'; import { createContactMoment, deleteContactMoment, type Encounter } from '../../actions'; import { Loader2, Trash2 } from 'lucide-react'; import { format } from 'date-fns'; import { nl } from 'date-fns/locale'; const contactTypes = [ 'Intakegesprek', 'Aanvullend onderzoek', 'Telefonisch contact', 'Huisbezoek', 'Overig', ]; interface ContactManagerProps { patientId: string; intakeId: string; contacts: Encounter[]; } export function ContactManager({ patientId, intakeId, contacts }: ContactManagerProps) { const [form, setForm] = useState({ date: '', start: '', end: '', type: contactTypes[0], location: 'Op locatie', notes: '', }); const [error, setError] = useState(null); const [isPending, startTransition] = useTransition(); const [deletingId, setDeletingId] = useState(null); const handleSubmit = () => { if (!form.date || !form.start) { setError('Datum en starttijd zijn verplicht.'); return; } setError(null); startTransition(async () => { try { await createContactMoment({ patientId, intakeId, date: form.date, startTime: form.start, endTime: form.end, type: form.type, location: form.location, notes: form.notes, }); setForm({ ...form, notes: '', end: '' }); } catch (err) { setError(err instanceof Error ? err.message : 'Opslaan mislukt'); } }); }; const handleDelete = (id: string) => { setDeletingId(id); startTransition(async () => { try { await deleteContactMoment(patientId, intakeId, id); } catch (err) { setError(err instanceof Error ? err.message : 'Verwijderen mislukt'); } finally { setDeletingId(null); } }); }; return (
{contacts.length === 0 && (

Nog geen contactmomenten geregistreerd.

)} {contacts.map((contact) => (

{contact.type_display}

{format(new Date(contact.period_start), 'd MMM yyyy HH:mm', { locale: nl })} {contact.period_end && ( <> {' '}-{' '} {format(new Date(contact.period_end), 'HH:mm', { locale: nl })} )}

{contact.notes && (

{contact.notes}

)}
))}

Nieuw contactmoment

setForm((prev) => ({ ...prev, date: e.target.value }))} className="h-10 rounded-md border border-slate-300 px-3 text-sm" /> setForm((prev) => ({ ...prev, start: e.target.value }))} className="h-10 rounded-md border border-slate-300 px-3 text-sm" /> setForm((prev) => ({ ...prev, end: e.target.value }))} className="h-10 rounded-md border border-slate-300 px-3 text-sm" />
setForm((prev) => ({ ...prev, location: e.target.value }))} placeholder="Locatie" className="h-10 rounded-md border border-slate-300 px-3 text-sm" />