2025-08-22 21:55:03 -03:00
// src/main.tsx
2025-09-03 13:49:35 -03:00
import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import { QueryClient , QueryClientProvider } from '@tanstack/react-query' ;
2025-08-22 21:55:03 -03:00
2025-09-03 13:49:35 -03:00
import { BancasWidget } from './components/BancasWidget'
import { CongresoWidget } from './components/CongresoWidget'
import MapaBsAs from './components/MapaBsAs'
import { DipSenTickerWidget } from './components/DipSenTickerWidget'
import { TelegramaWidget } from './components/TelegramaWidget'
import { ConcejalesWidget } from './components/ConcejalesWidget'
import MapaBsAsSecciones from './components/MapaBsAsSecciones'
import { SenadoresWidget } from './components/SenadoresWidget'
import { DiputadosWidget } from './components/DiputadosWidget'
import { ResumenGeneralWidget } from './components/ResumenGeneralWidget'
import { SenadoresTickerWidget } from './components/SenadoresTickerWidget'
import { DiputadosTickerWidget } from './components/DiputadosTickerWidget'
import { ConcejalesTickerWidget } from './components/ConcejalesTickerWidget'
import { DiputadosPorSeccionWidget } from './components/DiputadosPorSeccionWidget'
import { SenadoresPorSeccionWidget } from './components/SenadoresPorSeccionWidget'
import { ConcejalesPorSeccionWidget } from './components/ConcejalesPorSeccionWidget'
2025-08-14 15:27:45 -03:00
2025-09-03 13:49:35 -03:00
import './index.css' ;
import { DevApp } from './components/DevApp' ;
const queryClient = new QueryClient ( ) ;
// Mapeamos el nombre del widget (del atributo data) al componente de React
const WIDGET_MAP : Record < string , React.ElementType > = {
'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 ,
} ;
// 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 } >
< DevApp / >
< / QueryClientProvider >
< / React.StrictMode >
) ;
} else {
// --- MODO PRODUCCIÓN ---
// Exponemos la función de renderizado para el bootstrap.js
const renderWidgets = ( ) = > {
2025-09-03 15:23:32 -03:00
console . log ( '%cReact: La función renderWidgets() ha sido EJECUTADA.' , 'color: green; font-weight: bold;' ) ;
2025-09-03 13:49:35 -03:00
const widgetContainers = document . querySelectorAll ( '[data-elecciones-widget]' ) ;
2025-09-03 15:23:32 -03:00
console . log ( ` React: Se encontraron ${ widgetContainers . length } contenedores con el atributo [data-elecciones-widget]. ` ) ;
if ( widgetContainers . length === 0 ) {
console . warn ( 'React: ADVERTENCIA - No se encontró ningún elemento en el DOM para renderizar un widget. Verifica que el HTML contenga <div data-elecciones-widget="...">.' ) ;
}
2025-09-03 13:49:35 -03:00
widgetContainers . forEach ( container = > {
const widgetName = ( container as HTMLElement ) . dataset . eleccionesWidget ;
2025-09-03 15:23:32 -03:00
console . log ( ` React: Procesando contenedor para el widget: " ${ widgetName } " ` ) ;
2025-09-03 13:49:35 -03:00
if ( widgetName && WIDGET_MAP [ widgetName ] ) {
const WidgetComponent = WIDGET_MAP [ widgetName ] ;
const root = ReactDOM . createRoot ( container ) ;
2025-09-03 15:23:32 -03:00
console . log ( ` React: Renderizando el widget " ${ widgetName } " en el contenedor. ` ) ;
2025-09-03 13:49:35 -03:00
root . render (
< React.StrictMode >
< QueryClientProvider client = { queryClient } >
< WidgetComponent / >
< / QueryClientProvider >
< / React.StrictMode >
) ;
2025-09-03 15:23:32 -03:00
} else {
console . error ( ` React: ERROR - No se encontró un componente para el nombre de widget: " ${ widgetName } " ` ) ;
2025-09-03 13:49:35 -03:00
}
} ) ;
} ;
( window as any ) . EleccionesWidgets = {
render : renderWidgets
} ;
2025-09-03 15:23:32 -03:00
console . log ( 'React: El objeto EleccionesWidgets ha sido asignado a window.' ) ;
2025-09-03 13:49:35 -03:00
}