| 
									
										
										
										
											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:03:15 -03:00
										 |  |  |         console.log('React: Se ha ejecutado renderWidgets.'); | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  |         const widgetContainers = document.querySelectorAll('[data-elecciones-widget]'); | 
					
						
							| 
									
										
										
										
											2025-09-03 15:03:15 -03:00
										 |  |  |         console.log(`React: Se encontraron ${widgetContainers.length} contenedores de widget.`); | 
					
						
							| 
									
										
										
										
											2025-09-03 13:49:35 -03:00
										 |  |  |         widgetContainers.forEach(container => { | 
					
						
							|  |  |  |             const widgetName = (container as HTMLElement).dataset.eleccionesWidget; | 
					
						
							|  |  |  |             if (widgetName && WIDGET_MAP[widgetName]) { | 
					
						
							|  |  |  |                 const WidgetComponent = WIDGET_MAP[widgetName]; | 
					
						
							|  |  |  |                 const root = ReactDOM.createRoot(container); | 
					
						
							|  |  |  |                 root.render( | 
					
						
							|  |  |  |                     <React.StrictMode> | 
					
						
							|  |  |  |                         <QueryClientProvider client={queryClient}> | 
					
						
							|  |  |  |                             <WidgetComponent /> | 
					
						
							|  |  |  |                         </QueryClientProvider> | 
					
						
							|  |  |  |                     </React.StrictMode> | 
					
						
							|  |  |  |                 ); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     (window as any).EleccionesWidgets = { | 
					
						
							|  |  |  |         render: renderWidgets | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | } |