mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 15:18:32 -06:00
102 lines
3.0 KiB
TypeScript
102 lines
3.0 KiB
TypeScript
import { useCourseContext } from "@/app/course/[courseName]/context/courseContext";
|
|
import {
|
|
useMutation,
|
|
useQueryClient,
|
|
useSuspenseQueries,
|
|
useSuspenseQuery,
|
|
} from "@tanstack/react-query";
|
|
import { localCourseKeys } from "./localCourseKeys";
|
|
import { getAllItemsQueryConfig } from "./courseItemHooks";
|
|
import {
|
|
createModuleOnServer,
|
|
getModuleNamesFromServer,
|
|
} from "./localCourseModuleServerActions";
|
|
import { trpc } from "@/services/trpc/utils";
|
|
|
|
export const useModuleNamesQuery = () => {
|
|
const { courseName } = useCourseContext();
|
|
return useSuspenseQuery({
|
|
queryKey: localCourseKeys.moduleNames(courseName),
|
|
queryFn: async (): Promise<string[]> => {
|
|
return await getModuleNamesFromServer({ courseName });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useCreateModuleMutation = () => {
|
|
const { courseName } = useCourseContext();
|
|
const queryClient = useQueryClient();
|
|
return useMutation({
|
|
mutationFn: async (moduleName: string) => {
|
|
await createModuleOnServer({ courseName, moduleName });
|
|
},
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({
|
|
queryKey: localCourseKeys.moduleNames(courseName),
|
|
});
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useAllCourseDataQuery = () => {
|
|
const { courseName } = useCourseContext();
|
|
const { data: moduleNames } = useModuleNamesQuery();
|
|
|
|
const [assignments] = trpc.useSuspenseQueries((t) =>
|
|
moduleNames.map((moduleName) =>
|
|
t.assignment.getAllAssignments({ courseName, moduleName })
|
|
)
|
|
);
|
|
|
|
const assignmentsAndModules = moduleNames.flatMap((moduleName, index) => {
|
|
return assignments[index].map((assignment) => ({ moduleName, assignment }));
|
|
});
|
|
|
|
// const { data: assignmentsAndModules } = useSuspenseQueries({
|
|
// queries: moduleNames.map((moduleName) =>
|
|
// getAllAssignmentsQueryConfig(courseName, moduleName)
|
|
// ),
|
|
// combine: (results) => ({
|
|
// data: results.flatMap((r, i) =>
|
|
// r.data.map((assignment) => ({
|
|
// moduleName: moduleNames[i],
|
|
// assignment,
|
|
// }))
|
|
// ),
|
|
// pending: results.some((r) => r.isPending),
|
|
// }),
|
|
// });
|
|
|
|
// const { data: quizzesAndModules } = useSuspenseQueries({
|
|
// queries: moduleNames.map((moduleName) =>
|
|
// getAllItemsQueryConfig(courseName, moduleName, "Quiz")
|
|
// ),
|
|
// combine: (results) => ({
|
|
// data: results.flatMap((r, i) =>
|
|
// r.data.map((quiz) => ({
|
|
// moduleName: moduleNames[i],
|
|
// quiz,
|
|
// }))
|
|
// ),
|
|
// pending: results.some((r) => r.isPending),
|
|
// }),
|
|
// });
|
|
|
|
// const { data: pagesAndModules } = useSuspenseQueries({
|
|
// queries: moduleNames.map((moduleName) =>
|
|
// getAllItemsQueryConfig(courseName, moduleName, "Page")
|
|
// ),
|
|
// combine: (results) => ({
|
|
// data: results.flatMap((r, i) =>
|
|
// r.data.map((page) => ({
|
|
// moduleName: moduleNames[i],
|
|
// page,
|
|
// }))
|
|
// ),
|
|
// pending: results.some((r) => r.isPending),
|
|
// }),
|
|
// });
|
|
|
|
return { assignmentsAndModules, quizzesAndModules: [], pagesAndModules: [] };
|
|
};
|