diff --git a/frontend/src/queries/classes.ts b/frontend/src/queries/classes.ts index a6d1c157..66be4acf 100644 --- a/frontend/src/queries/classes.ts +++ b/frontend/src/queries/classes.ts @@ -70,8 +70,7 @@ export function useCreateClassMutation(): UseMutationReturnType classController.createClass(data), onSuccess: async () => { - await queryClient.invalidateQueries({ queryKey: classesQueryKey(true) }); - await queryClient.invalidateQueries({ queryKey: classesQueryKey(false) }); + await queryClient.invalidateQueries({ queryKey: [ "classes" ] }); }, }); } @@ -90,11 +89,11 @@ export function useDeleteClassMutation(): UseMutationReturnType { +export function useUpdateClassMutation(): UseMutationReturnType}, unknown> { const queryClient = useQueryClient(); return useMutation({ - mutationFn: async (data) => classController.updateClass(data.id, data), + mutationFn: async ({ cid, data }) => classController.updateClass(cid, data), onSuccess: async (data) => { await invalidateAllClassKeys(queryClient, data.class.id); await invalidateAllAssignmentKeys(queryClient, data.class.id); diff --git a/frontend/src/queries/groups.ts b/frontend/src/queries/groups.ts index 37270953..dbe4bcd7 100644 --- a/frontend/src/queries/groups.ts +++ b/frontend/src/queries/groups.ts @@ -5,6 +5,8 @@ import type { SubmissionsResponse } from "@/controllers/submissions"; import type { GroupDTO } from "@dwengo-1/common/interfaces/group"; import { QueryClient, useMutation, useQuery, useQueryClient, type UseMutationReturnType, type UseQueryReturnType } from "@tanstack/vue-query"; import { computed, toValue, type MaybeRefOrGetter } from "vue"; +import { invalidateAllAssignmentKeys } from "./assignments"; +import { invalidateAllSubmissionKeys } from "./submissions"; export function groupsQueryKey(classid: string, assignmentNumber: number, full: boolean) { return [ "groups", classid, assignmentNumber, full ]; @@ -83,62 +85,48 @@ export function useGroupQuery( }); } -// TODO: find way to check if cid and an are not undefined. -// depends on how this function is used. -export function useCreateGroupMutation( - classid: MaybeRefOrGetter, - assignmentNumber: MaybeRefOrGetter, -): UseMutationReturnType { +export function useCreateGroupMutation(): UseMutationReturnType { const queryClient = useQueryClient(); - const { cid, an } = toValues(classid, assignmentNumber, 1, true); return useMutation({ - mutationFn: async (data) => new GroupController(cid!, an!).createGroup(data), - onSuccess: async () => { - await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid!, an!, true) }); - await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid!, an!, false) }); + mutationFn: async ({ cid, an, data }) => new GroupController(cid, an).createGroup(data), + onSuccess: async (response) => { + const cid = typeof(response.group.class) === 'string' ? response.group.class : response.group.class.id; + const an = typeof(response.group.assignment) === 'number' ? response.group.assignment : response.group.assignment.id; + + await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid, an, true) }); + await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid, an, false) }); }, }); } -export function useDeleteGroupMutation( - classid: MaybeRefOrGetter, - assignmentNumber: MaybeRefOrGetter, -): UseMutationReturnType { +export function useDeleteGroupMutation(): UseMutationReturnType { const queryClient = useQueryClient(); - const { cid, an, gn } = toValues(classid, assignmentNumber, 1, true); return useMutation({ - mutationFn: async (id) => new GroupController(cid!, an!).deleteGroup(id), - onSuccess: async () => { - await queryClient.invalidateQueries({ queryKey: groupQueryKey(cid!, an!, gn!) }); + mutationFn: async ({cid, an, gn}) => new GroupController(cid, an).deleteGroup(gn), + onSuccess: async (response) => { + const cid = typeof(response.group.class) === 'string' ? response.group.class : response.group.class.id; + const an = typeof(response.group.assignment) === 'number' ? response.group.assignment : response.group.assignment.id; + const gn = response.group.groupNumber; - await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid!, an!, true) }); - await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid!, an!, false) }); - - await queryClient.invalidateQueries({ queryKey: groupSubmissionsQueryKey(cid!, an!, gn!, true) }); - await queryClient.invalidateQueries({ queryKey: groupSubmissionsQueryKey(cid!, an!, gn!, false) }); - - await queryClient.invalidateQueries({ queryKey: groupQuestionsQueryKey(cid!, an!, gn!, true) }); - await queryClient.invalidateQueries({ queryKey: groupQuestionsQueryKey(cid!, an!, gn!, false) }); + await invalidateAllGroupKeys(queryClient, cid, an, gn); + await invalidateAllSubmissionKeys(queryClient, cid, an, gn); }, }); } -export function useUpdateGroupMutation( - classid: MaybeRefOrGetter, - assignmentNumber: MaybeRefOrGetter, -): UseMutationReturnType { +export function useUpdateGroupMutation(): UseMutationReturnType}, unknown> { const queryClient = useQueryClient(); - const { cid, an, gn } = toValues(classid, assignmentNumber, 1, true); return useMutation({ - mutationFn: async (data) => new GroupController(cid!, an!).updateGroup(gn!, data), - onSuccess: async () => { - await queryClient.invalidateQueries({ queryKey: groupQueryKey(cid!, an!, gn!) }); + mutationFn: async ({cid, an, gn, data}) => new GroupController(cid, an).updateGroup(gn, data), + onSuccess: async (response) => { + const cid = typeof(response.group.class) === 'string' ? response.group.class : response.group.class.id; + const an = typeof(response.group.assignment) === 'number' ? response.group.assignment : response.group.assignment.id; + const gn = response.group.groupNumber; - await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid!, an!, true) }); - await queryClient.invalidateQueries({ queryKey: groupsQueryKey(cid!, an!, false) }); + await invalidateAllGroupKeys(queryClient, cid, an, gn); }, }); }