import { useEffect, useState } from "preact/hooks"; export default function ConsultMobility() { const [mobilityData, setMobilityData] = useState([]); const [promotions, setPromotions] = useState([]); const [selectedPromotion, setSelectedPromotion] = useState("all"); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { try { console.log("ConsultMobility: Fetching data from API..."); const response = await fetch("/mobility/api/insert-mobility"); if (!response.ok) { throw new Error(`Error fetching data: ${response.statusText}`); } const result = await response.json(); console.log("ConsultMobility: Data fetched successfully:", result); setPromotions(result.promotions); const mergedData = result.students.map((student: any) => { const existingMobility = result.mobilities.find( (mobility: any) => mobility.studentId === student.id ); return { id: existingMobility ? existingMobility.id : null, studentId: student.id, firstName: student.firstName, lastName: student.lastName, startDate: existingMobility?.startDate || null, endDate: existingMobility?.endDate || null, weeksCount: existingMobility?.weeksCount || null, destinationCountry: existingMobility?.destinationCountry || null, destinationName: existingMobility?.destinationName || null, mobilityStatus: existingMobility?.mobilityStatus || "N/A", promotionId: student.promotionId, promotionName: student.promotionName, }; }); setMobilityData(mergedData); } catch (err) { console.error("ConsultMobility: Error fetching data:", err); setError("Failed to load data. Please try again later."); } }; fetchData(); }, []); const filteredData = selectedPromotion === "all" ? mobilityData : mobilityData.filter((entry) => entry.promotionId === selectedPromotion); return (

Consult Mobility

{error &&

{error}

}
{promotions.map((promo) => (
{selectedPromotion === "all" || selectedPromotion === promo.id ? ( <>

Promotion: {promo.name}

{filteredData .filter((entry) => entry.promotionId === promo.id) .map((entry) => ( ))}
ID First Name Last Name Start Date End Date Weeks Count Destination Country Destination Name Status
{entry.studentId} {entry.firstName} {entry.lastName} {entry.startDate || "N/A"} {entry.endDate || "N/A"} {entry.weeksCount || "N/A"} {entry.destinationCountry || "N/A"} {entry.destinationName || "N/A"} {entry.mobilityStatus}
) : null}
))}
); }