am updateing course

This commit is contained in:
2024-08-28 09:20:13 -06:00
parent 5b3f8a8515
commit 1051c4fb6e
5 changed files with 127 additions and 17 deletions

View File

@@ -1,7 +1,13 @@
"use client";
import { ReactNode, useState } from "react";
import { CourseContext, DraggableItem } from "./courseContext";
import { useLocalCourseDetailsQuery } from "@/hooks/localCoursesHooks";
import {
useLocalCourseDetailsQuery,
useUpdateCourseMutation,
} from "@/hooks/localCoursesHooks";
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
import { LocalCourse } from "@/models/local/localCourse";
import { dateToMarkdownString } from "@/models/local/timeUtils";
export default function CourseContextProvider({
localCourseName,
@@ -11,15 +17,59 @@ export default function CourseContextProvider({
localCourseName: string;
}) {
const { data: course } = useLocalCourseDetailsQuery(localCourseName);
const updateCourseMutation = useUpdateCourseMutation(course.settings.name);
const [itemBeingDragged, setItemBeingDragged] = useState<
DraggableItem | undefined
>();
return (
<CourseContext.Provider
value={{
localCourse: course,
startModuleDrag: (d) => setItemBeingDragged(d),
stopModuleDrag: (day) => setItemBeingDragged(undefined),
startItemDrag: (d) => {
console.log("starting drag");
setItemBeingDragged(d);
},
endItemDrag: () => {
console.log("stopping drag");
setItemBeingDragged(undefined);
},
itemDrop: (day) => {
console.log("dropping");
if (itemBeingDragged && day) {
if (itemBeingDragged.type === "quiz") {
const updatedQuiz: LocalQuiz = {
...(itemBeingDragged.item as LocalQuiz),
dueAt: dateToMarkdownString(day),
};
const localModule = course.modules.find((m) =>
m.quizzes.map((q) => q.name).includes(updatedQuiz.name)
);
if (!localModule)
console.log("could not find module for quiz ", updatedQuiz);
const updatedCourse: LocalCourse = {
...course,
modules: course.modules.map((m) =>
m.name !== localModule?.name
? m
: {
...m,
quizzes: m.quizzes.map((q) =>
q.name === updatedQuiz.name ? updatedQuiz : q
),
}
),
};
updateCourseMutation.mutate({
updatedCourse,
previousCourse: course,
});
}
}
setItemBeingDragged(undefined);
},
}}
>
{children}

View File

@@ -10,8 +10,9 @@ export interface DraggableItem {
export interface CourseContextInterface {
localCourse: LocalCourse;
startModuleDrag: (dragging: DraggableItem) => void;
stopModuleDrag: (droppedOnDay?: Date) => void;
startItemDrag: (dragging: DraggableItem) => void;
endItemDrag: () => void;
itemDrop: (droppedOnDay?: Date) => void;
}
const defaultValue: CourseContextInterface = {
@@ -29,10 +30,9 @@ const defaultValue: CourseContextInterface = {
},
},
},
startModuleDrag: () => { },
stopModuleDrag: function (droppedOnDay?: Date): void {
throw new Error("Function not implemented.");
}
startItemDrag: () => {},
endItemDrag: () => {},
itemDrop: () => {},
};
export const CourseContext =