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,6 +1,5 @@
import { LocalCourse } from "@/models/local/localCourse";
import {
dataTagSymbol,
useMutation,
useQueryClient,
useSuspenseQuery,
@@ -9,10 +8,10 @@ import axios from "axios";
export const localCourseKeys = {
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({
queryKey: localCourseKeys.allCourses,
queryFn: async (): Promise<LocalCourse[]> => {
@@ -20,20 +19,16 @@ export const useLocalCoursesQuery = () =>
const response = await axios.get(url);
return response.data;
},
select: (courses) => courses.map((c) => c.settings.name),
});
export const useLocalCourseDetailsQuery = (courseName: string) => {
const { data: courses } = useLocalCoursesQuery();
return useSuspenseQuery({
queryKey: localCourseKeys.courseDetail(courseName),
queryFn: () => {
const course = courses.find((c) => c.settings.name === courseName);
if (!course) {
console.log(courses);
console.log(courseName);
throw Error(`Could not find course with name ${courseName}`);
}
return course;
queryFn: async (): Promise<LocalCourse> => {
const url = `/api/courses/${courseName}`;
const response = await axios.get(url);
return response.data;
},
});
};
@@ -49,10 +44,12 @@ export const useUpdateCourseMutation = (courseName: string) => {
await axios.put(url, body);
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: localCourseKeys.allCourses }); //optimize?
queryClient.invalidateQueries({
queryKey: localCourseKeys.courseDetail(courseName),
});
},
scope: {
id: "update course",
id: "all courses",
},
});
};