mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
updates
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
"use client"
|
"use client";
|
||||||
import { useLocalCoursesQuery } from "@/hooks/localCoursesHooks";
|
import { useLocalCourseNamesQuery } from "@/hooks/localCoursesHooks";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
export default function CourseList() {
|
export default function CourseList() {
|
||||||
const { data: courses } = useLocalCoursesQuery();
|
const { data: courses } = useLocalCourseNamesQuery();
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{courses.map((c) => (
|
{courses.map((c) => (
|
||||||
|
|||||||
@@ -12,3 +12,12 @@ export async function PUT(
|
|||||||
await fileStorageService.saveCourseAsync(updatedCourse, previousCourse);
|
await fileStorageService.saveCourseAsync(updatedCourse, previousCourse);
|
||||||
return Response.json({});
|
return Response.json({});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function GET(
|
||||||
|
request: Request,
|
||||||
|
{ params: { courseName } }: { params: { courseName: string } }
|
||||||
|
) {
|
||||||
|
const courses = await fileStorageService.loadSavedCourses();
|
||||||
|
const course = courses.find((c) => c.settings.name === courseName);
|
||||||
|
return Response.json(course);
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
||||||
|
|
||||||
export async function GET() {
|
export async function GET() {
|
||||||
return Response.json([]);
|
const courses = await fileStorageService.loadSavedCourses();
|
||||||
|
return Response.json(courses);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,50 +22,53 @@ export default function CourseContextProvider({
|
|||||||
DraggableItem | undefined
|
DraggableItem | undefined
|
||||||
>();
|
>();
|
||||||
|
|
||||||
|
const updateQuiz = (day: Date) => {
|
||||||
|
if (!itemBeingDragged) return;
|
||||||
|
|
||||||
|
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,
|
||||||
|
});
|
||||||
|
};
|
||||||
return (
|
return (
|
||||||
<CourseContext.Provider
|
<CourseContext.Provider
|
||||||
value={{
|
value={{
|
||||||
localCourse: course,
|
localCourse: course,
|
||||||
startItemDrag: (d) => {
|
startItemDrag: (d) => {
|
||||||
console.log("starting drag");
|
|
||||||
setItemBeingDragged(d);
|
setItemBeingDragged(d);
|
||||||
},
|
},
|
||||||
endItemDrag: () => {
|
endItemDrag: () => {
|
||||||
console.log("stopping drag");
|
|
||||||
setItemBeingDragged(undefined);
|
setItemBeingDragged(undefined);
|
||||||
},
|
},
|
||||||
itemDrop: (day) => {
|
itemDrop: (day) => {
|
||||||
console.log("dropping");
|
console.log("dropping");
|
||||||
if (itemBeingDragged && day) {
|
if (itemBeingDragged && day) {
|
||||||
if (itemBeingDragged.type === "quiz") {
|
if (itemBeingDragged.type === "quiz") {
|
||||||
const updatedQuiz: LocalQuiz = {
|
updateQuiz(day);
|
||||||
...(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);
|
setItemBeingDragged(undefined);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { LocalCourse } from "@/models/local/localCourse";
|
import { LocalCourse } from "@/models/local/localCourse";
|
||||||
import {
|
import {
|
||||||
dataTagSymbol,
|
|
||||||
useMutation,
|
useMutation,
|
||||||
useQueryClient,
|
useQueryClient,
|
||||||
useSuspenseQuery,
|
useSuspenseQuery,
|
||||||
@@ -9,10 +8,10 @@ import axios from "axios";
|
|||||||
|
|
||||||
export const localCourseKeys = {
|
export const localCourseKeys = {
|
||||||
allCourses: ["all courses"] as const,
|
allCourses: ["all courses"] as const,
|
||||||
courseDetail: (courseName: string) => ["all courses", courseName] as const,
|
courseDetail: (courseName: string) => ["course details", courseName] as const,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useLocalCoursesQuery = () =>
|
export const useLocalCourseNamesQuery = () =>
|
||||||
useSuspenseQuery({
|
useSuspenseQuery({
|
||||||
queryKey: localCourseKeys.allCourses,
|
queryKey: localCourseKeys.allCourses,
|
||||||
queryFn: async (): Promise<LocalCourse[]> => {
|
queryFn: async (): Promise<LocalCourse[]> => {
|
||||||
@@ -20,20 +19,16 @@ export const useLocalCoursesQuery = () =>
|
|||||||
const response = await axios.get(url);
|
const response = await axios.get(url);
|
||||||
return response.data;
|
return response.data;
|
||||||
},
|
},
|
||||||
|
select: (courses) => courses.map((c) => c.settings.name),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const useLocalCourseDetailsQuery = (courseName: string) => {
|
export const useLocalCourseDetailsQuery = (courseName: string) => {
|
||||||
const { data: courses } = useLocalCoursesQuery();
|
|
||||||
return useSuspenseQuery({
|
return useSuspenseQuery({
|
||||||
queryKey: localCourseKeys.courseDetail(courseName),
|
queryKey: localCourseKeys.courseDetail(courseName),
|
||||||
queryFn: () => {
|
queryFn: async (): Promise<LocalCourse> => {
|
||||||
const course = courses.find((c) => c.settings.name === courseName);
|
const url = `/api/courses/${courseName}`;
|
||||||
if (!course) {
|
const response = await axios.get(url);
|
||||||
console.log(courses);
|
return response.data;
|
||||||
console.log(courseName);
|
|
||||||
throw Error(`Could not find course with name ${courseName}`);
|
|
||||||
}
|
|
||||||
return course;
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -49,10 +44,12 @@ export const useUpdateCourseMutation = (courseName: string) => {
|
|||||||
await axios.put(url, body);
|
await axios.put(url, body);
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({ queryKey: localCourseKeys.allCourses }); //optimize?
|
queryClient.invalidateQueries({
|
||||||
|
queryKey: localCourseKeys.courseDetail(courseName),
|
||||||
|
});
|
||||||
},
|
},
|
||||||
scope: {
|
scope: {
|
||||||
id: "update course",
|
id: "all courses",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user