From 213c7c347e062e03aecea725cabf85c8ad974b1c Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Tue, 10 Dec 2024 11:46:35 -0700 Subject: [PATCH] group by semester --- nextjs/src/app/CourseList.tsx | 60 +++++++++++++++---- .../app/course/[courseName]/CourseTitle.tsx | 2 +- nextjs/src/app/layout.tsx | 2 +- 3 files changed, 52 insertions(+), 12 deletions(-) diff --git a/nextjs/src/app/CourseList.tsx b/nextjs/src/app/CourseList.tsx index 99137e0..b09af4e 100644 --- a/nextjs/src/app/CourseList.tsx +++ b/nextjs/src/app/CourseList.tsx @@ -1,26 +1,66 @@ "use client"; import { useLocalCoursesSettingsQuery } from "@/hooks/localCourse/localCoursesHooks"; +import { LocalCourseSettings } from "@/models/local/localCourseSettings"; import { getCourseUrl } from "@/services/urlUtils"; import Link from "next/link"; +function getDateKey(dateString: string) { + return dateString.split("T")[0]; +} +function groupByStartDate(courses: LocalCourseSettings[]): { + [key: string]: LocalCourseSettings[]; +} { + return courses.reduce( + (acc, course) => { + const { startDate } = course; + const key = getDateKey(startDate); + if (!acc[key]) { + acc[key] = []; + } + acc[key].push(course); + return acc; + }, + {} as { + [key: string]: LocalCourseSettings[]; + } + ); +} + +function getTermName(startDate: string) { + const [year, month, ...rest] = startDate.split("-"); + if (month < "04") return "Spring " + year; + if (month < "07") return "Summer " + year; + return "Fall " + year; +} + export default function CourseList() { const [allSettings] = useLocalCoursesSettingsQuery(); + const coursesByStartDate = groupByStartDate(allSettings); + return ( -
- {allSettings.map((settings) => ( -
- + {Object.keys(coursesByStartDate).map((startDate) => ( +
+
{getTermName(startDate)}
+ {coursesByStartDate[getDateKey(startDate)].map((settings) => ( +
+ - {settings.name} - + > + {settings.name} + +
+ ))}
))}
diff --git a/nextjs/src/app/course/[courseName]/CourseTitle.tsx b/nextjs/src/app/course/[courseName]/CourseTitle.tsx index 6770d39..e6e17f8 100644 --- a/nextjs/src/app/course/[courseName]/CourseTitle.tsx +++ b/nextjs/src/app/course/[courseName]/CourseTitle.tsx @@ -5,6 +5,6 @@ import { useCourseContext } from "./context/courseContext" export default function CourseTitle() { const {courseName}= useCourseContext() return ( - {courseName} + {process.env.NEXT_PUBLIC_TITLE_PREFIX}{courseName} ) } diff --git a/nextjs/src/app/layout.tsx b/nextjs/src/app/layout.tsx index 36d01d5..1c932e7 100644 --- a/nextjs/src/app/layout.tsx +++ b/nextjs/src/app/layout.tsx @@ -13,7 +13,7 @@ import { ClientCacheInvalidation } from "../components/realtime/ClientCacheInval export const dynamic = "force-dynamic"; export const metadata: Metadata = { - title: "Canvas Manager 2.0", + title: process.env.NEXT_PUBLIC_TITLE_PREFIX + "Canvas Manager 2.0", }; export default async function RootLayout({