// src/features/legislativas/nacionales/HomeCarouselNacionalWidget.tsx import { useQuery } from '@tanstack/react-query'; import { getHomeResumenNacional } from '../../../apiService'; import { ImageWithFallback } from '../../../components/common/ImageWithFallback'; import { assetBaseUrl } from '../../../apiService'; import { Swiper, SwiperSlide } from 'swiper/react'; import { Navigation, A11y } from 'swiper/modules'; // @ts-ignore import 'swiper/css'; // @ts-ignore import 'swiper/css/navigation'; import styles from './HomeCarouselWidget.module.css'; const formatPercent = (num: number | null | undefined) => `${(num || 0).toFixed(2).replace('.', ',')}%`; const formatNumber = (num: number) => num.toLocaleString('es-AR'); const formatDateTime = (dateString: string | undefined | null) => { if (!dateString) return '...'; try { const date = new Date(dateString); if (isNaN(date.getTime())) { return dateString; } const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); const year = date.getFullYear(); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${day}/${month}/${year}, ${hours}:${minutes} hs.`; } catch (e) { return dateString; } }; // Las props ya no incluyen distritoId interface Props { eleccionId: number; categoriaId: number; titulo: string; } export const HomeCarouselNacionalWidget = ({ eleccionId, categoriaId, titulo }: Props) => { const { data, isLoading, error } = useQuery({ // La queryKey ahora no necesita distritoId queryKey: ['homeResumenNacional', eleccionId, categoriaId], // Llama a la nueva función de la API queryFn: () => getHomeResumenNacional(eleccionId, categoriaId), }); if (isLoading) return
Cargando widget...
; if (error || !data) return
No se pudieron cargar los datos.
; return (

{titulo}

Participación {formatPercent(data.estadoRecuento?.participacionPorcentaje)}
Mesas escrutadas Escrutado {formatPercent(data.estadoRecuento?.mesasTotalizadasPorcentaje)}
Votos en blanco En blanco {formatPercent(data.votosEnBlancoPorcentaje)}
Votos totales Votos {formatNumber(data.votosTotales)}
{data.resultados.map(candidato => (
{candidato.nombreCandidato ? ( <> {candidato.nombreCandidato} {candidato.nombreCortoAgrupacion || candidato.nombreAgrupacion} ) : ( {candidato.nombreCortoAgrupacion || candidato.nombreAgrupacion} )}
{formatPercent(candidato.porcentaje)} {formatNumber(candidato.votos)} votos
))}
Última actualización: {formatDateTime(data.ultimaActualizacion)}
); };