adding editing assignment groups

This commit is contained in:
2024-09-10 21:22:51 -06:00
parent 6266879103
commit fe0014d472
7 changed files with 267 additions and 2 deletions

View File

@@ -1,9 +1,13 @@
import { LocalAssignmentGroup } from "@/models/local/assignment/localAssignmentGroup";
import { canvasAssignmentGroupService } from "@/services/canvas/canvasAssignmentGroupService";
import { canvasService } from "@/services/canvas/canvasService";
import { useSuspenseQuery } from "@tanstack/react-query";
import { useMutation, useSuspenseQuery } from "@tanstack/react-query";
export const canvasCourseKeys = {
courseDetails: (canavasId: number) =>
["canvas", canavasId, "course details"] as const,
assignmentGroups: (canavasId: number) =>
["canvas", canavasId, "assignment groups"] as const,
};
export const useCanvasCourseQuery = (canvasId: number) =>
@@ -11,3 +15,39 @@ export const useCanvasCourseQuery = (canvasId: number) =>
queryKey: canvasCourseKeys.courseDetails(canvasId),
queryFn: async () => await canvasService.getCourse(canvasId),
});
export const useSetAssignmentGroupsMutation = (canvasId: number) => {
const { data: canvasAssignmentGroups } = useAssignmentGroupsQuery(canvasId);
return useMutation({
mutationFn: async (localAssignmentGroups: LocalAssignmentGroup[]) => {
const localNames = localAssignmentGroups.map((g) => g.name);
const groupsToDelete = canvasAssignmentGroups.filter(
(c) => !localNames.includes(c.name)
);
await Promise.all([
...groupsToDelete.map(
async (g) =>
await canvasAssignmentGroupService.delete(canvasId, g.id, g.name)
),
...localAssignmentGroups.map(async (group) => {
const canvasGroup = canvasAssignmentGroups.find(
(c) => c.name === group.name
);
if (!canvasGroup) {
await canvasAssignmentGroupService.create(canvasId, group);
} else {
if (canvasGroup.group_weight !== group.weight)
await canvasAssignmentGroupService.update(canvasId, group);
}
}),
]);
},
});
};
export const useAssignmentGroupsQuery = (canvasId: number) => {
return useSuspenseQuery({
queryKey: canvasCourseKeys.assignmentGroups(canvasId),
queryFn: async () => await canvasAssignmentGroupService.getAll(canvasId),
});
};