This commit is contained in:
2024-08-28 14:22:56 -06:00
parent 1051c4fb6e
commit 10afc745a9
5 changed files with 60 additions and 48 deletions

View File

@@ -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) => (

View File

@@ -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);
}

View File

@@ -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);
} }

View File

@@ -22,22 +22,9 @@ export default function CourseContextProvider({
DraggableItem | undefined DraggableItem | undefined
>(); >();
return ( const updateQuiz = (day: Date) => {
<CourseContext.Provider if (!itemBeingDragged) return;
value={{
localCourse: course,
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 = { const updatedQuiz: LocalQuiz = {
...(itemBeingDragged.item as LocalQuiz), ...(itemBeingDragged.item as LocalQuiz),
dueAt: dateToMarkdownString(day), dueAt: dateToMarkdownString(day),
@@ -66,6 +53,22 @@ export default function CourseContextProvider({
updatedCourse, updatedCourse,
previousCourse: course, previousCourse: course,
}); });
};
return (
<CourseContext.Provider
value={{
localCourse: course,
startItemDrag: (d) => {
setItemBeingDragged(d);
},
endItemDrag: () => {
setItemBeingDragged(undefined);
},
itemDrop: (day) => {
console.log("dropping");
if (itemBeingDragged && day) {
if (itemBeingDragged.type === "quiz") {
updateQuiz(day);
} }
} }
setItemBeingDragged(undefined); setItemBeingDragged(undefined);

View File

@@ -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",
}, },
}); });
}; };