diff --git a/routes/(apps)/mobility/(_islands)/SaveStudents.tsx b/routes/(apps)/mobility/(_islands)/SaveStudents.tsx new file mode 100644 index 0000000..01d1cc3 --- /dev/null +++ b/routes/(apps)/mobility/(_islands)/SaveStudents.tsx @@ -0,0 +1,82 @@ +import { useSignal } from "@preact/signals"; +import Papa from "https://cdn.skypack.dev/papaparse"; + +type Student = { + firstName: string; + lastName: string; + email: string; +}; + +type Promotion = { + name: string; + students: Student[]; +}; + +export default function SaveStudents() { + const promotions = useSignal([]); + const statusMessage = useSignal(""); + + const loadCSV = async () => { + try { + const response = await fetch("/api/students"); // Assurez-vous que l'API est appelée correctement + if (!response.ok) { + throw new Error("Failed to load CSV file"); + } + const csvText = await response.text(); // Lire le contenu en texte + + const parsedData = Papa.parse(csvText, { + header: true, + skipEmptyLines: true, + }); + + const groupedPromotions: Record = {}; + parsedData.data.forEach((row: any) => { + const { promotion, firstName, lastName, email } = row; + if (!groupedPromotions[promotion]) { + groupedPromotions[promotion] = []; + } + groupedPromotions[promotion].push({ firstName, lastName, email }); + }); + + const loadedPromotions = Object.entries(groupedPromotions).map( + ([name, students]) => ({ + name, + students, + }) + ); + + promotions.value = loadedPromotions; + statusMessage.value = "Data loaded successfully!"; + } catch (error) { + console.error("Error loading CSV file:", error); + statusMessage.value = "Failed to load data. Please try again."; + } + }; + + + + // Charger les données CSV dès le chargement du composant + loadCSV(); + + return ( +
+

Loaded Promotions

+ +

{statusMessage.value}

+
    + {promotions.value.map((promotion) => ( +
  • + {promotion.name} +
      + {promotion.students.map((student, index) => ( +
    • + {student.firstName} {student.lastName} - {student.email} +
    • + ))} +
    +
  • + ))} +
+
+ ); +} diff --git a/routes/(apps)/mobility/partials/students.tsx b/routes/(apps)/mobility/partials/students.tsx index bef23ec..964b91c 100644 --- a/routes/(apps)/mobility/partials/students.tsx +++ b/routes/(apps)/mobility/partials/students.tsx @@ -1,3 +1,4 @@ + import { RouteConfig } from "$fresh/server.ts"; import UploadStudents from "../(_islands)/UploadStudents.tsx"; //import ConsultStudents from "../(_islands)/ConsultStudents.tsx"; @@ -6,6 +7,7 @@ import UploadStudents from "../(_islands)/UploadStudents.tsx"; export const config: RouteConfig = { skipAppWrapper: false, skipInheritedLayouts: false, + }; export default function Students() {