'use client' import { useEffect, useState } from 'react' import { isSuppressed, type PiramideData } from '@/lib/dashboard-types' import { queries } from '@/lib/dashboard-queries' import type { DashboardFilters } from '@/lib/dashboard-types' import { WidgetShell } from './widget-shell' import { ETARIO_ORDER } from '@/lib/dashboard-utils' const GENERO_COLOR: Record = { 'Femenino': '#EE761A', 'Masculino': '#43BBC8', 'No binario/Otro': '#F8AD13', 'Prefiero no decir':'#6b7280', } export function PiramideDemografica({ surveyId, filters }: { surveyId: string; filters: DashboardFilters }) { const [data, setData] = useState(null) const [sup, setSup] = useState(false) useEffect(() => { setData(null); setSup(false) queries.piramide(surveyId, filters) .then(d => { if (isSuppressed(d)) setSup(true); else setData(d as PiramideData) }) .catch(() => {}) }, [surveyId, JSON.stringify(filters)]) const status = !data && !sup ? 'loading' : sup ? 'suppressed' : 'ok' const maxN = data ? Math.max(...data.data.map(c => c.n ?? 0), 1) : 1 const generos = ['Femenino','Masculino','No binario/Otro'] return ( {data && (
{generos.map(g => ( {g} ))}
{ETARIO_ORDER.filter(e => e !== 'Prefiero no decir').map(etario => { const row = generos.map(gen => { const cell = data.data.find(c => c.etario === etario && c.genero === gen) return { gen, n: cell?.n ?? null, suppressed: cell?.suppressed ?? true } }) return (
{etario}
{row.map(({ gen, n, suppressed }) => (
))}
{row.every(r => r.suppressed) ? '🔒' : row.reduce((s, r) => s + (r.n ?? 0), 0)}
) })}
)} ) }