| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | // src/features/legislativas/nacionales/components/ProvinciaCard.tsx
 | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  | import type { ResumenProvincia, CategoriaResumen } from '../../../../types/types'; | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | import { MiniMapaSvg } from './MiniMapaSvg'; | 
					
						
							|  |  |  | import { ImageWithFallback } from '../../../../components/common/ImageWithFallback'; | 
					
						
							|  |  |  | import { assetBaseUrl } from '../../../../apiService'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  | interface CategoriaDisplayProps { | 
					
						
							|  |  |  |     categoria: CategoriaResumen; | 
					
						
							|  |  |  |     mostrarBancas?: boolean; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | interface ProvinciaCardProps { | 
					
						
							|  |  |  |     data: ResumenProvincia; | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |     mostrarBancas?: boolean; | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const formatNumber = (num: number) => num.toLocaleString('es-AR'); | 
					
						
							|  |  |  | const formatPercent = (num: number) => `${num.toFixed(2).replace('.', ',')}%`; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  | const CategoriaDisplay = ({ categoria, mostrarBancas }: CategoriaDisplayProps) => { | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  |     return ( | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |         <div className="categoria-bloque"> | 
					
						
							|  |  |  |             <h4 className="categoria-titulo">{categoria.categoriaNombre}</h4> | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |             {categoria.resultados.map(res => ( | 
					
						
							|  |  |  |                 <div  | 
					
						
							|  |  |  |                     key={res.agrupacionId}  | 
					
						
							|  |  |  |                     className="candidato-row" | 
					
						
							|  |  |  |                     style={{ borderLeftColor: res.color || '#ccc' }} | 
					
						
							|  |  |  |                 > | 
					
						
							| 
									
										
										
										
											2025-10-03 13:26:20 -03:00
										 |  |  |                     {/* --- INICIO DE LA MODIFICACIÓN --- */} | 
					
						
							|  |  |  |                     <div className="candidato-foto-wrapper" style={{ backgroundColor: res.color || '#e9ecef' }}> | 
					
						
							|  |  |  |                         <ImageWithFallback | 
					
						
							|  |  |  |                             src={res.fotoUrl ?? undefined} | 
					
						
							|  |  |  |                             fallbackSrc={`${assetBaseUrl}/default-avatar.png`} | 
					
						
							|  |  |  |                             alt={res.nombreCandidato ?? res.nombreAgrupacion} | 
					
						
							|  |  |  |                             className="candidato-foto" | 
					
						
							|  |  |  |                         /> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                     {/* --- FIN DE LA MODIFICACIÓN --- */} | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     <div className="candidato-data"> | 
					
						
							| 
									
										
										
										
											2025-10-03 13:26:20 -03:00
										 |  |  |                         {res.nombreCandidato ? ( | 
					
						
							|  |  |  |                             <> | 
					
						
							|  |  |  |                                 <span className="candidato-nombre">{res.nombreCandidato}</span> | 
					
						
							|  |  |  |                                 <span className="candidato-partido">{res.nombreCortoAgrupacion || res.nombreAgrupacion}</span> | 
					
						
							|  |  |  |                             </> | 
					
						
							|  |  |  |                         ) : ( | 
					
						
							|  |  |  |                             <span className="candidato-nombre">{res.nombreCortoAgrupacion || res.nombreAgrupacion}</span> | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                         )} | 
					
						
							|  |  |  |                         <div className="progress-bar-container"> | 
					
						
							|  |  |  |                             <div className="progress-bar" style={{ width: `${res.porcentaje}%`, backgroundColor: res.color || '#ccc' }} /> | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  |                         </div> | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     </div> | 
					
						
							|  |  |  |                     <div className="candidato-stats"> | 
					
						
							|  |  |  |                         <span className="stats-percent">{formatPercent(res.porcentaje)}</span> | 
					
						
							|  |  |  |                         <span className="stats-votos">{formatNumber(res.votos)} votos</span> | 
					
						
							|  |  |  |                     </div> | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     {mostrarBancas && ( | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  |                         <div className="stats-bancas"> | 
					
						
							|  |  |  |                             +{res.bancasObtenidas} | 
					
						
							|  |  |  |                             <span>Bancas</span> | 
					
						
							|  |  |  |                         </div> | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     )} | 
					
						
							|  |  |  |                 </div> | 
					
						
							|  |  |  |             ))} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  |             <footer className="card-footer"> | 
					
						
							|  |  |  |                 <div> | 
					
						
							|  |  |  |                     <span>Participación</span> | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     <strong>{formatPercent(categoria.estadoRecuento?.participacionPorcentaje ?? 0)}</strong> | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  |                 </div> | 
					
						
							|  |  |  |                 <div> | 
					
						
							|  |  |  |                     <span>Mesas escrutadas</span> | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     <strong>{formatPercent(categoria.estadoRecuento?.mesasTotalizadasPorcentaje ?? 0)}</strong> | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  |                 </div> | 
					
						
							|  |  |  |                 <div> | 
					
						
							|  |  |  |                     <span>Votos totales</span> | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     <strong>{formatNumber(categoria.estadoRecuento?.cantidadVotantes ?? 0)}</strong> | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  |                 </div> | 
					
						
							|  |  |  |             </footer> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export const ProvinciaCard = ({ data, mostrarBancas }: ProvinciaCardProps) => { | 
					
						
							|  |  |  |     const colorGanador = data.categorias[0]?.resultados[0]?.color || '#d1d1d1'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return ( | 
					
						
							|  |  |  |         <div className="provincia-card"> | 
					
						
							|  |  |  |             <header className="card-header"> | 
					
						
							|  |  |  |                 <div className="header-info"> | 
					
						
							|  |  |  |                     <h3 style={{ whiteSpace: 'normal' }}>{data.provinciaNombre}</h3> | 
					
						
							|  |  |  |                 </div> | 
					
						
							|  |  |  |                 <div className="header-map"> | 
					
						
							|  |  |  |                     <MiniMapaSvg provinciaNombre={data.provinciaNombre} fillColor={colorGanador} /> | 
					
						
							|  |  |  |                 </div> | 
					
						
							|  |  |  |             </header> | 
					
						
							|  |  |  |             <div className="card-body"> | 
					
						
							|  |  |  |                 {data.categorias.map(categoria => ( | 
					
						
							|  |  |  |                     <CategoriaDisplay | 
					
						
							|  |  |  |                         key={categoria.categoriaId} | 
					
						
							|  |  |  |                         categoria={categoria} | 
					
						
							| 
									
										
										
										
											2025-10-03 13:26:20 -03:00
										 |  |  |                         mostrarBancas={mostrarBancas} | 
					
						
							| 
									
										
										
										
											2025-10-01 10:03:01 -03:00
										 |  |  |                     /> | 
					
						
							|  |  |  |                 ))} | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2025-09-28 19:04:09 -03:00
										 |  |  | }; |