diff --git a/frontend/src/queries/classes.ts b/frontend/src/queries/classes.ts index 1ecc0bce..4faf5b19 100644 --- a/frontend/src/queries/classes.ts +++ b/frontend/src/queries/classes.ts @@ -7,22 +7,22 @@ import { computed, toValue, type MaybeRefOrGetter } from "vue"; const classController = new ClassController(); /* Query cache keys */ -function classesQueryKey() { - return ["classes"]; +function classesQueryKey(full: boolean) { + return ["classes", full]; } function classQueryKey(classid: string) { return ["class", classid]; } -function classStudentsKey(classid: string) { - return ["class-students", classid]; +function classStudentsKey(classid: string, full: boolean) { + return ["class-students", classid, full]; } -function classTeachersKey(classid: string) { - return ["class-teachers", classid]; +function classTeachersKey(classid: string, full: boolean) { + return ["class-teachers", classid, full]; } -function classTeacherInvitationsKey(classid: string) { - return ["class-teacher-invitations", classid]; +function classTeacherInvitationsKey(classid: string, full: boolean) { + return ["class-teacher-invitations", classid, full]; } -function classAssignmentsKey(classid: string) { +function classAssignmentsKey(classid: string, full: boolean) { return ["class-assignments", classid]; } @@ -30,16 +30,18 @@ function classAssignmentsKey(classid: string) { async function invalidateAll(classid: string, queryClient: QueryClient): Promise { await queryClient.invalidateQueries({ queryKey: ["classes"] }); await queryClient.invalidateQueries({ queryKey: classQueryKey(classid) }); - await queryClient.invalidateQueries({ queryKey: classStudentsKey(classid) }); - await queryClient.invalidateQueries({ queryKey: classTeachersKey(classid) }); - await queryClient.invalidateQueries({ queryKey: classAssignmentsKey(classid) }); - await queryClient.invalidateQueries({ queryKey: classTeacherInvitationsKey(classid) }); + for (let v of [true, false]) { + await queryClient.invalidateQueries({ queryKey: classStudentsKey(classid, v) }); + await queryClient.invalidateQueries({ queryKey: classTeachersKey(classid, v) }); + await queryClient.invalidateQueries({ queryKey: classAssignmentsKey(classid, v) }); + await queryClient.invalidateQueries({ queryKey: classTeacherInvitationsKey(classid, v) }); + } } /* Queries */ export function useClassesQuery(full: MaybeRefOrGetter = true): UseQueryReturnType { return useQuery({ - queryKey: computed(() => (classesQueryKey())), + queryKey: computed(() => (classesQueryKey(toValue(full)))), queryFn: async () => classController.getAll(toValue(full)), }); } @@ -60,7 +62,8 @@ export function useCreateClassMutation(): UseMutationReturnType classController.createClass(data), onSuccess: async () => { - await queryClient.invalidateQueries({ queryKey: ["classes"] }); + await queryClient.invalidateQueries({ queryKey: classesQueryKey(true) }); + await queryClient.invalidateQueries({ queryKey: classesQueryKey(false) }); }, }); } @@ -92,7 +95,7 @@ export function useClassStudentsQuery( full: MaybeRefOrGetter = true ): UseQueryReturnType { return useQuery({ - queryKey: computed(() => classStudentsKey(toValue(id)!)), + queryKey: computed(() => classStudentsKey(toValue(id)!, toValue(full))), queryFn: async () => classController.getStudents(toValue(id)!, toValue(full)!), enabled: () => Boolean(toValue(id)), }) @@ -105,7 +108,8 @@ export function useClassAddStudentMutation(): UseMutationReturnType classController.addStudent(id, username), onSuccess: async (data) => { await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); - await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id) }); + await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, true) }); + await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, false) }); }, }); } @@ -117,7 +121,8 @@ export function useClassDeleteStudentMutation(): UseMutationReturnType classController.deleteStudent(id, username), onSuccess: async (data) => { await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); - await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id) }); + await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, true) }); + await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id, false) }); }, }); } @@ -127,7 +132,7 @@ export function useClassTeachersQuery( full: MaybeRefOrGetter = true ): UseQueryReturnType { return useQuery({ - queryKey: computed(() => classTeachersKey(toValue(id)!)), + queryKey: computed(() => classTeachersKey(toValue(id)!, toValue(full))), queryFn: async () => classController.getTeachers(toValue(id)!, toValue(full)!), enabled: () => Boolean(toValue(id)), }); @@ -140,7 +145,8 @@ export function useClassAddTeacherMutation(): UseMutationReturnType classController.addTeacher(id, username), onSuccess: async (data) => { await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); - await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id) }); + await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, true) }); + await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, false) }); }, }); } @@ -152,7 +158,8 @@ export function useClassDeleteTeacherMutation(): UseMutationReturnType classController.deleteTeacher(id, username), onSuccess: async (data) => { await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); - await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id) }); + await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, true) }); + await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id, false) }); }, }); } @@ -162,7 +169,7 @@ export function useClassTeacherInvitationsQuery( full: MaybeRefOrGetter = true ): UseQueryReturnType { return useQuery({ - queryKey: computed(() => classTeacherInvitationsKey(toValue(id)!)), + queryKey: computed(() => classTeacherInvitationsKey(toValue(id)!, toValue(full))), queryFn: async () => classController.getTeacherInvitations(toValue(id)!, toValue(full)!), enabled: () => Boolean(toValue(id)), }); @@ -173,7 +180,7 @@ export function useClassAssignmentsQuery( full: MaybeRefOrGetter = true ): UseQueryReturnType { return useQuery({ - queryKey: computed(() => classAssignmentsKey(toValue(id)!)), + queryKey: computed(() => classAssignmentsKey(toValue(id)!, toValue(full))), queryFn: async () => classController.getAssignments(toValue(id)!, toValue(full)!), enabled: () => Boolean(toValue(id)), });