// src/features/legislativas/nacionales/PanelNacionalWidget.tsx import { useMemo, useState, Suspense } from 'react'; import { useSuspenseQuery } from '@tanstack/react-query'; // <-- CAMBIO CLAVE import { getPanelElectoral } from '../../../apiService'; import { MapaNacional } from './components/MapaNacional'; import { PanelResultados } from './components/PanelResultados'; import { Breadcrumbs } from './components/Breadcrumbs'; import './PanelNacional.css'; import Select from 'react-select'; import type { PanelElectoralDto } from '../../../types/types'; interface PanelNacionalWidgetProps { eleccionId: number; } type AmbitoState = { id: string | null; nivel: 'pais' | 'provincia' | 'municipio'; nombre: string; provinciaNombre?: string; provinciaDistritoId?: string | null; }; const CATEGORIAS_NACIONALES = [ { value: 2, label: 'Diputados Nacionales' }, { value: 1, label: 'Senadores Nacionales' }, ]; // Creamos un componente interno para poder usar Suspense correctamente const PanelContenido = ({ eleccionId, ambitoActual, categoriaId }: { eleccionId: number, ambitoActual: AmbitoState, categoriaId: number }) => { // Este hook ahora suspenderá el renderizado si los datos no están listos const { data } = useSuspenseQuery({ queryKey: ['panelElectoral', eleccionId, ambitoActual.id, categoriaId], queryFn: () => getPanelElectoral(eleccionId, ambitoActual.id, categoriaId), }); return ( ); }; export const PanelNacionalWidget = ({ eleccionId }: PanelNacionalWidgetProps) => { const [ambitoActual, setAmbitoActual] = useState({ id: null, nivel: 'pais', nombre: 'Argentina', provinciaDistritoId: null }); const [categoriaId, setCategoriaId] = useState(2); const [isPanelOpen, setIsPanelOpen] = useState(true); const handleAmbitoSelect = (nuevoAmbitoId: string, nuevoNivel: 'provincia' | 'municipio', nuevoNombre: string) => { setAmbitoActual(prev => ({ id: nuevoAmbitoId, nivel: nuevoNivel, nombre: nuevoNombre, provinciaNombre: nuevoNivel === 'municipio' ? prev.nombre : (nuevoNivel === 'provincia' ? nuevoNombre : undefined), provinciaDistritoId: nuevoNivel === 'provincia' ? nuevoAmbitoId : prev.provinciaDistritoId })); }; const handleResetToPais = () => { setAmbitoActual({ id: null, nivel: 'pais', nombre: 'Argentina', provinciaDistritoId: null }); }; const handleVolverAProvincia = () => { if (ambitoActual.provinciaDistritoId && ambitoActual.provinciaNombre) { setAmbitoActual({ id: ambitoActual.provinciaDistritoId, nivel: 'provincia', nombre: ambitoActual.provinciaNombre, provinciaDistritoId: ambitoActual.provinciaDistritoId }); } else { handleResetToPais(); } }; const selectedCategoria = useMemo(() => CATEGORIAS_NACIONALES.find(c => c.value === categoriaId), [categoriaId] ); return (

Resultados elecciones {ambitoActual.nombre}