From b5816155a4a0c3d8dfa17dc03799e6dba1f0c910 Mon Sep 17 00:00:00 2001 From: Nathan Lamy Date: Wed, 25 Feb 2026 00:42:08 +0100 Subject: [PATCH] feat: add upcoming colles --- app/components/home/index.tsx | 61 +++++++++++++++++++++++++++++------ app/lib/api.ts | 2 ++ 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/app/components/home/index.tsx b/app/components/home/index.tsx index a53b269..b6b7bce 100644 --- a/app/components/home/index.tsx +++ b/app/components/home/index.tsx @@ -67,12 +67,19 @@ export default function Home({ user }: { user: User }) { isLoading, } = useColles(startDate); + // Fetch upcoming colles from API + const { + classColles: upcomingClassColles, + error: upcomingError, + isLoading: upcomingIsLoading, + } = useColles(DateTime.now()); + // Error handling (after all hooks) - if (error) + if (error || upcomingError) return ( @@ -98,6 +105,14 @@ export default function Home({ user }: { user: User }) { updateQuery("examiner", examiner); setExaminerFilter(examiner == "all" ? "" : examiner); }; + const rawStudent = query.get("student"); + const [studentFilter, setStudentFilter] = useState( + rawStudent === "all" ? "" : rawStudent || "" + ); + const setStudent = (student: string) => { + updateQuery("student", student); + setStudentFilter(student == "all" ? "" : student); + }; const [sorted, setSort] = useState(query.get("sort") || "desc"); const toggleSort = () => { const newSort = sorted === "asc" ? "desc" : "asc"; @@ -106,21 +121,29 @@ export default function Home({ user }: { user: User }) { }; const generateFilter = (arr: string[], value: string) => { - const unique = [...new Set(arr)]; + const unique = [...new Set(arr.filter(Boolean))]; if (value && !unique.includes(value)) { unique.push(value); } unique.sort((a, b) => a.localeCompare(b)); return unique; }; + + const currentClassColles = + activeTab === "upcoming" ? upcomingClassColles : classColles; + const subjects = generateFilter( - classColles.map((colle) => colle.subject?.name), + currentClassColles.map((colle) => colle.subject?.name), subjectFilter ); const examiners = generateFilter( - classColles.map((colle) => colle.examiner?.name), + currentClassColles.map((colle) => colle.examiner?.name), examinerFilter ); + const students = generateFilter( + upcomingClassColles.map((colle) => colle.student?.fullName), + studentFilter + ); const applyFilters = (colles: any[]) => { return colles @@ -133,7 +156,11 @@ export default function Home({ user }: { user: User }) { examinerFilter === "all" || !examinerFilter ? true : colle.examiner?.name === examinerFilter; - return subjectMatch && examinerMatch; + const studentMatch = + activeTab !== "upcoming" || studentFilter === "all" || !studentFilter + ? true + : colle.student?.fullName === studentFilter; + return subjectMatch && examinerMatch && studentMatch; }) .sort((a, b) => { if (sorted === "asc") { @@ -218,6 +245,22 @@ export default function Home({ user }: { user: User }) { + {activeTab === "upcoming" && ( + + )} +