mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 15:48:32 -06:00
working on assignment groups
This commit is contained in:
@@ -9,6 +9,7 @@ import { useEffect, useState } from "react";
|
|||||||
import TextInput from "../../../../components/form/TextInput";
|
import TextInput from "../../../../components/form/TextInput";
|
||||||
import { useSetAssignmentGroupsMutation } from "@/hooks/canvas/canvasCourseHooks";
|
import { useSetAssignmentGroupsMutation } from "@/hooks/canvas/canvasCourseHooks";
|
||||||
import { settingsBox } from "./sharedSettings";
|
import { settingsBox } from "./sharedSettings";
|
||||||
|
import { Spinner } from "@/components/Spinner";
|
||||||
|
|
||||||
export default function AssignmentGroupManagement() {
|
export default function AssignmentGroupManagement() {
|
||||||
const [settings] = useLocalCourseSettingsQuery();
|
const [settings] = useLocalCourseSettingsQuery();
|
||||||
@@ -93,6 +94,29 @@ export default function AssignmentGroupManagement() {
|
|||||||
Add Assignment Group
|
Add Assignment Group
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
<br />
|
||||||
|
<div className="flex justify-end">
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
applyInCanvas.mutate(settings);
|
||||||
|
}}
|
||||||
|
disabled={applyInCanvas.isPending}
|
||||||
|
>
|
||||||
|
Update Assignment Groups In Canvas
|
||||||
|
</button>
|
||||||
|
{applyInCanvas.isPending && <Spinner />}
|
||||||
|
{applyInCanvas.isSuccess && (
|
||||||
|
<div>
|
||||||
|
{
|
||||||
|
"You will need to go to your course assignments page > settings > Assignment Group Weights"
|
||||||
|
}
|
||||||
|
<br />
|
||||||
|
{
|
||||||
|
"and check the 'Weight final grade based on assignment groups' box"
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ export default function NewCourseForm() {
|
|||||||
(assignmentGroup) => {
|
(assignmentGroup) => {
|
||||||
const { canvasId, ...groupWithoutCanvas } =
|
const { canvasId, ...groupWithoutCanvas } =
|
||||||
assignmentGroup;
|
assignmentGroup;
|
||||||
return groupWithoutCanvas;
|
return { ...groupWithoutCanvas, canvasId: undefined };
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
import { CanvasAssignmentGroup } from "@/models/canvas/assignments/canvasAssignmentGroup";
|
import { CanvasAssignmentGroup } from "@/models/canvas/assignments/canvasAssignmentGroup";
|
||||||
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel";
|
||||||
import { LocalAssignmentGroup } from "@/models/local/assignment/localAssignmentGroup";
|
import { LocalAssignmentGroup } from "@/models/local/assignment/localAssignmentGroup";
|
||||||
|
import { LocalCourseSettings } from "@/models/local/localCourseSettings";
|
||||||
import { canvasAssignmentGroupService } from "@/services/canvas/canvasAssignmentGroupService";
|
import { canvasAssignmentGroupService } from "@/services/canvas/canvasAssignmentGroupService";
|
||||||
import { canvasService } from "@/services/canvas/canvasService";
|
import { canvasService } from "@/services/canvas/canvasService";
|
||||||
|
import { trpc } from "@/services/trpc/utils";
|
||||||
import { useMutation, useQuery } from "@tanstack/react-query";
|
import { useMutation, useQuery } from "@tanstack/react-query";
|
||||||
|
import { useUpdateLocalCourseSettingsMutation } from "../localCourse/localCoursesHooks";
|
||||||
|
|
||||||
export const canvasCourseKeys = {
|
export const canvasCourseKeys = {
|
||||||
courseDetails: (canavasId: number) =>
|
courseDetails: (canavasId: number) =>
|
||||||
@@ -22,39 +25,65 @@ export const useCourseListInTermQuery = (canvasTermId: number | undefined) =>
|
|||||||
enabled: !!canvasTermId,
|
enabled: !!canvasTermId,
|
||||||
});
|
});
|
||||||
|
|
||||||
// export const useCanvasCourseQuery = (canvasId: number) =>
|
|
||||||
// useQuery({
|
|
||||||
// queryKey: canvasCourseKeys.courseDetails(canvasId),
|
|
||||||
// queryFn: async () => await canvasService.getCourse(canvasId),
|
|
||||||
// });
|
|
||||||
|
|
||||||
export const useSetAssignmentGroupsMutation = (canvasId: number) => {
|
export const useSetAssignmentGroupsMutation = (canvasId: number) => {
|
||||||
|
const updateSettingsMutation = useUpdateLocalCourseSettingsMutation();
|
||||||
const { data: canvasAssignmentGroups } = useAssignmentGroupsQuery(canvasId);
|
const { data: canvasAssignmentGroups } = useAssignmentGroupsQuery(canvasId);
|
||||||
return useMutation({
|
return useMutation({
|
||||||
mutationFn: async (localAssignmentGroups: LocalAssignmentGroup[]) => {
|
mutationFn: async (settings: LocalCourseSettings) => {
|
||||||
if (!canvasAssignmentGroups) return;
|
if (typeof canvasAssignmentGroups === "undefined") {
|
||||||
|
console.log("cannot apply groups if no groups loaded");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const localAssignmentGroups = settings.assignmentGroups;
|
||||||
|
|
||||||
const localNames = localAssignmentGroups.map((g) => g.name);
|
const localNames = localAssignmentGroups.map((g) => g.name);
|
||||||
const groupsToDelete = canvasAssignmentGroups.filter(
|
const groupsToDelete = canvasAssignmentGroups.filter(
|
||||||
(c: CanvasAssignmentGroup) => !localNames.includes(c.name)
|
(c: CanvasAssignmentGroup) => !localNames.includes(c.name)
|
||||||
);
|
);
|
||||||
await Promise.all([
|
console.log("updating canvas groups", groupsToDelete);
|
||||||
...groupsToDelete.map(
|
await Promise.all(
|
||||||
|
groupsToDelete.map(
|
||||||
async (g: CanvasAssignmentGroup) =>
|
async (g: CanvasAssignmentGroup) =>
|
||||||
await canvasAssignmentGroupService.delete(canvasId, g.id, g.name)
|
await canvasAssignmentGroupService.delete(canvasId, g.id, g.name)
|
||||||
),
|
)
|
||||||
...localAssignmentGroups.map(async (group) => {
|
);
|
||||||
const canvasGroup = canvasAssignmentGroups.find(
|
const updatedGroups = await Promise.all(
|
||||||
(c: CanvasAssignmentGroup) => c.name === group.name
|
localAssignmentGroups.map(
|
||||||
);
|
async (group): Promise<LocalAssignmentGroup> => {
|
||||||
if (!canvasGroup) {
|
const canvasGroup = canvasAssignmentGroups.find(
|
||||||
await canvasAssignmentGroupService.create(canvasId, group);
|
(c: CanvasAssignmentGroup) => c.name === group.name
|
||||||
} else {
|
);
|
||||||
if (canvasGroup.group_weight !== group.weight)
|
if (!canvasGroup) {
|
||||||
await canvasAssignmentGroupService.update(canvasId, group);
|
const newGroup = await canvasAssignmentGroupService.create(
|
||||||
|
canvasId,
|
||||||
|
group
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
...group,
|
||||||
|
canvasId: newGroup.canvasId,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
if (canvasGroup.group_weight !== group.weight) {
|
||||||
|
await canvasAssignmentGroupService.update(canvasId, group);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...group,
|
||||||
|
canvasId: canvasGroup.id,
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}),
|
)
|
||||||
]);
|
);
|
||||||
|
|
||||||
|
const updatedSettings: LocalCourseSettings = {
|
||||||
|
...settings,
|
||||||
|
assignmentGroups: updatedGroups,
|
||||||
|
};
|
||||||
|
console.log(
|
||||||
|
"finished updating canvas assignment groups, updating settings of file system",
|
||||||
|
updatedSettings
|
||||||
|
);
|
||||||
|
await updateSettingsMutation.mutateAsync({ settings: updatedSettings });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -62,6 +91,7 @@ export const useSetAssignmentGroupsMutation = (canvasId: number) => {
|
|||||||
export const useAssignmentGroupsQuery = (canvasId: number) => {
|
export const useAssignmentGroupsQuery = (canvasId: number) => {
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: canvasCourseKeys.assignmentGroups(canvasId),
|
queryKey: canvasCourseKeys.assignmentGroups(canvasId),
|
||||||
queryFn: async (): Promise<CanvasAssignmentGroup[]> => await canvasAssignmentGroupService.getAll(canvasId),
|
queryFn: async (): Promise<CanvasAssignmentGroup[]> =>
|
||||||
|
await canvasAssignmentGroupService.getAll(canvasId),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export const useUpdateLocalCourseSettingsMutation = () => {
|
|||||||
const { courseName } = useCourseContext();
|
const { courseName } = useCourseContext();
|
||||||
const utils = trpc.useUtils();
|
const utils = trpc.useUtils();
|
||||||
|
|
||||||
return trpc.settings.createCourse.useMutation({
|
return trpc.settings.updateSettings.useMutation({
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
utils.settings.allCoursesSettings.invalidate();
|
utils.settings.allCoursesSettings.invalidate();
|
||||||
utils.settings.courseSettings.invalidate({ courseName });
|
utils.settings.courseSettings.invalidate({ courseName });
|
||||||
|
|||||||
Reference in New Issue
Block a user