import { useEffect, useState } from "preact/hooks"; export default function EditMobility() { const [mobilityData, setMobilityData] = useState([]); const [promotions, setPromotions] = useState([]); const [selectedPromotion, setSelectedPromotion] = useState("all"); const [isSaving, setIsSaving] = useState(false); useEffect(() => { async function fetchMobilityData() { console.log("EditMobility: Fetching data from API..."); const response = await fetch("/mobility/api/insert-mobility"); const data = await response.json(); console.log("EditMobility: Data fetched successfully:", data); setPromotions(data.promotions); const initializedData = data.students.map((student: any) => { const existingMobility = data.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(initializedData); } fetchMobilityData(); }, []); const handleChange = ( studentId: string, field: keyof MobilityData, value: string | number | null ) => { setMobilityData((prev) => prev.map((entry) => entry.studentId === studentId ? { ...entry, [field]: value } : entry ) ); }; const handleSave = async () => { setIsSaving(true); try { console.log("EditMobility: Sending data to API..."); const response = await fetch("/mobility/api/insert-mobility", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ data: mobilityData }), }); if (response.ok) { alert("Data saved successfully!"); console.log("EditMobility: Save response status:", response.status); } else { alert("Failed to save data."); console.error("EditMobility: Save response status:", response.status); } } catch (error) { console.error("EditMobility: Error saving data:", error); alert("An error occurred while saving data."); } finally { setIsSaving(false); } }; const filteredData = selectedPromotion === "all" ? mobilityData : mobilityData.filter((entry) => entry.promotionId === selectedPromotion); const groupedData = promotions.map((promo) => ({ promotion: promo.name, students: filteredData.filter((entry) => entry.promotionId === promo.id), })); return (

Edit Mobility

{groupedData.map((group) => (
{group.students.length > 0 && ( <>

Promotion: {group.promotion}

{group.students.map((entry) => ( ))}
ID First Name Last Name Start Date End Date Weeks Count Destination Country Destination Name Status
{entry.studentId} {entry.firstName} {entry.lastName} handleChange(entry.studentId, "startDate", e.target.value) } /> handleChange(entry.studentId, "endDate", e.target.value) } /> {entry.weeksCount || "N/A"} handleChange( entry.studentId, "destinationCountry", e.target.value ) } /> handleChange(entry.studentId, "destinationName", e.target.value) } />
)}
))}
); }