'use client'; import { useState, useTransition } from 'react'; import { createDiagnosis, deleteDiagnosis, type Condition } from '../../actions'; import { Loader2, Trash2 } from 'lucide-react'; import { format } from 'date-fns'; import { nl } from 'date-fns/locale'; const severities = ['licht', 'matig', 'ernstig']; const statuses = ['active', 'resolved', 'entered-in-error']; interface DiagnosisManagerProps { patientId: string; intakeId: string; diagnoses: Condition[]; } export function DiagnosisManager({ patientId, intakeId, diagnoses }: DiagnosisManagerProps) { const [form, setForm] = useState({ code: '', description: '', severity: severities[0], status: statuses[0], notes: '' }); const [error, setError] = useState(null); const [isPending, startTransition] = useTransition(); const [deletingId, setDeletingId] = useState(null); const handleSubmit = () => { if (!form.code || !form.description) { setError('Code en omschrijving zijn verplicht.'); return; } startTransition(async () => { try { await createDiagnosis({ patientId, intakeId, code: form.code, description: form.description, severity: form.severity, status: form.status, notes: form.notes, }); setForm({ ...form, notes: '' }); setError(null); } catch (err) { setError(err instanceof Error ? err.message : 'Opslaan mislukt'); } }); }; const handleDelete = (id: string) => { setDeletingId(id); startTransition(async () => { try { await deleteDiagnosis(patientId, intakeId, id); } catch (err) { setError(err instanceof Error ? err.message : 'Verwijderen mislukt'); } finally { setDeletingId(null); } }); }; return (
{diagnoses.length === 0 &&

Nog geen diagnoses.

} {diagnoses.map((diag) => (

{diag.code_code} — {diag.code_display}

{diag.recorded_date ? format(new Date(diag.recorded_date), 'd MMM yyyy', { locale: nl }) : 'Onbekende datum'}

{diag.note &&

{diag.note}

}
))}

Nieuwe diagnose

setForm((prev) => ({ ...prev, code: e.target.value }))} className="h-10 rounded-md border border-slate-300 px-3 text-sm" /> setForm((prev) => ({ ...prev, description: e.target.value }))} className="h-10 rounded-md border border-slate-300 px-3 text-sm" />