// 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'; import { TfiMapAlt } from "react-icons/tfi"; // @ts-ignore import 'swiper/css'; // @ts-ignore import 'swiper/css/navigation'; import styles from './HomeCarouselWidget.module.css'; interface Props { eleccionId: number; categoriaId: number; titulo: string; mapLinkUrl: string; } 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; } }; export const HomeCarouselNacionalWidget = ({ eleccionId, categoriaId, titulo, mapLinkUrl }: Props) => { const uniqueId = `swiper-${Math.random().toString(36).substring(2, 9)}`; const prevButtonClass = `prev-${uniqueId}`; const nextButtonClass = `next-${uniqueId}`; const { data, isLoading, error } = useQuery({ queryKey: ['homeResumenNacional', eleccionId, categoriaId], queryFn: () => getHomeResumenNacional(eleccionId, categoriaId), refetchInterval: 30000, }) if (isLoading) return
Cargando widget...
; if (error || !data) return
No se pudieron cargar los datos.
; return (

{titulo}

Ver Mapa
{data.resultados.map(candidato => (
{candidato.nombreCandidato ? ( <> {candidato.nombreCandidato} {candidato.nombreCortoAgrupacion || candidato.nombreAgrupacion} ) : ( {candidato.nombreCortoAgrupacion || candidato.nombreAgrupacion} )}
{formatPercent(candidato.porcentaje)} {formatNumber(candidato.votos)} votos
))}
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)}
Última actualización: {formatDateTime(data.ultimaActualizacion)}
); };