diff --git a/routes/(apps)/mobility/(_islands)/ConsultMobility.tsx b/routes/(apps)/mobility/(_islands)/ConsultMobility.tsx index e69de29..0f78e87 100644 --- a/routes/(apps)/mobility/(_islands)/ConsultMobility.tsx +++ b/routes/(apps)/mobility/(_islands)/ConsultMobility.tsx @@ -0,0 +1,87 @@ +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 () => { + try { + const response = await fetch("/mobility/api/insert_mobility"); + if (!response.ok) { + throw new Error(`Error fetching data: ${response.statusText}`); + } + + const result = await response.json(); + setData(result); + } catch (err) { + console.error("Error fetching mobility data:", err); + setError("Failed to load mobility data. Please try again later."); + } + }; + + fetchData(); + }, []); + + return ( +
+

Consult Mobility

+ {error &&

{error}

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

Promotion: {promo.id}

+ + + + + + + + + + + + + + + + {data.mobilities + .filter((mobility) => mobility.studentId.startsWith(String(promo.id))) + .map((mobility) => ( + + + + + + + + + + + + ))} + +
IDFirst NameLast NameStart DateEnd DateWeeks CountDestination CountryDestination NameStatus
{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}
+
+ ))} +
+ ); +} diff --git a/routes/(apps)/mobility/partials/overview.tsx b/routes/(apps)/mobility/partials/overview.tsx index a73c859..1ed1b2d 100644 --- a/routes/(apps)/mobility/partials/overview.tsx +++ b/routes/(apps)/mobility/partials/overview.tsx @@ -1,17 +1,16 @@ -import { Partial } from "$fresh/runtime.ts"; -import { RouteConfig } from "$fresh/server.ts"; +import ConsultMobility from "$root/routes/(apps)/mobility/(_islands)/ConsultMobility.tsx"; +import { getPartialsConfig, makePartials } from "$root/defaults/makePartials.tsx"; +import { FreshContext } from "$fresh/server.ts"; +import { State } from "$root/routes/_middleware.ts"; -type ModulesProps = Record; - -export const config: RouteConfig = { - skipAppWrapper: true, - skipInheritedLayouts: true, -}; - -export default function Modules(_props: ModulesProps) { +async function Mobility(_request: Request, _context: FreshContext) { return ( - - mobility - + <> +

Edit mobility

+ + ); } + +export const config = getPartialsConfig(); +export default makePartials(Mobility); \ No newline at end of file