mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 15:48:32 -06:00
more centralization
This commit is contained in:
@@ -73,16 +73,16 @@ export const hydrateCanvasCourse = async (
|
||||
};
|
||||
|
||||
const loadAllModuleData = async (courseName: string, moduleName: string) => {
|
||||
const [assignmentNames, pageNames, quizNames] = await Promise.all([
|
||||
const [assignmentNames, pages, quizzes] = await Promise.all([
|
||||
await fileStorageService.assignments.getAssignmentNames(
|
||||
courseName,
|
||||
moduleName
|
||||
),
|
||||
await fileStorageService.pages.getPageNames(courseName, moduleName),
|
||||
await fileStorageService.quizzes.getQuizNames(courseName, moduleName),
|
||||
await fileStorageService.pages.getPages(courseName, moduleName),
|
||||
await fileStorageService.quizzes.getQuizzes(courseName, moduleName),
|
||||
]);
|
||||
|
||||
const [assignments, quizzes, pages] = await Promise.all([
|
||||
const [assignments] = await Promise.all([
|
||||
await Promise.all(
|
||||
assignmentNames.map(async (assignmentName) => {
|
||||
try {
|
||||
@@ -97,33 +97,11 @@ const loadAllModuleData = async (courseName: string, moduleName: string) => {
|
||||
}
|
||||
})
|
||||
),
|
||||
await Promise.all(
|
||||
quizNames.map(
|
||||
async (quizName) =>
|
||||
await fileStorageService.quizzes.getQuiz(
|
||||
courseName,
|
||||
moduleName,
|
||||
quizName
|
||||
)
|
||||
)
|
||||
),
|
||||
await Promise.all(
|
||||
pageNames.map(
|
||||
async (pageName) =>
|
||||
await fileStorageService.pages.getPage(
|
||||
courseName,
|
||||
moduleName,
|
||||
pageName
|
||||
)
|
||||
)
|
||||
),
|
||||
]);
|
||||
|
||||
const assignmentsLoaded = assignments.filter(a => a !== null);
|
||||
const assignmentsLoaded = assignments.filter((a) => a !== null);
|
||||
return {
|
||||
moduleName,
|
||||
pageNames,
|
||||
quizNames,
|
||||
assignments: assignmentsLoaded,
|
||||
quizzes,
|
||||
pages,
|
||||
@@ -133,15 +111,11 @@ const loadAllModuleData = async (courseName: string, moduleName: string) => {
|
||||
const hydrateModuleData = async (
|
||||
{
|
||||
moduleName,
|
||||
pageNames,
|
||||
quizNames,
|
||||
assignments,
|
||||
quizzes,
|
||||
pages,
|
||||
}: {
|
||||
moduleName: string;
|
||||
pageNames: string[];
|
||||
quizNames: string[];
|
||||
assignments: LocalAssignment[];
|
||||
quizzes: LocalQuiz[];
|
||||
pages: LocalCoursePage[];
|
||||
@@ -153,6 +127,14 @@ const hydrateModuleData = async (
|
||||
queryKey: localCourseKeys.allAssignments(courseName, moduleName),
|
||||
queryFn: () => assignments,
|
||||
});
|
||||
await queryClient.prefetchQuery({
|
||||
queryKey: localCourseKeys.allQuizzes(courseName, moduleName),
|
||||
queryFn: () => quizzes,
|
||||
});
|
||||
await queryClient.prefetchQuery({
|
||||
queryKey: localCourseKeys.allPages(courseName, moduleName),
|
||||
queryFn: () => pages,
|
||||
});
|
||||
await Promise.all(
|
||||
assignments.map(
|
||||
async (assignment) =>
|
||||
@@ -166,10 +148,6 @@ const hydrateModuleData = async (
|
||||
})
|
||||
)
|
||||
);
|
||||
await queryClient.prefetchQuery({
|
||||
queryKey: localCourseKeys.quizNames(courseName, moduleName),
|
||||
queryFn: () => quizNames,
|
||||
});
|
||||
await Promise.all(
|
||||
quizzes.map(
|
||||
async (quiz) =>
|
||||
@@ -179,10 +157,6 @@ const hydrateModuleData = async (
|
||||
})
|
||||
)
|
||||
);
|
||||
await queryClient.prefetchQuery({
|
||||
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
||||
queryFn: () => pageNames,
|
||||
});
|
||||
await Promise.all(
|
||||
pages.map(
|
||||
async (page) =>
|
||||
|
||||
@@ -28,7 +28,7 @@ export const getAllAssignmentsQueryConfig = (
|
||||
},
|
||||
});
|
||||
|
||||
export const useAllAssignmentNamesQuery = (moduleName: string) => {
|
||||
const useAllAssignmentsQuery = (moduleName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getAllAssignmentsQueryConfig(courseName, moduleName));
|
||||
};
|
||||
@@ -70,7 +70,7 @@ export const useAssignmentQuery = (
|
||||
};
|
||||
|
||||
export const useAssignmentsQueries = (moduleName: string) => {
|
||||
const { data: allAssignments } = useAllAssignmentNamesQuery(moduleName);
|
||||
const { data: allAssignments } = useAllAssignmentsQuery(moduleName);
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQueries({
|
||||
queries: allAssignments.map((assignment) =>
|
||||
|
||||
@@ -19,23 +19,23 @@ export const localCourseKeys = {
|
||||
"assignments",
|
||||
{ type: "all assignments" },
|
||||
] as const,
|
||||
quizNames: (courseName: string, moduleName: string) =>
|
||||
allQuizzes: (courseName: string, moduleName: string) =>
|
||||
[
|
||||
"course details",
|
||||
courseName,
|
||||
"modules",
|
||||
moduleName,
|
||||
"quizzes",
|
||||
{ type: "names" },
|
||||
{ type: "all quizzes" },
|
||||
] as const,
|
||||
pageNames: (courseName: string, moduleName: string) =>
|
||||
allPages: (courseName: string, moduleName: string) =>
|
||||
[
|
||||
"course details",
|
||||
courseName,
|
||||
"modules",
|
||||
moduleName,
|
||||
"pages",
|
||||
{ type: "names" },
|
||||
{ type: "all pages" },
|
||||
] as const,
|
||||
assignment: (
|
||||
courseName: string,
|
||||
|
||||
@@ -11,8 +11,8 @@ import {
|
||||
getAllAssignmentsQueryConfig,
|
||||
getAssignmentQueryConfig,
|
||||
} from "./assignmentHooks";
|
||||
import { getPageNamesQueryConfig, getPageQueryConfig } from "./pageHooks";
|
||||
import { getQuizNamesQueryConfig, getQuizQueryConfig } from "./quizHooks";
|
||||
import { getAllPagesQueryConfig, getPageQueryConfig } from "./pageHooks";
|
||||
import { getAllQuizzesQueryConfig, getQuizQueryConfig } from "./quizHooks";
|
||||
|
||||
export const useModuleNamesQuery = () => {
|
||||
const { courseName } = useCourseContext();
|
||||
@@ -92,57 +92,15 @@ export const useAllCourseDataQuery = () => {
|
||||
}),
|
||||
});
|
||||
|
||||
// const { data: assignmentsAndModules } = useSuspenseQueries({
|
||||
// queries: assignmentsAndModules.map(
|
||||
// ({ moduleName, assignment }, i) =>
|
||||
// getAssignmentQueryConfig(courseName, moduleName, assignment)
|
||||
// ),
|
||||
// combine: (results) => ({
|
||||
// data: results.flatMap((r, i) => ({
|
||||
// moduleName: assignmentsAndModules[i].moduleName,
|
||||
// assignment: r.data,
|
||||
// })),
|
||||
// pending: results.some((r) => r.isPending),
|
||||
// }),
|
||||
// });
|
||||
|
||||
const { data: quizNamesAndModules } = useSuspenseQueries({
|
||||
queries: moduleNames.map((moduleName) =>
|
||||
getQuizNamesQueryConfig(courseName, moduleName)
|
||||
),
|
||||
combine: (results) => ({
|
||||
data: results.flatMap((r, i) =>
|
||||
r.data.map((quizName) => ({
|
||||
moduleName: moduleNames[i],
|
||||
quizName: quizName,
|
||||
}))
|
||||
),
|
||||
pending: results.some((r) => r.isPending),
|
||||
}),
|
||||
});
|
||||
|
||||
const { data: quizzesAndModules } = useSuspenseQueries({
|
||||
queries: quizNamesAndModules.map(({ moduleName, quizName }, i) =>
|
||||
getQuizQueryConfig(courseName, moduleName, quizName)
|
||||
),
|
||||
combine: (results) => ({
|
||||
data: results.flatMap((r, i) => ({
|
||||
moduleName: quizNamesAndModules[i].moduleName,
|
||||
quiz: r.data,
|
||||
})),
|
||||
pending: results.some((r) => r.isPending),
|
||||
}),
|
||||
});
|
||||
|
||||
const { data: pageNamesAndModules } = useSuspenseQueries({
|
||||
queries: moduleNames.map((moduleName) =>
|
||||
getPageNamesQueryConfig(courseName, moduleName)
|
||||
getAllQuizzesQueryConfig(courseName, moduleName)
|
||||
),
|
||||
combine: (results) => ({
|
||||
data: results.flatMap((r, i) =>
|
||||
r.data.map((pageName) => ({
|
||||
r.data.map((quiz) => ({
|
||||
moduleName: moduleNames[i],
|
||||
pageName,
|
||||
quiz,
|
||||
}))
|
||||
),
|
||||
pending: results.some((r) => r.isPending),
|
||||
@@ -150,14 +108,16 @@ export const useAllCourseDataQuery = () => {
|
||||
});
|
||||
|
||||
const { data: pagesAndModules } = useSuspenseQueries({
|
||||
queries: pageNamesAndModules.map(({ moduleName, pageName }, i) =>
|
||||
getPageQueryConfig(courseName, moduleName, pageName)
|
||||
queries: moduleNames.map((moduleName) =>
|
||||
getAllPagesQueryConfig(courseName, moduleName)
|
||||
),
|
||||
combine: (results) => ({
|
||||
data: results.flatMap((r, i) => ({
|
||||
moduleName: pageNamesAndModules[i].moduleName,
|
||||
page: r.data,
|
||||
})),
|
||||
data: results.flatMap((r, i) =>
|
||||
r.data.map((page) => ({
|
||||
moduleName: moduleNames[i],
|
||||
page,
|
||||
}))
|
||||
),
|
||||
pending: results.some((r) => r.isPending),
|
||||
}),
|
||||
});
|
||||
|
||||
@@ -10,13 +10,10 @@ import { localCourseKeys } from "./localCourseKeys";
|
||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||
import { axiosClient } from "@/services/axiosUtils";
|
||||
|
||||
export function getPageNamesQueryConfig(
|
||||
courseName: string,
|
||||
moduleName: string
|
||||
) {
|
||||
export function getAllPagesQueryConfig(courseName: string, moduleName: string) {
|
||||
return {
|
||||
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
||||
queryFn: async (): Promise<string[]> => {
|
||||
queryKey: localCourseKeys.allPages(courseName, moduleName),
|
||||
queryFn: async (): Promise<LocalCoursePage[]> => {
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
encodeURIComponent(courseName) +
|
||||
@@ -29,29 +26,6 @@ export function getPageNamesQueryConfig(
|
||||
};
|
||||
}
|
||||
|
||||
export const usePageNamesQuery = (moduleName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getPageNamesQueryConfig(courseName, moduleName));
|
||||
};
|
||||
|
||||
export const usePageQuery = (moduleName: string, pageName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getPageQueryConfig(courseName, moduleName, pageName));
|
||||
};
|
||||
|
||||
export const usePagesQueries = (moduleName: string, pageNames: string[]) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQueries({
|
||||
queries: pageNames.map((name) =>
|
||||
getPageQueryConfig(courseName, moduleName, name)
|
||||
),
|
||||
combine: (results) => ({
|
||||
data: results.map((r) => r.data),
|
||||
pending: results.some((r) => r.isPending),
|
||||
}),
|
||||
});
|
||||
};
|
||||
|
||||
export function getPageQueryConfig(
|
||||
courseName: string,
|
||||
moduleName: string,
|
||||
@@ -72,13 +46,37 @@ export function getPageQueryConfig(
|
||||
return response.data;
|
||||
} catch (e) {
|
||||
console.log("error getting page", e, url);
|
||||
debugger;
|
||||
throw e;
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export const usePageQuery = (moduleName: string, pageName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getPageQueryConfig(courseName, moduleName, pageName));
|
||||
};
|
||||
|
||||
const useAllPagesQuery = (moduleName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getAllPagesQueryConfig(courseName, moduleName));
|
||||
};
|
||||
|
||||
export const usePagesQueries = (moduleName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
const { data: allPages } = useAllPagesQuery(moduleName);
|
||||
return useSuspenseQueries({
|
||||
queries: allPages.map((page) => ({
|
||||
...getPageQueryConfig(courseName, moduleName, page.name),
|
||||
queryFn: () => page,
|
||||
})),
|
||||
combine: (results) => ({
|
||||
data: results.map((r) => r.data),
|
||||
pending: results.some((r) => r.isPending),
|
||||
}),
|
||||
});
|
||||
};
|
||||
|
||||
export const useUpdatePageMutation = () => {
|
||||
const { courseName } = useCourseContext();
|
||||
const queryClient = useQueryClient();
|
||||
@@ -109,7 +107,7 @@ export const useUpdatePageMutation = () => {
|
||||
),
|
||||
});
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allPages(courseName, moduleName),
|
||||
});
|
||||
}
|
||||
queryClient.setQueryData(
|
||||
@@ -131,7 +129,7 @@ export const useUpdatePageMutation = () => {
|
||||
},
|
||||
onSuccess: async (_, { moduleName, pageName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allPages(courseName, moduleName),
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.page(courseName, moduleName, pageName),
|
||||
@@ -171,7 +169,7 @@ export const useCreatePageMutation = () => {
|
||||
queryKey: localCourseKeys.page(courseName, moduleName, pageName),
|
||||
});
|
||||
queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allPages(courseName, moduleName),
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -192,7 +190,7 @@ export const useDeletePageMutation = () => {
|
||||
queryKey: localCourseKeys.page(courseName, moduleName, pageName),
|
||||
});
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allPages(courseName, moduleName),
|
||||
});
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
@@ -202,11 +200,10 @@ export const useDeletePageMutation = () => {
|
||||
"/pages/" +
|
||||
encodeURIComponent(pageName);
|
||||
await axiosClient.delete(url);
|
||||
|
||||
},
|
||||
onSuccess: async (_, { moduleName, pageName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allPages(courseName, moduleName),
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.page(courseName, moduleName, pageName),
|
||||
|
||||
@@ -10,13 +10,13 @@ import { localCourseKeys } from "./localCourseKeys";
|
||||
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
||||
import { axiosClient } from "@/services/axiosUtils";
|
||||
|
||||
export function getQuizNamesQueryConfig(
|
||||
export function getAllQuizzesQueryConfig(
|
||||
courseName: string,
|
||||
moduleName: string
|
||||
) {
|
||||
return {
|
||||
queryKey: localCourseKeys.quizNames(courseName, moduleName),
|
||||
queryFn: async (): Promise<string[]> => {
|
||||
queryKey: localCourseKeys.allQuizzes(courseName, moduleName),
|
||||
queryFn: async (): Promise<LocalQuiz[]> => {
|
||||
const url =
|
||||
"/api/courses/" +
|
||||
encodeURIComponent(courseName) +
|
||||
@@ -28,22 +28,24 @@ export function getQuizNamesQueryConfig(
|
||||
},
|
||||
};
|
||||
}
|
||||
export const useQuizNamesQuery = (moduleName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getQuizNamesQueryConfig(courseName, moduleName));
|
||||
};
|
||||
|
||||
export const useQuizQuery = (moduleName: string, quizName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getQuizQueryConfig(courseName, moduleName, quizName));
|
||||
};
|
||||
|
||||
export const useQuizzesQueries = (moduleName: string, quizNames: string[]) => {
|
||||
const useAllQuizzesQuery = (moduleName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
return useSuspenseQuery(getAllQuizzesQueryConfig(courseName, moduleName));
|
||||
};
|
||||
export const useQuizzesQueries = (moduleName: string) => {
|
||||
const { courseName } = useCourseContext();
|
||||
const { data: allQuizzes } = useAllQuizzesQuery(moduleName);
|
||||
return useSuspenseQueries({
|
||||
queries: quizNames.map((name) =>
|
||||
getQuizQueryConfig(courseName, moduleName, name)
|
||||
),
|
||||
queries: allQuizzes.map((quiz) => ({
|
||||
...getQuizQueryConfig(courseName, moduleName, quiz.name),
|
||||
queryFn: () => quiz,
|
||||
})),
|
||||
combine: (results) => ({
|
||||
data: results.map((r) => r.data),
|
||||
pending: results.some((r) => r.isPending),
|
||||
@@ -102,7 +104,7 @@ export const useUpdateQuizMutation = () => {
|
||||
),
|
||||
});
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.quizNames(courseName, previousModuleName),
|
||||
queryKey: localCourseKeys.allQuizzes(courseName, previousModuleName),
|
||||
});
|
||||
}
|
||||
queryClient.setQueryData(
|
||||
@@ -128,7 +130,7 @@ export const useUpdateQuizMutation = () => {
|
||||
},
|
||||
onSuccess: async (_, { moduleName, quizName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.quizNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allQuizzes(courseName, moduleName),
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.quiz(courseName, moduleName, quizName),
|
||||
@@ -165,7 +167,7 @@ export const useCreateQuizMutation = () => {
|
||||
},
|
||||
onSuccess: async (_, { moduleName, quizName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.quizNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allQuizzes(courseName, moduleName),
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.quiz(courseName, moduleName, quizName),
|
||||
@@ -194,12 +196,12 @@ export const useDeleteQuizMutation = () => {
|
||||
encodeURIComponent(quizName);
|
||||
await axiosClient.delete(url);
|
||||
queryClient.removeQueries({
|
||||
queryKey: localCourseKeys.quizNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allQuizzes(courseName, moduleName),
|
||||
});
|
||||
},
|
||||
onSuccess: async (_, { moduleName, quizName }) => {
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.quizNames(courseName, moduleName),
|
||||
queryKey: localCourseKeys.allQuizzes(courseName, moduleName),
|
||||
});
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: localCourseKeys.quiz(courseName, moduleName, quizName),
|
||||
|
||||
Reference in New Issue
Block a user