'use client'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { cn } from '@/lib/utils'; import { type LifeDomainScore, type LifeDomain, LIFE_DOMAIN_META, LIFE_DOMAINS, getScoreColor, getAverageScore, } from '@/lib/types/leefgebieden'; import { LeefgebiedenBadge } from './leefgebieden-badge'; interface LeefgebiedenScoreBarProps { score: LifeDomainScore; showTarget?: boolean; compact?: boolean; } /** * Single life domain score as a progress bar */ export function LeefgebiedenScoreBar({ score, showTarget = true, compact = false, }: LeefgebiedenScoreBarProps) { const meta = LIFE_DOMAIN_META[score.domain]; const percentage = (score.current / 5) * 100; const targetPercentage = (score.target / 5) * 100; return (
{meta.emoji} {meta.shortLabel} {score.priority === 'hoog' && ( Prioriteit )}
{score.current} {showTarget && ( <> {score.target} )}
{/* Custom progress bar with domain-specific color */}
{showTarget && (
)}
); } interface LeefgebiedenScoresProps { scores: LifeDomainScore[]; showTarget?: boolean; compact?: boolean; showSummary?: boolean; className?: string; } /** * Display all 7 life domain scores */ export function LeefgebiedenScores({ scores, showTarget = true, compact = false, showSummary = true, className, }: LeefgebiedenScoresProps) { // Ensure we have all 7 domains in the correct order const orderedScores = LIFE_DOMAINS.map((domain) => { const found = scores.find((s) => s.domain === domain); return ( found || { domain, baseline: 3, current: 3, target: 4, notes: '', priority: 'middel' as const, } ); }); const avgCurrent = getAverageScore(orderedScores, 'current'); const avgTarget = getAverageScore(orderedScores, 'target'); const highPriority = orderedScores.filter((s) => s.priority === 'hoog'); return (
{showSummary && (
Gemiddelde score:{' '} {avgCurrent} {showTarget && ( → {avgTarget} )}
{highPriority.length > 0 && (
Prioriteiten: {highPriority.map((s) => ( ))}
)}
)}
{orderedScores.map((score) => ( ))}
); } interface LeefgebiedenScoresCardProps { scores: LifeDomainScore[]; title?: string; showTarget?: boolean; className?: string; } /** * Life domain scores in a Card wrapper */ export function LeefgebiedenScoresCard({ scores, title = 'Leefgebieden', showTarget = true, className, }: LeefgebiedenScoresCardProps) { return ( 📊 {title} ); }