'use client'; import { useState, useTransition } from 'react'; import { createRiskAssessment, deleteRiskAssessment, type RiskAssessment, } from '../../actions'; import { Loader2, Trash2 } from 'lucide-react'; import { format } from 'date-fns'; import { nl } from 'date-fns/locale'; // Database values -> Display labels const riskTypeOptions = [ { value: 'suicidaliteit', label: 'Suïcidaliteit' }, { value: 'agressie', label: 'Agressie' }, { value: 'zelfverwaarlozing', label: 'Zelfverwaarlozing' }, { value: 'middelenmisbruik', label: 'Middelenmisbruik' }, { value: 'verward_gedrag', label: 'Verward gedrag' }, { value: 'overig', label: 'Overig' }, ]; const riskLevelOptions = [ { value: 'laag', label: 'Laag' }, { value: 'gemiddeld', label: 'Gemiddeld' }, { value: 'hoog', label: 'Hoog' }, { value: 'zeer_hoog', label: 'Zeer hoog' }, ]; interface RiskManagerProps { patientId: string; intakeId: string; risks: RiskAssessment[]; } export function RiskManager({ patientId, intakeId, risks }: RiskManagerProps) { const [form, setForm] = useState({ date: '', type: riskTypeOptions[0].value, level: riskLevelOptions[0].value, rationale: '', measures: '', evaluationDate: '', notes: '', }); const [error, setError] = useState(null); const [isPending, startTransition] = useTransition(); const [deletingId, setDeletingId] = useState(null); const handleSubmit = () => { if (!form.date || !form.rationale) { setError('Datum en onderbouwing zijn verplicht.'); return; } setError(null); startTransition(async () => { try { await createRiskAssessment({ patientId, intakeId, date: form.date, type: form.type, level: form.level, rationale: form.rationale, measures: form.measures, evaluationDate: form.evaluationDate || undefined, notes: form.notes, }); setForm({ ...form, rationale: '', measures: '', notes: '' }); } catch (err) { setError(err instanceof Error ? err.message : 'Opslaan mislukt'); } }); }; const handleDelete = (id: string) => { setDeletingId(id); startTransition(async () => { try { await deleteRiskAssessment(patientId, intakeId, id); } catch (err) { setError(err instanceof Error ? err.message : 'Verwijderen mislukt'); } finally { setDeletingId(null); } }); }; return (
{risks.length === 0 && (

Nog geen risicotaxaties vastgelegd.

)} {risks.map((risk) => { const typeLabel = riskTypeOptions.find((o) => o.value === risk.risk_type)?.label ?? risk.risk_type; const levelLabel = riskLevelOptions.find((o) => o.value === risk.risk_level)?.label ?? risk.risk_level; return (

{typeLabel}

{format(new Date(risk.assessment_date), 'd MMM yyyy', { locale: nl })} • {levelLabel}

{risk.rationale}

{risk.measures &&

Maatregelen: {risk.measures}

} {risk.notes &&

Notities: {risk.notes}

}
)})}

Nieuwe risicotaxatie

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