feat: accepteer en weiger invitations

This commit is contained in:
laurejablonski 2025-04-19 10:38:28 +02:00
parent 53a0571df2
commit e297f25888

View file

@ -4,12 +4,13 @@
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
import type { TeacherDTO } from "@dwengo-1/common/interfaces/teacher"; import type { TeacherDTO } from "@dwengo-1/common/interfaces/teacher";
import type { ClassDTO } from "@dwengo-1/common/interfaces/class"; import type { ClassDTO } from "@dwengo-1/common/interfaces/class";
import type { TeacherInvitationDTO } from "@dwengo-1/common/interfaces/teacher-invitation"; import type { TeacherInvitationData, TeacherInvitationDTO } from "@dwengo-1/common/interfaces/teacher-invitation";
import { useTeacherClassesQuery } from "@/queries/teachers"; import { useTeacherClassesQuery } from "@/queries/teachers";
import type { ClassesResponse } from "@/controllers/classes"; import type { ClassesResponse } from "@/controllers/classes";
import UsingQueryResult from "@/components/UsingQueryResult.vue"; import UsingQueryResult from "@/components/UsingQueryResult.vue";
import { useClassesQuery, useClassTeacherInvitationsQuery, useCreateClassMutation } from "@/queries/classes"; import { useClassesQuery, useClassTeacherInvitationsQuery, useCreateClassMutation } from "@/queries/classes";
import type { TeacherInvitationsResponse } from "@/controllers/teacher-invitations"; import type { TeacherInvitationsResponse } from "@/controllers/teacher-invitations";
import { useRespondTeacherInvitationMutation, useTeacherInvitationsReceivedQuery, useTeacherInvitationsSentQuery } from "@/queries/teacher-invitations";
const { t } = useI18n(); const { t } = useI18n();
@ -37,7 +38,8 @@
const classesQuery = useTeacherClassesQuery(username, true); const classesQuery = useTeacherClassesQuery(username, true);
const allClassesQuery = useClassesQuery(); const allClassesQuery = useClassesQuery();
const { mutate } = useCreateClassMutation(); const { mutate } = useCreateClassMutation();
const getInvitationsQuery = useClassTeacherInvitationsQuery(username); // TODO: use useTeacherInvitationsReceivedQuery const getInvitationsQuery = useTeacherInvitationsReceivedQuery(username);
const { mutate: respondToInvitation } = useRespondTeacherInvitationMutation();
// Boolean that handles visibility for dialogs // Boolean that handles visibility for dialogs
// Creating a class will generate a popup with the generated code // Creating a class will generate a popup with the generated code
@ -46,14 +48,21 @@
// Code generated when new class was created // Code generated when new class was created
const code = ref<string>(""); const code = ref<string>("");
// Function to handle a accepted invitation request // Function to handle an invitation request
function acceptRequest(): void { function handleInvitation(ti: TeacherInvitationDTO, accepted: boolean): void {
//TODO: avoid linting issues when merging by filling the function const data: TeacherInvitationData = {sender: (ti.sender as TeacherDTO).id, receiver: (ti.receiver as TeacherDTO).id, class: ti.classId, accepted: accepted};
} respondToInvitation(data, {
onSuccess: async () => {
// Function to handle a denied invitation request if (accepted){
function denyRequest(): void { await classesQuery.refetch();
//TODO: avoid linting issues when merging by filling the function }
await getInvitationsQuery.refetch();
},
onError: (e) => {
showSnackbar(t("failed") + ": " + e.message, "error");
}
});
} }
// Teacher should be able to set a displayname when making a class // Teacher should be able to set a displayname when making a class
@ -285,7 +294,7 @@
> >
<td> <td>
{{ {{
(classesResponse.data.classes as ClassDTO[]).filter((c) => c.id == i.classId)[0] (classesResponse.data.classes as ClassDTO[]).filter((c) => c.id == i.classId)[0].displayName
}} }}
</td> </td>
<td> <td>
@ -295,14 +304,14 @@
<div> <div>
<v-btn <v-btn
color="green" color="green"
@click="acceptRequest" @click="handleInvitation(i, true)"
class="mr-2" class="mr-2"
> >
{{ t("accept") }} {{ t("accept") }}
</v-btn> </v-btn>
<v-btn <v-btn
color="red" color="red"
@click="denyRequest" @click="handleInvitation(i, false)"
> >
{{ t("deny") }} {{ t("deny") }}
</v-btn> </v-btn>