consolodating types

This commit is contained in:
2024-09-27 11:17:47 -06:00
parent 6539acec76
commit 4681b1df51
4 changed files with 86 additions and 69 deletions

View File

@@ -11,6 +11,7 @@ import { canvasQuizService } from "@/services/canvas/canvasQuizService";
import { canvasPageService } from "@/services/canvas/canvasPageService"; import { canvasPageService } from "@/services/canvas/canvasPageService";
import { canvasQuizKeys } from "./canvas/canvasQuizHooks"; import { canvasQuizKeys } from "./canvas/canvasQuizHooks";
import { canvasPageKeys } from "./canvas/canvasPageHooks"; import { canvasPageKeys } from "./canvas/canvasPageHooks";
// https://tanstack.com/query/latest/docs/framework/react/guides/ssr // https://tanstack.com/query/latest/docs/framework/react/guides/ssr
export const hydrateCourses = async (queryClient: QueryClient) => { export const hydrateCourses = async (queryClient: QueryClient) => {
const allSettings = await fileStorageService.settings.getAllCoursesSettings(); const allSettings = await fileStorageService.settings.getAllCoursesSettings();
@@ -132,11 +133,11 @@ const hydrateModuleData = async (
queryFn: () => assignments, queryFn: () => assignments,
}); });
await queryClient.prefetchQuery({ await queryClient.prefetchQuery({
queryKey: localCourseKeys.allQuizzes(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Quiz"),
queryFn: () => quizzes, queryFn: () => quizzes,
}); });
await queryClient.prefetchQuery({ await queryClient.prefetchQuery({
queryKey: localCourseKeys.allPages(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Page"),
queryFn: () => pages, queryFn: () => pages,
}); });
await Promise.all( await Promise.all(
@@ -157,7 +158,12 @@ const hydrateModuleData = async (
quizzes.map( quizzes.map(
async (quiz) => async (quiz) =>
await queryClient.prefetchQuery({ await queryClient.prefetchQuery({
queryKey: localCourseKeys.quiz(courseName, moduleName, quiz.name), queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
quiz.name,
"Quiz"
),
queryFn: () => quiz, queryFn: () => quiz,
}) })
) )
@@ -166,7 +172,12 @@ const hydrateModuleData = async (
pages.map( pages.map(
async (page) => async (page) =>
await queryClient.prefetchQuery({ await queryClient.prefetchQuery({
queryKey: localCourseKeys.page(courseName, moduleName, page.name), queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
page.name,
"Page"
),
queryFn: () => page, queryFn: () => page,
}) })
) )

View File

@@ -39,40 +39,4 @@ export const localCourseKeys = {
typeToFolder[type], typeToFolder[type],
name, name,
] as const, ] as const,
allQuizzes: (courseName: string, moduleName: string) =>
[
"course details",
courseName,
"modules",
moduleName,
"quizzes",
{ type: "all" },
] as const,
allPages: (courseName: string, moduleName: string) =>
[
"course details",
courseName,
"modules",
moduleName,
"pages",
{ type: "all" },
] as const,
quiz: (courseName: string, moduleName: string, quizName: string) =>
[
"course details",
courseName,
"modules",
moduleName,
"quizzes",
quizName,
] as const,
page: (courseName: string, moduleName: string, pageName: string) =>
[
"course details",
courseName,
"modules",
moduleName,
"pages",
pageName,
] as const,
}; };

View File

@@ -12,7 +12,7 @@ import { axiosClient } from "@/services/axiosUtils";
export function getAllPagesQueryConfig(courseName: string, moduleName: string) { export function getAllPagesQueryConfig(courseName: string, moduleName: string) {
return { return {
queryKey: localCourseKeys.allPages(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Page"),
queryFn: async (): Promise<LocalCoursePage[]> => { queryFn: async (): Promise<LocalCoursePage[]> => {
const url = const url =
"/api/courses/" + "/api/courses/" +
@@ -32,7 +32,7 @@ export function getPageQueryConfig(
pageName: string pageName: string
) { ) {
return { return {
queryKey: localCourseKeys.page(courseName, moduleName, pageName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
queryFn: async (): Promise<LocalCoursePage> => { queryFn: async (): Promise<LocalCoursePage> => {
const url = const url =
"/api/courses/" + "/api/courses/" +
@@ -100,18 +100,19 @@ export const useUpdatePageMutation = () => {
(previousPageName !== page.name || previousModuleName !== moduleName) (previousPageName !== page.name || previousModuleName !== moduleName)
) { ) {
queryClient.removeQueries({ queryClient.removeQueries({
queryKey: localCourseKeys.page( queryKey: localCourseKeys.itemOfType(
courseName, courseName,
previousModuleName, previousModuleName,
previousPageName previousPageName,
"Page"
), ),
}); });
queryClient.removeQueries({ queryClient.removeQueries({
queryKey: localCourseKeys.allPages(courseName, moduleName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
} }
queryClient.setQueryData( queryClient.setQueryData(
localCourseKeys.page(courseName, moduleName, pageName), localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
page page
); );
const url = const url =
@@ -129,10 +130,10 @@ export const useUpdatePageMutation = () => {
}, },
onSuccess: async (_, { moduleName, pageName }) => { onSuccess: async (_, { moduleName, pageName }) => {
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.allPages(courseName, moduleName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.page(courseName, moduleName, pageName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
}, },
}); });
@@ -152,7 +153,7 @@ export const useCreatePageMutation = () => {
pageName: string; pageName: string;
}) => { }) => {
queryClient.setQueryData( queryClient.setQueryData(
localCourseKeys.page(courseName, moduleName, pageName), localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
page page
); );
const url = const url =
@@ -166,10 +167,10 @@ export const useCreatePageMutation = () => {
}, },
onSuccess: (_, { moduleName, pageName }) => { onSuccess: (_, { moduleName, pageName }) => {
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: localCourseKeys.page(courseName, moduleName, pageName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
queryClient.invalidateQueries({ queryClient.invalidateQueries({
queryKey: localCourseKeys.allPages(courseName, moduleName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
}, },
}); });
@@ -187,10 +188,10 @@ export const useDeletePageMutation = () => {
pageName: string; pageName: string;
}) => { }) => {
queryClient.removeQueries({ queryClient.removeQueries({
queryKey: localCourseKeys.page(courseName, moduleName, pageName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
queryClient.removeQueries({ queryClient.removeQueries({
queryKey: localCourseKeys.allPages(courseName, moduleName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
const url = const url =
"/api/courses/" + "/api/courses/" +
@@ -203,10 +204,10 @@ export const useDeletePageMutation = () => {
}, },
onSuccess: async (_, { moduleName, pageName }) => { onSuccess: async (_, { moduleName, pageName }) => {
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.allPages(courseName, moduleName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.page(courseName, moduleName, pageName), queryKey: localCourseKeys.itemOfType(courseName, moduleName, pageName, "Page"),
}); });
}, },
}); });

View File

@@ -15,7 +15,7 @@ export function getAllQuizzesQueryConfig(
moduleName: string moduleName: string
) { ) {
return { return {
queryKey: localCourseKeys.allQuizzes(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(courseName, moduleName, "Quiz"),
queryFn: async (): Promise<LocalQuiz[]> => { queryFn: async (): Promise<LocalQuiz[]> => {
const url = const url =
"/api/courses/" + "/api/courses/" +
@@ -59,7 +59,12 @@ export function getQuizQueryConfig(
quizName: string quizName: string
) { ) {
return { return {
queryKey: localCourseKeys.quiz(courseName, moduleName, quizName), queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
quizName,
"Quiz"
),
queryFn: async (): Promise<LocalQuiz> => { queryFn: async (): Promise<LocalQuiz> => {
const url = const url =
"/api/courses/" + "/api/courses/" +
@@ -97,18 +102,23 @@ export const useUpdateQuizMutation = () => {
(previousQuizName !== quiz.name || previousModuleName !== moduleName) (previousQuizName !== quiz.name || previousModuleName !== moduleName)
) { ) {
queryClient.removeQueries({ queryClient.removeQueries({
queryKey: localCourseKeys.quiz( queryKey: localCourseKeys.itemOfType(
courseName, courseName,
previousModuleName, previousModuleName,
previousQuizName previousQuizName,
"Quiz"
), ),
}); });
queryClient.removeQueries({ queryClient.removeQueries({
queryKey: localCourseKeys.allQuizzes(courseName, previousModuleName), queryKey: localCourseKeys.allItemsOfType(
courseName,
previousModuleName,
"Quiz"
),
}); });
} }
queryClient.setQueryData( queryClient.setQueryData(
localCourseKeys.quiz(courseName, moduleName, quizName), localCourseKeys.itemOfType(courseName, moduleName, quizName, "Quiz"),
quiz quiz
); );
const url = const url =
@@ -130,10 +140,19 @@ export const useUpdateQuizMutation = () => {
}, },
onSuccess: async (_, { moduleName, quizName }) => { onSuccess: async (_, { moduleName, quizName }) => {
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.allQuizzes(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(
courseName,
moduleName,
"Quiz"
),
}); });
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.quiz(courseName, moduleName, quizName), queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
quizName,
"Quiz"
),
}); });
}, },
}); });
@@ -153,7 +172,7 @@ export const useCreateQuizMutation = () => {
quizName: string; quizName: string;
}) => { }) => {
queryClient.setQueryData( queryClient.setQueryData(
localCourseKeys.quiz(courseName, moduleName, quizName), localCourseKeys.itemOfType(courseName, moduleName, quizName, "Quiz"),
quiz quiz
); );
const url = const url =
@@ -167,10 +186,19 @@ export const useCreateQuizMutation = () => {
}, },
onSuccess: async (_, { moduleName, quizName }) => { onSuccess: async (_, { moduleName, quizName }) => {
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.allQuizzes(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(
courseName,
moduleName,
"Quiz"
),
}); });
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.quiz(courseName, moduleName, quizName), queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
quizName,
"Quiz"
),
}); });
}, },
}); });
@@ -196,15 +224,28 @@ export const useDeleteQuizMutation = () => {
encodeURIComponent(quizName); encodeURIComponent(quizName);
await axiosClient.delete(url); await axiosClient.delete(url);
queryClient.removeQueries({ queryClient.removeQueries({
queryKey: localCourseKeys.allQuizzes(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(
courseName,
moduleName,
"Quiz"
),
}); });
}, },
onSuccess: async (_, { moduleName, quizName }) => { onSuccess: async (_, { moduleName, quizName }) => {
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.allQuizzes(courseName, moduleName), queryKey: localCourseKeys.allItemsOfType(
courseName,
moduleName,
"Quiz"
),
}); });
await queryClient.invalidateQueries({ await queryClient.invalidateQueries({
queryKey: localCourseKeys.quiz(courseName, moduleName, quizName), queryKey: localCourseKeys.itemOfType(
courseName,
moduleName,
quizName,
"Quiz"
),
}); });
}, },
}); });