'use client' import { useEffect, useState } from 'react' import { isSuppressed, type DistribucionData } from '@/lib/dashboard-types' import { queries } from '@/lib/dashboard-queries' import type { DashboardFilters } from '@/lib/dashboard-types' import { WidgetShell } from './widget-shell' const SEGMENTS = [ { key: 'disc_propia', label: 'Discapacidad propia', color: '#43BBC8' }, { key: 'familiar', label: 'Familiar con disc.', color: '#F8AD13' }, { key: 'adulto_mayor', label: 'Adulto mayor', color: '#EE761A' }, { key: 'ninguno', label: 'Sin rol de cuidado', color: '#3d506b' }, ] as const export function DonutCuidados({ surveyId, filters }: { surveyId: string; filters: DashboardFilters }) { const [data, setData] = useState(null) const [sup, setSup] = useState(false) useEffect(() => { setData(null); setSup(false) queries.distribucion(surveyId, filters) .then(d => { if (isSuppressed(d)) setSup(true) else setData(d as DistribucionData) }).catch(() => {}) }, [surveyId, JSON.stringify(filters)]) const status = !data && !sup ? 'loading' : sup ? 'suppressed' : 'ok' // SVG donut const R = 60; const cx = 75; const cy = 75; const stroke = 22 let offset = 0 const circumference = 2 * Math.PI * R const arcs = data ? SEGMENTS.map(s => { const pct = (data[s.key as keyof DistribucionData] as number) ?? 0 const dash = (pct / 100) * circumference const gap = circumference - dash const arc = { ...s, dash, gap, offset: circumference * (1 - offset / 100) } offset += pct return arc }) : [] return ( {data && (
    {SEGMENTS.map(s => (
  • {s.label} {(data[s.key as keyof DistribucionData] as number ?? 0)}%
  • ))}
)}
) }