diff --git a/nextjs/src/app/api/courses/[courseName]/settings/route.ts b/nextjs/src/app/api/courses/[courseName]/settings/route.ts index a153ddb..f581164 100644 --- a/nextjs/src/app/api/courses/[courseName]/settings/route.ts +++ b/nextjs/src/app/api/courses/[courseName]/settings/route.ts @@ -12,6 +12,7 @@ export const GET = async ( const settings = await fileStorageService.getCourseSettings(courseName); return Response.json(settings); }); + export const PUT = async ( request: Request, { params: { courseName } }: { params: { courseName: string } } diff --git a/nextjs/src/app/course/[courseName]/settings/DaysOfWeekSelector.tsx b/nextjs/src/app/course/[courseName]/settings/DaysOfWeekSelector.tsx new file mode 100644 index 0000000..4ede6b1 --- /dev/null +++ b/nextjs/src/app/course/[courseName]/settings/DaysOfWeekSelector.tsx @@ -0,0 +1,44 @@ +"use client"; +import { Spinner } from "@/components/Spinner"; +import { + useLocalCourseSettingsQuery, + useUpdateLocalCourseSettingsMutation, +} from "@/hooks/localCourse/localCoursesHooks"; +import { DayOfWeek } from "@/models/local/localCourse"; +import React from "react"; + +export default function DaysOfWeekSelector() { + const { data: settings } = useLocalCourseSettingsQuery(); + const updateSettings = useUpdateLocalCourseSettingsMutation(); + + return ( + <> +
+ {Object.values(DayOfWeek).map((day) => { + const hasDay = settings.daysOfWeek.includes(day); + return ( + + ); + })} +
+ {updateSettings.isPending && } + + ); +} diff --git a/nextjs/src/app/course/[courseName]/settings/page.tsx b/nextjs/src/app/course/[courseName]/settings/page.tsx index db73499..3ca0371 100644 --- a/nextjs/src/app/course/[courseName]/settings/page.tsx +++ b/nextjs/src/app/course/[courseName]/settings/page.tsx @@ -3,11 +3,13 @@ import { useCourseContext } from "../context/courseContext"; import StartAndEndDate from "./StartAndEndDate"; import SettingsHeader from "./SettingsHeader"; import DefaultDueTime from "./DefaultDueTime"; +import DaysOfWeekSelector from "./DaysOfWeekSelector"; export default function page() { return (
+
diff --git a/nextjs/src/hooks/localCourse/localCoursesHooks.ts b/nextjs/src/hooks/localCourse/localCoursesHooks.ts index 87e7049..dc883e2 100644 --- a/nextjs/src/hooks/localCourse/localCoursesHooks.ts +++ b/nextjs/src/hooks/localCourse/localCoursesHooks.ts @@ -57,6 +57,10 @@ export const useUpdateLocalCourseSettingsMutation = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: async (updatedSettings: LocalCourseSettings) => { + queryClient.setQueryData( + localCourseKeys.settings(courseName), + updatedSettings + ); const url = `/api/courses/${courseName}/settings`; await axiosClient.put(url, updatedSettings); }, diff --git a/nextjs/src/services/fileStorage/fileStorageService.ts b/nextjs/src/services/fileStorage/fileStorageService.ts index 9ad5f7e..6680cdb 100644 --- a/nextjs/src/services/fileStorage/fileStorageService.ts +++ b/nextjs/src/services/fileStorage/fileStorageService.ts @@ -1,7 +1,6 @@ import { promises as fs } from "fs"; import path from "path"; import { - LocalCourse, LocalCourseSettings, localCourseYamlUtils, } from "@/models/local/localCourse"; @@ -28,18 +27,6 @@ const basePath = process.env.STORAGE_DIRECTORY ?? "./storage"; console.log("base path", basePath); export const fileStorageService = { - // async saveCourseAsync( - // course: LocalCourse, - // previouslyStoredCourse?: LocalCourse - // ) { - // await courseMarkdownSaver.save(course, previouslyStoredCourse); - // }, - - // async loadSavedCourses(): Promise { - // console.log("loading pages from file system"); - // return (await courseMarkdownLoader.loadSavedCourses()) || []; - // }, - async getCourseNames() { console.log("loading course ids"); const courseDirectories = await fs.readdir(basePath, {