106 lines
5.4 KiB
TypeScript
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
|
|
};
|
|
} |