import { useEffect, useState } from "preact/hooks"; interface Promotion { id: number; name: string; } interface Mobility { id: number; studentId: string; firstName: string; lastName: string; startDate: string | null; endDate: string | null; weeksCount: number | null; destinationCountry: string | null; destinationName: string | null; mobilityStatus: string; } export default function ConsultMobility() { const [data, setData] = useState<{ promotions: Promotion[]; mobilities: Mobility[] } | null>(null); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { console.log("ConsultMobility: Fetching data from API..."); try { const response = await fetch("/mobility/api/insert_mobility"); console.log("ConsultMobility: API response status:", response.status); if (!response.ok) { throw new Error(`Error fetching data: ${response.statusText}`); } const result = await response.json(); console.log("ConsultMobility: Data fetched successfully:", result); setData(result); } catch (err) { console.error("ConsultMobility: Error fetching data:", err); setError("Failed to load mobility data. Please try again later."); } }; fetchData(); }, []); return (

Consult Mobility

{error &&

{error}

} {data?.promotions.map((promo) => (

Promotion: {promo.name}

{data.mobilities .filter((mobility) => mobility.studentId.startsWith(String(promo.id))) .map((mobility) => ( ))}
ID First Name Last Name Start Date End Date Weeks Count Destination Country Destination Name Status
{mobility.id} {mobility.firstName} {mobility.lastName} {mobility.startDate || "N/A"} {mobility.endDate || "N/A"} {mobility.weeksCount ?? "N/A"} {mobility.destinationCountry || "N/A"} {mobility.destinationName || "N/A"} {mobility.mobilityStatus}
))}
); }