mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
145 lines
4.2 KiB
TypeScript
145 lines
4.2 KiB
TypeScript
import { QueryClient } from "@tanstack/react-query";
|
|
import { localCourseKeys } from "./localCourse/localCourseKeys";
|
|
import { fileStorageService } from "@/services/fileStorage/fileStorageService";
|
|
// https://tanstack.com/query/latest/docs/framework/react/guides/ssr
|
|
export const hydrateCourses = async (queryClient: QueryClient) => {
|
|
const courseNames = await fileStorageService.getCourseNames();
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.allCourses,
|
|
queryFn: () => courseNames,
|
|
});
|
|
|
|
await Promise.all(
|
|
courseNames.map(async (courseName) => {
|
|
await hydrateCourse(queryClient, courseName);
|
|
})
|
|
);
|
|
};
|
|
|
|
export const hydrateCourse = async (
|
|
queryClient: QueryClient,
|
|
courseName: string
|
|
) => {
|
|
const settings = await fileStorageService.getCourseSettings(courseName);
|
|
const moduleNames = await fileStorageService.getModuleNames(courseName);
|
|
const modulesData = await Promise.all(
|
|
moduleNames.map(async (moduleName) => {
|
|
const [assignmentNames, pageNames, quizNames] = await Promise.all([
|
|
await fileStorageService.getAssignmentNames(courseName, moduleName),
|
|
await fileStorageService.getPageNames(courseName, moduleName),
|
|
await fileStorageService.getQuizNames(courseName, moduleName),
|
|
]);
|
|
|
|
const [assignments, quizzes, pages] = await Promise.all([
|
|
await Promise.all(
|
|
assignmentNames.map(
|
|
async (assignmentName) =>
|
|
await fileStorageService.getAssignment(
|
|
courseName,
|
|
moduleName,
|
|
assignmentName
|
|
)
|
|
)
|
|
),
|
|
await Promise.all(
|
|
quizNames.map(
|
|
async (quizName) =>
|
|
await fileStorageService.getQuiz(courseName, moduleName, quizName)
|
|
)
|
|
),
|
|
await Promise.all(
|
|
pageNames.map(
|
|
async (pageName) =>
|
|
await fileStorageService.getPage(courseName, moduleName, pageName)
|
|
)
|
|
),
|
|
]);
|
|
|
|
return {
|
|
moduleName,
|
|
assignmentNames,
|
|
pageNames,
|
|
quizNames,
|
|
assignments,
|
|
quizzes,
|
|
pages,
|
|
};
|
|
})
|
|
);
|
|
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.settings(courseName),
|
|
queryFn: () => settings,
|
|
});
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.moduleNames(courseName),
|
|
queryFn: () => moduleNames,
|
|
});
|
|
|
|
await Promise.all(
|
|
modulesData.map(
|
|
async ({
|
|
moduleName,
|
|
assignmentNames,
|
|
pageNames,
|
|
quizNames,
|
|
assignments,
|
|
quizzes,
|
|
pages,
|
|
}) => {
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.assignmentNames(courseName, moduleName),
|
|
queryFn: () => assignmentNames,
|
|
});
|
|
await Promise.all(
|
|
assignments.map(
|
|
async (assignment) =>
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.assignment(
|
|
courseName,
|
|
moduleName,
|
|
assignment.name
|
|
),
|
|
queryFn: () => assignment,
|
|
})
|
|
)
|
|
);
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.quizNames(courseName, moduleName),
|
|
queryFn: () => quizNames,
|
|
});
|
|
await Promise.all(
|
|
quizzes.map(
|
|
async (quiz) =>
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.quiz(
|
|
courseName,
|
|
moduleName,
|
|
quiz.name
|
|
),
|
|
queryFn: () => quiz,
|
|
})
|
|
)
|
|
);
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.pageNames(courseName, moduleName),
|
|
queryFn: () => pageNames,
|
|
});
|
|
await Promise.all(
|
|
pages.map(
|
|
async (page) =>
|
|
await queryClient.prefetchQuery({
|
|
queryKey: localCourseKeys.page(
|
|
courseName,
|
|
moduleName,
|
|
page.name
|
|
),
|
|
queryFn: () => page,
|
|
})
|
|
)
|
|
);
|
|
}
|
|
)
|
|
);
|
|
};
|