'use client'; /** * Diagnose Card Component * * Visuele weergave van een diagnose met badges, expand/collapse en acties. */ import { useState } from 'react'; import { format } from 'date-fns'; import { nl } from 'date-fns/locale'; import { ChevronDown, ChevronUp, MoreVertical, Pencil, Trash2, Loader2 } from 'lucide-react'; import { Card, CardContent, CardHeader } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { type Condition } from '../../actions'; interface DiagnosisCardProps { diagnosis: Condition; isPrimary?: boolean; onEdit: () => void; onDelete: () => void; isDeleting?: boolean; } // Status badge configuratie const STATUS_CONFIG: Record = { active: { label: 'Actief', color: 'text-green-700', bgColor: 'bg-green-100 border-green-300', }, remission: { label: 'In remissie', color: 'text-blue-700', bgColor: 'bg-blue-100 border-blue-300', }, resolved: { label: 'Opgelost', color: 'text-slate-700', bgColor: 'bg-slate-100 border-slate-300', }, 'entered-in-error': { label: 'Foutief', color: 'text-red-700', bgColor: 'bg-red-100 border-red-300', }, }; // Severity labels const SEVERITY_LABELS: Record = { licht: 'Licht', matig: 'Matig', ernstig: 'Ernstig', }; export function DiagnosisCard({ diagnosis, isPrimary = false, onEdit, onDelete, isDeleting = false, }: DiagnosisCardProps) { const [isNotesExpanded, setIsNotesExpanded] = useState(false); const code = diagnosis.code_code || ''; const description = diagnosis.code_display || ''; const severity = diagnosis.severity_display || ''; const status = diagnosis.clinical_status || 'active'; const notes = diagnosis.note || ''; const recordedDate = diagnosis.recorded_date ? new Date(diagnosis.recorded_date) : null; const statusConfig = STATUS_CONFIG[status] || STATUS_CONFIG.active; const hasNotes = notes.trim().length > 0; return (
{/* Code + beschrijving */}

{code && description ? ( <> {code} {' — '} {description} ) : ( code || description || 'Geen diagnose code' )}

{/* Badges en menu */}
{/* HOOFD badge */} {isPrimary && ( HOOFD )} {/* Status badge */} {statusConfig.label} {/* Context menu */} Bewerken {isDeleting ? ( ) : ( )} Verwijderen
{/* Meta informatie */}
{severity && (
Ernst:{' '} {SEVERITY_LABELS[severity] || severity}
)} {recordedDate && (
Datum:{' '} {format(recordedDate, 'd MMM yyyy', { locale: nl })}
)}
{/* Onderbouwing (expand/collapse) */} {hasNotes && (
{isNotesExpanded && (
{notes}
)}
)}
); }