'use client'; /** * Linked Evidence Component * * Shows source data in a hover popover for overdracht aandachtspunten. * E5.S2: Provides quick access to original source without leaving context. */ import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import type { Aandachtspunt } from '@/lib/types/overdracht'; import { ExternalLink, Activity, FileText, AlertTriangle } from 'lucide-react'; import { cn } from '@/lib/utils'; interface LinkedEvidenceProps { bron: Aandachtspunt['bron']; sourceData?: Aandachtspunt['sourceData']; className?: string; } export function LinkedEvidence({ bron, sourceData, className }: LinkedEvidenceProps) { // If no source data, just show label without popover if (!sourceData) { return ( {bron.label} • {bron.datum} ); } const getBronIcon = () => { switch (bron.type) { case 'observatie': return ; case 'rapportage': case 'verpleegkundig': return ; case 'risico': return ; } }; const getInterpretationColor = (code: string | undefined) => { if (!code) return 'text-slate-600'; switch (code) { case 'HH': case 'LL': return 'text-red-700 font-semibold'; case 'H': case 'L': return 'text-amber-700 font-medium'; case 'N': return 'text-teal-700'; default: return 'text-slate-600'; } }; const getRiskLevelColor = (level: string | undefined) => { if (!level) return 'text-slate-600'; switch (level.toLowerCase()) { case 'zeer_hoog': case 'hoog': return 'text-red-700 font-semibold'; case 'gemiddeld': return 'text-amber-700'; case 'laag': return 'text-teal-700'; default: return 'text-slate-600'; } }; return (
{/* Header */}
{getBronIcon()}
{bron.label}
{bron.datum}
{/* Content based on type */} {bron.type === 'observatie' && sourceData.value && (
{sourceData.value} {sourceData.unit && ( {sourceData.unit} )}
{sourceData.interpretation && (
Interpretatie: {sourceData.interpretation} {sourceData.interpretation === 'HH' && ' (Kritiek hoog)'} {sourceData.interpretation === 'H' && ' (Hoog)'} {sourceData.interpretation === 'LL' && ' (Kritiek laag)'} {sourceData.interpretation === 'L' && ' (Laag)'} {sourceData.interpretation === 'N' && ' (Normaal)'}
)}
)} {(bron.type === 'rapportage' || bron.type === 'verpleegkundig') && sourceData.content && (
{sourceData.content}
{sourceData.createdBy && (
Door: {sourceData.createdBy}
)}
)} {bron.type === 'risico' && (
{sourceData.riskLevel && (
Risiconiveau: {sourceData.riskLevel.replace('_', ' ')}
)} {sourceData.rationale && (
{sourceData.rationale}
)}
)}
); }