- {parsedHolidays[k].map((day) => {
+ {holiday.days.map((day) => {
const date = getDateFromString(day);
return (
diff --git a/nextjs/src/app/layout.tsx b/nextjs/src/app/layout.tsx
index 31e11c9..af35e14 100644
--- a/nextjs/src/app/layout.tsx
+++ b/nextjs/src/app/layout.tsx
@@ -7,6 +7,7 @@ import { hydrateCourses } from "@/hooks/hookHydration";
import { dehydrate, HydrationBoundary } from "@tanstack/react-query";
import { MyToaster } from "./MyToaster";
import { cookies } from "next/headers";
+export const dynamic = 'force-dynamic'
export const metadata: Metadata = {
title: "Canvas Manager 2.0",
diff --git a/nextjs/src/hooks/localCourse/localCoursesHooks.ts b/nextjs/src/hooks/localCourse/localCoursesHooks.ts
index a1e9b5a..eefa4b0 100644
--- a/nextjs/src/hooks/localCourse/localCoursesHooks.ts
+++ b/nextjs/src/hooks/localCourse/localCoursesHooks.ts
@@ -23,10 +23,11 @@ export const useLocalCoursesSettingsQuery = () =>
export const useLocalCourseSettingsQuery = () => {
const { courseName } = useCourseContext();
- const { data: settingsList } = useLocalCoursesSettingsQuery();
+ // const { data: settingsList } = useLocalCoursesSettingsQuery();
return useSuspenseQuery({
queryKey: localCourseKeys.settings(courseName),
- queryFn: () => {
+ queryFn: async () => {
+ const settingsList = await getAllCoursesSettingsFromServer();
const s = settingsList.find((s) => s.name === courseName);
if (!s) {
console.log(courseName, settingsList);
@@ -56,19 +57,22 @@ export const useUpdateLocalCourseSettingsMutation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (updatedSettings: LocalCourseSettings) => {
- queryClient.setQueryData(
- localCourseKeys.settings(courseName),
- updatedSettings
- );
- await updateCourseSettingsOnServer({ courseName, settings: updatedSettings });
- },
- onSuccess: () => {
- queryClient.invalidateQueries({
- queryKey: localCourseKeys.settings(courseName),
+ // queryClient.setQueryData(
+ // localCourseKeys.settings(courseName),
+ // updatedSettings
+ // );
+ await updateCourseSettingsOnServer({
+ courseName,
+ settings: updatedSettings,
});
- queryClient.invalidateQueries({
+ },
+ onSuccess: async () => {
+ await queryClient.invalidateQueries({
queryKey: localCourseKeys.allCoursesSettings,
});
+ await queryClient.invalidateQueries({
+ queryKey: localCourseKeys.settings(courseName),
+ });
},
});
};
diff --git a/nextjs/src/models/local/localCourse.ts b/nextjs/src/models/local/localCourse.ts
index 8cf1c27..3858e05 100644
--- a/nextjs/src/models/local/localCourse.ts
+++ b/nextjs/src/models/local/localCourse.ts
@@ -25,8 +25,9 @@ export interface LocalCourseSettings {
defaultAssignmentSubmissionTypes: AssignmentSubmissionType[];
defaultFileUploadTypes: string[];
holidays: {
- [key: string]: string[]; // e.g. "spring break": ["datestring", "datestring", "datestring", "datestring"]
- };
+ name: string;
+ days: string[];
+ }[];
}
export enum DayOfWeek {
@@ -46,7 +47,7 @@ export function getDayOfWeek(date: Date): DayOfWeek {
export const localCourseYamlUtils = {
parseSettingYaml: (settingsString: string): LocalCourseSettings => {
- const settings = parse(settingsString);
+ const settings = parse(settingsString, {});
return lowercaseFirstLetter(settings);
},
settingsToYaml: (settings: Omit) => {
diff --git a/nextjs/src/models/local/settingsUtils.tsx b/nextjs/src/models/local/settingsUtils.tsx
index 4f813ca..570e3bb 100644
--- a/nextjs/src/models/local/settingsUtils.tsx
+++ b/nextjs/src/models/local/settingsUtils.tsx
@@ -7,8 +7,14 @@ import {
export const parseHolidays = (
inputText: string
-): { [holidayName: string]: string[] } => {
- const holidays: { [holidayName: string]: string[] } = {};
+): {
+ name: string;
+ days: string[];
+}[] => {
+ let holidays: {
+ name: string;
+ days: string[];
+ }[] = [];
const lines = inputText.split("\n").filter((line) => line.trim() !== "");
let currentHoliday: string | null = null;
@@ -17,24 +23,30 @@ export const parseHolidays = (
if (line.includes(":")) {
const holidayName = line.split(":")[0].trim();
currentHoliday = holidayName;
- holidays[currentHoliday] = [];
+ holidays = [...holidays, { name: holidayName, days: [] }];
} else if (currentHoliday && line.startsWith("-")) {
const date = line.replace("-", "").trim();
const dateObject = getDateFromStringOrThrow(date, "parsing holiday text");
- holidays[currentHoliday].push(getDateOnlyMarkdownString(dateObject));
+
+ const holiday = holidays.find((h) => h.name == currentHoliday);
+ holiday?.days.push(getDateOnlyMarkdownString(dateObject));
}
});
return holidays;
};
+export const holidaysToString = (
+ holidays: {
+ name: string;
+ days: string[];
+ }[]
+) => {
+ const entries = holidays.map((holiday) => {
+ const title = holiday.name + ":\n";
+ const days = holiday.days.map((d) => `- ${d}\n`);
+ return title + days.join("");
+ });
-export const holidaysToString = (holidays: { [holidayName: string]: string[] })=> {
- const entries = Object.keys(holidays).map(holiday => {
- const title = holiday + ":\n"
- const days = holidays[holiday].map(d => `- ${d}\n`)
- return title + days.join("")
- })
-
- return entries.join("")
-}
\ No newline at end of file
+ return entries.join("");
+};
diff --git a/nextjs/src/services/fileStorage/settingsFileStorageService.ts b/nextjs/src/services/fileStorage/settingsFileStorageService.ts
index 521e695..a90895c 100644
--- a/nextjs/src/services/fileStorage/settingsFileStorageService.ts
+++ b/nextjs/src/services/fileStorage/settingsFileStorageService.ts
@@ -47,7 +47,7 @@ const populateDefaultValues = (settingsFromFile: LocalCourseSettings) => {
defaultSubmissionType,
defaultFileUploadTypes:
settingsFromFile.defaultFileUploadTypes || defaultFileUploadTypes,
- holidays: !!settingsFromFile.holidays ? settingsFromFile.holidays : {},
+ holidays: !!settingsFromFile.holidays ? settingsFromFile.holidays : [],
};
return settings;
};