import { useEffect, useState } from "preact/hooks"; interface Promotion { id: number; name: string; } interface Student { id: string; firstName: string; lastName: string; promotionId: number; } interface Mobility { id: number; studentId: 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[]; students?: Student[]; 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(); }, []); if (error) { return

{error}

; } if (!data?.promotions) { return

No promotions found.

; } return (

Consult Mobility

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

Promotion: {promo.name}

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