// src/components/ConfiguracionNacional.tsx import { useState, useEffect } from 'react'; import { useQueryClient } from '@tanstack/react-query'; import { getAgrupaciones, getConfiguracion, updateConfiguracion } from '../services/apiService'; import type { AgrupacionPolitica } from '../types'; import './AgrupacionesManager.css'; export const ConfiguracionNacional = () => { const queryClient = useQueryClient(); const [agrupaciones, setAgrupaciones] = useState([]); const [loading, setLoading] = useState(true); const [presidenciaDiputadosId, setPresidenciaDiputadosId] = useState(''); const [presidenciaSenadoId, setPresidenciaSenadoId] = useState(''); const [modoOficialActivo, setModoOficialActivo] = useState(false); const [diputadosTipoBanca, setDiputadosTipoBanca] = useState<'ganada' | 'previa'>('ganada'); // El estado para el tipo de banca del senado ya no es necesario para la UI, // pero lo mantenemos para no romper el handleSave. const [senadoTipoBanca, setSenadoTipoBanca] = useState<'ganada' | 'previa'>('ganada'); useEffect(() => { const loadInitialData = async () => { try { setLoading(true); const [agrupacionesData, configData] = await Promise.all([getAgrupaciones(), getConfiguracion()]); setAgrupaciones(agrupacionesData); setPresidenciaDiputadosId(configData.PresidenciaDiputadosNacional || ''); setPresidenciaSenadoId(configData.PresidenciaSenadoNacional || ''); setModoOficialActivo(configData.UsarDatosOficialesNacionales === 'true'); setDiputadosTipoBanca(configData.PresidenciaDiputadosNacional_TipoBanca === 'previa' ? 'previa' : 'ganada'); setSenadoTipoBanca(configData.PresidenciaSenadoNacional_TipoBanca === 'previa' ? 'previa' : 'ganada'); } catch (err) { console.error("Error al cargar datos de configuración nacional:", err); } finally { setLoading(false); } }; loadInitialData(); }, []); const handleSave = async () => { try { await updateConfiguracion({ "PresidenciaDiputadosNacional": presidenciaDiputadosId, "PresidenciaSenadoNacional": presidenciaSenadoId, "UsarDatosOficialesNacionales": modoOficialActivo.toString(), "PresidenciaDiputadosNacional_TipoBanca": diputadosTipoBanca, // Aunque no se muestre, guardamos el valor para consistencia "PresidenciaSenadoNacional_TipoBanca": senadoTipoBanca, }); queryClient.invalidateQueries({ queryKey: ['composicionNacional'] }); alert('Configuración nacional guardada.'); } catch { alert('Error al guardar.'); } }; if (loading) return

Cargando...

; return (

Configuración de Widgets Nacionales

{/*

Si está activo, los widgets nacionales usarán la composición manual de bancas. Si no, usarán la proyección en tiempo real.

*/}
{/* Columna Diputados */}

Este escaño es parte de los 257 diputados y se descuenta del total del partido.

{presidenciaDiputadosId && (
)}
{/* Columna Senadores */}

Este escaño es adicional a los 72 senadores y no se descuenta del total del partido.

); };