Feats y Fixs Varios
This commit is contained in:
		| @@ -4,7 +4,7 @@ import { useQuery, useQueryClient } from '@tanstack/react-query'; | ||||
| import { getBancadas, getAgrupaciones, updateBancada, type UpdateBancadaData } from '../services/apiService'; | ||||
| import type { Bancada, AgrupacionPolitica } from '../types'; | ||||
| import { OcupantesModal } from './OcupantesModal'; | ||||
| import './AgrupacionesManager.css'; // Asegúrate de que este CSS tenga los estilos de .chamber-tabs | ||||
| import './AgrupacionesManager.css'; | ||||
|  | ||||
| const camaras = ['diputados', 'senadores'] as const; | ||||
|  | ||||
| @@ -14,13 +14,11 @@ export const BancasManager = () => { | ||||
|   const [bancadaSeleccionada, setBancadaSeleccionada] = useState<Bancada | null>(null); | ||||
|   const queryClient = useQueryClient(); | ||||
|  | ||||
|   // Obtenemos todas las agrupaciones para poblar el <select> | ||||
|   const { data: agrupaciones = [] } = useQuery<AgrupacionPolitica[]>({ | ||||
|     queryKey: ['agrupaciones'], | ||||
|     queryFn: getAgrupaciones | ||||
|   }); | ||||
|  | ||||
|   // Obtenemos las bancas para la cámara activa (diputados o senadores) | ||||
|   const { data: bancadas = [], isLoading, error } = useQuery<Bancada[]>({ | ||||
|     queryKey: ['bancadas', activeTab], | ||||
|     queryFn: () => getBancadas(activeTab), | ||||
| @@ -40,10 +38,9 @@ export const BancasManager = () => { | ||||
|  | ||||
|     try { | ||||
|       await updateBancada(bancadaId, payload); | ||||
|       // Invalida la query para forzar una recarga de datos frescos desde el servidor | ||||
|       queryClient.invalidateQueries({ queryKey: ['bancadas', activeTab] }); | ||||
|     } catch (err) { | ||||
|       alert("Error al guardar el cambio."); | ||||
|       alert("Error al guardar el cambio de agrupación."); | ||||
|     } | ||||
|   }; | ||||
|  | ||||
| @@ -57,8 +54,8 @@ export const BancasManager = () => { | ||||
|   return ( | ||||
|     <div className="admin-module"> | ||||
|       <h2>Gestión de Ocupación de Bancas</h2> | ||||
|       <p>Asigne a cada banca un partido político y, opcionalmente, los datos de la persona que la ocupa.</p> | ||||
|        | ||||
|       <p>Asigne a cada banca física un partido político y, opcionalmente, los datos de la persona que la ocupa.</p> | ||||
|  | ||||
|       <div className="chamber-tabs"> | ||||
|         {camaras.map(camara => ( | ||||
|           <button | ||||
| @@ -75,16 +72,25 @@ export const BancasManager = () => { | ||||
|         <table> | ||||
|           <thead> | ||||
|             <tr> | ||||
|               <th>Banca #</th> | ||||
|               <th>Partido Asignado</th> | ||||
|               <th>Ocupante Actual</th> | ||||
|               <th>Acciones</th> | ||||
|               <th style={{ width: '15%' }}>Banca #</th> | ||||
|               <th style={{ width: '35%' }}>Partido Asignado</th> | ||||
|               <th style={{ width: '30%' }}>Ocupante Actual</th> | ||||
|               <th style={{ width: '20%' }}>Acciones</th> | ||||
|             </tr> | ||||
|           </thead> | ||||
|           <tbody> | ||||
|             {bancadas.map((bancada, index) => ( | ||||
|             {bancadas.map((bancada) => ( | ||||
|               <tr key={bancada.id}> | ||||
|                 <td>{`${activeTab.charAt(0).toUpperCase()}-${index + 1}`}</td> | ||||
|                 {/* Usamos el NumeroBanca para la etiqueta visual */} | ||||
|                 <td> | ||||
|                   {`${activeTab.charAt(0).toUpperCase()}-${bancada.numeroBanca}`} | ||||
|                   {((activeTab === 'diputados' && bancada.numeroBanca === 92) || | ||||
|                     (activeTab === 'senadores' && bancada.numeroBanca === 46)) && ( | ||||
|                       <span style={{ marginLeft: '8px', fontSize: '0.8em', color: '#666', fontStyle: 'italic' }}> | ||||
|                         (Presidencia) | ||||
|                       </span> | ||||
|                     )} | ||||
|                 </td> | ||||
|                 <td> | ||||
|                   <select | ||||
|                     value={bancada.agrupacionPoliticaId || ''} | ||||
| @@ -97,6 +103,7 @@ export const BancasManager = () => { | ||||
|                 <td>{bancada.ocupante?.nombreOcupante || 'Sin asignar'}</td> | ||||
|                 <td> | ||||
|                   <button | ||||
|                     // El botón se habilita solo si hay un partido asignado a la banca | ||||
|                     disabled={!bancada.agrupacionPoliticaId} | ||||
|                     onClick={() => handleOpenModal(bancada)} | ||||
|                   > | ||||
|   | ||||
| @@ -15,10 +15,8 @@ export const DashboardPage = () => { | ||||
|                 <h1>Panel de Administración Electoral</h1> | ||||
|                 <button onClick={logout}>Cerrar Sesión</button> | ||||
|             </header> | ||||
|             <main style={{ marginTop: '2rem' }}> | ||||
|                 <ConfiguracionGeneral />                 | ||||
|             <main style={{ marginTop: '2rem' }}>    | ||||
|                 <AgrupacionesManager /> | ||||
|                  | ||||
|                 <div style={{ display: 'flex', gap: '2rem', flexWrap: 'wrap', marginTop: '2rem' }}> | ||||
|                     <div style={{ flex: '1 1 400px' }}> | ||||
|                         <OrdenDiputadosManager /> | ||||
| @@ -27,6 +25,7 @@ export const DashboardPage = () => { | ||||
|                         <OrdenSenadoresManager /> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <ConfiguracionGeneral />  | ||||
|                 <BancasManager /> | ||||
|             </main> | ||||
|         </div> | ||||
|   | ||||
| @@ -36,6 +36,7 @@ export interface OcupanteBanca { | ||||
| export interface Bancada { | ||||
|   id: number; | ||||
|   camara: TipoCamaraValue; | ||||
|   numeroBanca: number; | ||||
|   agrupacionPoliticaId: string | null; | ||||
|   agrupacionPolitica: AgrupacionPolitica | null; | ||||
|   ocupante: OcupanteBanca | null; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user