// src/components/BancasWidget.tsx import { useState, useEffect } from 'react'; import { ResponsiveWaffle } from '@nivo/waffle'; import { getBancasPorSeccion } from '../apiService'; import type { ProyeccionBancas } from '../types'; import './BancasWidget.css'; // Paleta de colores consistente const NIVO_COLORS = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"]; // Las Secciones Electorales de la Provincia (esto podría venir de la API en el futuro) const secciones = [ { id: '1', nombre: 'Primera Sección' }, { id: '2', nombre: 'Segunda Sección' }, { id: '3', nombre: 'Tercera Sección' }, { id: '4', nombre: 'Cuarta Sección' }, { id: '5', nombre: 'Quinta Sección' }, { id: '6', nombre: 'Sexta Sección' }, { id: '7', nombre: 'Séptima Sección' }, { id: '8', nombre: 'Octava Sección (Capital)' }, ]; export const BancasWidget = () => { const [seccionActual, setSeccionActual] = useState('1'); // Empezamos con la Primera Sección const [data, setData] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const fetchData = async () => { setLoading(true); try { const result = await getBancasPorSeccion(seccionActual); setData(result); } catch (error) { console.error(`Error cargando datos de bancas para sección ${seccionActual}:`, error); setData(null); // Limpiar datos en caso de error } finally { setLoading(false); } }; fetchData(); }, [seccionActual]); // Se ejecuta cada vez que cambia la sección const waffleData = data?.proyeccion.map(p => ({ id: p.agrupacionNombre, label: p.agrupacionNombre, value: p.bancas, })) || []; const totalBancas = waffleData.reduce((sum, current) => sum + current.value, 0); return (

Distribución de Bancas

{loading ?

Cargando...

: !data ?

No hay datos disponibles para esta sección.

: }
); };