// src/components/OrdenDiputadosManager.tsx import { useState, useEffect } from 'react'; import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors, type DragEndEvent, } from '@dnd-kit/core'; import { arrayMove, SortableContext, sortableKeyboardCoordinates, horizontalListSortingStrategy, } from '@dnd-kit/sortable'; import { getAgrupaciones } from '../services/apiService'; import type { AgrupacionPolitica } from '../types'; import { SortableItem } from './SortableItem'; import './AgrupacionesManager.css'; // Reutilizamos los estilos // Función para llamar al endpoint específico de diputados const updateOrdenDiputadosApi = async (ids: string[]) => { const token = localStorage.getItem('admin-jwt-token'); const response = await fetch('http://localhost:5217/api/admin/agrupaciones/orden-diputados', { method: 'PUT', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(ids) }); if (!response.ok) { throw new Error("Failed to save Diputados order"); } }; export const OrdenDiputadosManager = () => { const [agrupaciones, setAgrupaciones] = useState([]); const [loading, setLoading] = useState(true); const sensors = useSensors( useSensor(PointerSensor), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }) ); useEffect(() => { const fetchAndSortAgrupaciones = async () => { setLoading(true); try { const data = await getAgrupaciones(); // Ordenar por el orden de Diputados. Los nulos van al final. data.sort((a, b) => (a.ordenDiputados || 999) - (b.ordenDiputados || 999)); setAgrupaciones(data); } catch (error) { console.error("Failed to fetch agrupaciones for Diputados:", error); } finally { setLoading(false); } }; fetchAndSortAgrupaciones(); }, []); const handleDragEnd = (event: DragEndEvent) => { const { active, over } = event; if (over && active.id !== over.id) { setAgrupaciones((items) => { const oldIndex = items.findIndex((item) => item.id === active.id); const newIndex = items.findIndex((item) => item.id === over.id); return arrayMove(items, oldIndex, newIndex); }); } }; const handleSaveOrder = async () => { const idsOrdenados = agrupaciones.map(a => a.id); try { await updateOrdenDiputadosApi(idsOrdenados); alert('Orden de Diputados guardado con éxito!'); } catch (error) { alert('Error al guardar el orden de Diputados.'); } }; if (loading) return

Cargando orden de Diputados...

; return (

Ordenar Agrupaciones (Diputados)

Arrastre para reordenar.

Ancla izquierda. Prioridad de izquierda a derecha y de arriba abajo.

a.id)} strategy={horizontalListSortingStrategy} >
    {agrupaciones.map(agrupacion => ( {`(${agrupacion.id}) ${agrupacion.nombreCorto || agrupacion.nombre}`} ))}
); };