| 
									
										
										
										
											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-17 11:31:17 -03:00
										 |  |  | 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';
 | 
					
						
							| 
									
										
										
										
											2025-09-04 14:35:12 -03:00
										 |  |  | import './index.css'; | 
					
						
							| 
									
										
										
										
											2025-09-17 11:31:17 -03:00
										 |  |  | import { DevAppLegislativas } from './features/legislativas/DevAppLegislativas'; | 
					
						
							| 
									
										
										
										
											2025-09-04 14:35:12 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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, | 
					
						
							| 
									
										
										
										
											2025-09-04 14:35:12 -03:00
										 |  |  |     'resultados-tabla-detallada-por-seccion' : ResultadosTablaDetalladaWidget, | 
					
						
							| 
									
										
										
										
											2025-09-04 15:54:00 -03:00
										 |  |  |     'resultados-tabla-detallada-por-municipio' : ResultadosRankingMunicipioWidget, | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // 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}> | 
					
						
							| 
									
										
										
										
											2025-09-17 11:31:17 -03:00
										 |  |  |                 <DevAppLegislativas /> | 
					
						
							|  |  |  |                 {/* <DevApp /> */} | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  |             </QueryClientProvider> | 
					
						
							|  |  |  |         </React.StrictMode> | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | } else { | 
					
						
							|  |  |  |     // --- MODO PRODUCCIÓN ---
 | 
					
						
							|  |  |  |     // Exponemos la función de renderizado para el bootstrap.js
 | 
					
						
							| 
									
										
										
										
											2025-09-10 14:20:44 -03:00
										 |  |  |     // 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); | 
					
						
							| 
									
										
										
										
											2025-09-03 15:23:32 -03:00
										 |  |  |              | 
					
						
							| 
									
										
										
										
											2025-09-10 14:20:44 -03:00
										 |  |  |             // 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}"`); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-10 14:20:44 -03:00
										 |  |  |     // La función expuesta ahora se llamará por cada widget, no una sola vez.
 | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  |     (window as any).EleccionesWidgets = { | 
					
						
							| 
									
										
										
										
											2025-09-10 14:20:44 -03:00
										 |  |  |         render: renderWidgets  | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  |     }; | 
					
						
							|  |  |  | } |