import { useEffect, useState } from "preact/hooks"; interface MobilityData { 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 EditMobility() { const [mobilityData, setMobilityData] = useState([]); const [isSaving, setIsSaving] = useState(false); useEffect(() => { const fetchMobilityData = async () => { console.log("EditMobility: Fetching mobility data..."); try { const response = await fetch("/mobility/api/insert_mobility"); console.log("EditMobility: API response status:", response.status); if (!response.ok) { throw new Error(`Error fetching data: ${response.statusText}`); } const data = await response.json(); console.log("EditMobility: Data fetched successfully:", data); setMobilityData(data.mobilities || []); } catch (err) { console.error("EditMobility: Error fetching data:", err); } }; fetchMobilityData(); }, []); const handleSave = async () => { console.log("EditMobility: Saving data..."); setIsSaving(true); try { const response = await fetch("/mobility/api/insert_mobility", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ data: mobilityData }), }); console.log("EditMobility: Save response status:", response.status); if (response.ok) { console.log("EditMobility: Data saved successfully."); alert("Data saved successfully!"); } else { throw new Error(`Failed to save data: ${response.statusText}`); } } catch (error) { console.error("EditMobility: Error saving data:", error); alert("An error occurred while saving data."); } finally { setIsSaving(false); } }; return (
{mobilityData.map((mobility) => ( ))}
First Name Last Name Start Date End Date Weeks Count Destination Country Destination Name Status
{mobility.firstName} {mobility.lastName} setMobilityData((prev) => prev.map((entry) => entry.id === mobility.id ? { ...entry, startDate: e.target.value } : entry ) ) } /> setMobilityData((prev) => prev.map((entry) => entry.id === mobility.id ? { ...entry, endDate: e.target.value } : entry ) ) } /> setMobilityData((prev) => prev.map((entry) => entry.id === mobility.id ? { ...entry, weeksCount: Number(e.target.value) || null } : entry ) ) } /> setMobilityData((prev) => prev.map((entry) => entry.id === mobility.id ? { ...entry, destinationCountry: e.target.value } : entry ) ) } /> setMobilityData((prev) => prev.map((entry) => entry.id === mobility.id ? { ...entry, destinationName: e.target.value } : entry ) ) } />
); }