Files
Elecciones-2025/Elecciones-Web/frontend/src/main.tsx
2025-10-02 13:38:28 -03:00

106 lines
5.4 KiB
TypeScript

// src/main.tsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
/*
import { BancasWidget } from './features/legislativas/provinciales/BancasWidget'
import { CongresoWidget } from './features/legislativas/provinciales/CongresoWidget'
import MapaBsAs from './features/legislativas/provinciales/MapaBsAs'
import { DipSenTickerWidget } from './features/legislativas/provinciales/DipSenTickerWidget'
import { TelegramaWidget } from './features/legislativas/provinciales/TelegramaWidget'
import { ConcejalesWidget } from './features/legislativas/provinciales/ConcejalesWidget'
import MapaBsAsSecciones from './features/legislativas/provinciales/MapaBsAsSecciones'
import { SenadoresWidget } from './features/legislativas/provinciales/SenadoresWidget'
import { DiputadosWidget } from './features/legislativas/provinciales/DiputadosWidget'
import { ResumenGeneralWidget } from './features/legislativas/provinciales/ResumenGeneralWidget'
import { SenadoresTickerWidget } from './features/legislativas/provinciales/SenadoresTickerWidget'
import { DiputadosTickerWidget } from './features/legislativas/provinciales/DiputadosTickerWidget'
import { ConcejalesTickerWidget } from './features/legislativas/provinciales/ConcejalesTickerWidget'
import { DiputadosPorSeccionWidget } from './features/legislativas/provinciales/DiputadosPorSeccionWidget'
import { SenadoresPorSeccionWidget } from './features/legislativas/provinciales/SenadoresPorSeccionWidget'
import { ConcejalesPorSeccionWidget } from './features/legislativas/provinciales/ConcejalesPorSeccionWidget'
import { ResultadosTablaDetalladaWidget } from './features/legislativas/provinciales/ResultadosTablaDetalladaWidget';
import { ResultadosRankingMunicipioWidget } from './features/legislativas/provinciales/ResultadosRankingMunicipioWidget';
*/
//import { DevApp } from './components/common/DevApp';
import { HomeCarouselWidget } from './features/legislativas/nacionales/HomeCarouselWidget';
import { PanelNacionalWidget } from './features/legislativas/nacionales/PanelNacionalWidget';
import { ResultadosNacionalesCardsWidget } from './features/legislativas/nacionales/ResultadosNacionalesCardsWidget';
import { CongresoNacionalWidget } from './features/legislativas/nacionales/CongresoNacionalWidget';
import { DevAppLegislativas } from './features/legislativas/DevAppLegislativas';
const queryClient = new QueryClient();
// Mapeamos el nombre del widget (del atributo data) al componente de React
const WIDGET_MAP: Record<string, React.ElementType> = {
// Widgets Legislativas Provinciales BsAs 2025
/*'resumen-senadores': SenadoresWidget,
'resumen-diputados': DiputadosWidget,
'resumen-concejales': ConcejalesWidget,
'congreso-provincial': CongresoWidget,
'distribucion-bancas': BancasWidget,
'mapa-municipios': MapaBsAs,
'mapa-secciones': MapaBsAsSecciones,
'consulta-telegramas': TelegramaWidget,
'ticker-senadores': SenadoresTickerWidget,
'ticker-diputados': DiputadosTickerWidget,
'ticker-concejales': ConcejalesTickerWidget,
'ticker-dip-sen': DipSenTickerWidget,
'resumen-general': ResumenGeneralWidget,
'diputados-por-seccion': DiputadosPorSeccionWidget,
'senadores-por-seccion': SenadoresPorSeccionWidget,
'concejales-por-seccion': ConcejalesPorSeccionWidget,
'resultados-tabla-detallada-por-seccion' : ResultadosTablaDetalladaWidget,
'resultados-tabla-detallada-por-municipio' : ResultadosRankingMunicipioWidget,*/
// Widgets Legislativas Nacionales 2025
'home-carousel': HomeCarouselWidget,
'panel-nacional': PanelNacionalWidget,
'resultados-nacionales-cards': ResultadosNacionalesCardsWidget,
'composicion-congreso-nacional': CongresoNacionalWidget,
};
// Vite establece `import.meta.env.DEV` a `true` cuando ejecutamos 'npm run dev'
if (import.meta.env.DEV) {
// --- MODO DESARROLLO ---
// Renderizamos nuestra página de showcase en el div#root
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<QueryClientProvider client={queryClient}>
<DevAppLegislativas />
{/* <DevApp /> */}
</QueryClientProvider>
</React.StrictMode>
);
} else {
// --- MODO PRODUCCIÓN ---
// Exponemos la función de renderizado para el bootstrap.js
// La función de renderizado acepta el contenedor y las props
const renderWidgets = (container: HTMLElement, props: DOMStringMap) => {
const widgetName = props.eleccionesWidget;
if (widgetName && WIDGET_MAP[widgetName]) {
const WidgetComponent = WIDGET_MAP[widgetName];
const root = ReactDOM.createRoot(container);
// Pasamos todas las props (ej. { eleccionesWidget: '...', focoMunicipio: '...' })
// al componente que se va a renderizar.
root.render(
<React.StrictMode>
<QueryClientProvider client={queryClient}>
<WidgetComponent {...props} />
</QueryClientProvider>
</React.StrictMode>
);
} else {
console.error(`React: ERROR - No se encontró un componente para el nombre de widget: "${widgetName}"`);
}
};
// La función expuesta ahora se llamará por cada widget, no una sola vez.
(window as any).EleccionesWidgets = {
render: renderWidgets
};
}