diff --git a/frontend/src/queries/classes.ts b/frontend/src/queries/classes.ts index 6aca5e7f..30ca7bee 100644 --- a/frontend/src/queries/classes.ts +++ b/frontend/src/queries/classes.ts @@ -6,6 +6,7 @@ import { computed, toValue, type MaybeRefOrGetter } from "vue"; const classController = new ClassController(); +/* Query cache keys */ function classesQueryKey() { return ["classes"]; } @@ -25,6 +26,7 @@ function classAssignmentsKey(classid: string) { return ["class-assignments", classid]; } +/* Function to invalidate all caches with certain class id */ async function invalidateAll(classid: string, queryClient: QueryClient): Promise { await queryClient.invalidateQueries({ queryKey: ["classes"] }); await queryClient.invalidateQueries({ queryKey: classQueryKey(classid) }); @@ -34,6 +36,7 @@ async function invalidateAll(classid: string, queryClient: QueryClient): Promise await queryClient.invalidateQueries({ queryKey: classTeacherInvitationsKey(classid) }); } +/* Queries */ export function useClassesQuery(full: MaybeRefOrGetter = true): UseQueryReturnType { return useQuery({ queryKey: computed(() => (classesQueryKey())), @@ -95,6 +98,18 @@ export function useClassStudentsQuery( }) } +export function useCreateClassStudentMutation(): UseMutationReturnType { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async ({ id, username }) => classController.addStudent(id, username), + onSuccess: async (data) => { + await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); + await queryClient.invalidateQueries({ queryKey: classStudentsKey(data.class.id) }); + }, + }); +} + export function useClassTeachersQuery( id: MaybeRefOrGetter, full: MaybeRefOrGetter = true @@ -106,6 +121,18 @@ export function useClassTeachersQuery( }); } +export function useCreateClassTeacherMutation(): UseMutationReturnType { + const queryClient = useQueryClient(); + + return useMutation({ + mutationFn: async ({ id, username }) => classController.addTeacher(id, username), + onSuccess: async (data) => { + await queryClient.invalidateQueries({ queryKey: classQueryKey(data.class.id) }); + await queryClient.invalidateQueries({ queryKey: classTeachersKey(data.class.id) }); + }, + }); +} + export function useClassTeacherInvitationsQuery( id: MaybeRefOrGetter, full: MaybeRefOrGetter = true