// src/features/legislativas/provinciales/SenadoresTickerWidget.tsx import { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import { getResumenProvincial, getConfiguracionPublica, assetBaseUrl } from '../../../apiService'; import type { CategoriaResumen, ResultadoTicker } from '../../../types/types'; import { ImageWithFallback } from '../../../components/common/ImageWithFallback'; import './TickerWidget.css'; // Reutilizamos los mismos estilos const formatPercent = (num: number) => `${(num || 0).toFixed(2).replace('.', ',')}%`; const CATEGORIA_ID = 5; // ID para Senadores export const SenadoresTickerWidget = () => { const { data: categorias, isLoading, error } = useQuery({ queryKey: ['resumenProvincial'], queryFn: () => getResumenProvincial(1), refetchInterval: 30000, }); const { data: configData } = useQuery({ queryKey: ['configuracionPublica'], queryFn: getConfiguracionPublica, staleTime: 0, }); const cantidadAMostrar = parseInt(configData?.TickerResultadosCantidad || '5', 10); // Usamos useMemo para encontrar los datos específicos de Senadores const senadoresData = useMemo(() => { return categorias?.find(c => c.categoriaId === CATEGORIA_ID); }, [categorias]); if (isLoading) return

Cargando...

; if (error || !senadoresData) return

Datos de Senadores no disponibles.

; // Lógica para "Otros" let displayResults: ResultadoTicker[] = senadoresData.resultados.map((r: any) => ({ id: r.id, nombre: r.nombre, nombreCorto: r.nombreCorto ?? r.nombre, color: r.color ?? '#888888', logoUrl: r.logoUrl ?? null, votos: r.votos ?? 0, porcentaje: r.porcentaje ?? 0, })); if (senadoresData.resultados.length > cantidadAMostrar) { const topParties = senadoresData.resultados.slice(0, cantidadAMostrar - 1); const otherParties = senadoresData.resultados.slice(cantidadAMostrar - 1); const otrosPorcentaje = otherParties.reduce((sum, party) => sum + party.porcentaje, 0); const otrosEntry: ResultadoTicker = { id: `otros-senadores`, nombre: 'Otros', nombreCorto: 'Otros', color: '#888888', logoUrl: null, votos: 0, porcentaje: otrosPorcentaje, }; displayResults = [ ...topParties.map((r: any) => ({ id: r.id, nombre: r.nombre, nombreCorto: r.nombreCorto ?? r.nombre, color: r.color ?? '#888888', logoUrl: r.logoUrl ?? null, votos: r.votos ?? 0, porcentaje: r.porcentaje ?? 0, })), otrosEntry ]; } else { displayResults = senadoresData.resultados.slice(0, cantidadAMostrar).map((r: any) => ({ id: r.id, nombre: r.nombre, nombreCorto: r.nombreCorto ?? r.nombre, color: r.color ?? '#888888', logoUrl: r.logoUrl ?? null, votos: r.votos ?? 0, porcentaje: r.porcentaje ?? 0, })); } return (

RESUMEN DE {senadoresData.categoriaNombre}

Mesas: {formatPercent(senadoresData.estadoRecuento?.mesasTotalizadasPorcentaje || 0)} Part: {formatPercent(senadoresData.estadoRecuento?.participacionPorcentaje || 0)}
{displayResults.map(partido => (
{partido.nombreCorto || partido.nombre} {formatPercent(partido.porcentaje)}
))}
); };