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(() => { async function fetchMobilityData() { const response = await fetch("/mobility/api/insert_mobility"); const data = await response.json(); setMobilityData(data.mobilities || []); } fetchMobilityData(); }, []); const handleChange = ( id: number, field: keyof MobilityData, value: string | number | null, ) => { setMobilityData((prev) => prev.map((entry) => entry.id === id ? { ...entry, [field]: value } : entry, ) ); }; const handleSave = async () => { setIsSaving(true); try { 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!"); } else { alert("Failed to save data."); } } catch (error) { console.error("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} handleChange(mobility.id, "startDate", e.target.value) } /> handleChange(mobility.id, "endDate", e.target.value) } /> handleChange( mobility.id, "weeksCount", Number(e.target.value) || null, ) } /> handleChange(mobility.id, "destinationCountry", e.target.value) } /> handleChange(mobility.id, "destinationName", e.target.value) } />
); }