From 51b1940d2a9e8cf371c138827d5fc7c1e7d8f6f0 Mon Sep 17 00:00:00 2001 From: laurejablonski Date: Sun, 6 Apr 2025 15:04:21 +0200 Subject: [PATCH] feat: klas aanmaken --- frontend/src/views/classes/TeacherClasses.vue | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/frontend/src/views/classes/TeacherClasses.vue b/frontend/src/views/classes/TeacherClasses.vue index 7cbe6cca..4b6fddbf 100644 --- a/frontend/src/views/classes/TeacherClasses.vue +++ b/frontend/src/views/classes/TeacherClasses.vue @@ -6,8 +6,10 @@ import type { ClassDTO } from "@dwengo-1/common/interfaces/class"; import type { TeacherInvitationDTO } from "@dwengo-1/common/interfaces/teacher-invitation"; import { useTeacherClassesQuery } from "@/queries/teachers"; + import { ClassController, type ClassResponse } from "@/controllers/classes"; const { t } = useI18n(); + const classController = new ClassController(); // Username of logged in teacher const username = ref(undefined); @@ -20,7 +22,7 @@ }); // Fetch all classes of the logged in teacher - const { data: classesResponse, isLoading, error } = useTeacherClassesQuery(username, true); + const { data: classesResponse, isLoading, error, refetch } = useTeacherClassesQuery(username, true); // Empty list when classes are not yet loaded, else the list of classes of the user const classes: ComputedRef = computed(() => { @@ -72,27 +74,53 @@ const nameRules = [ (value: string | undefined): string | boolean => { if (!value) return true; - if (value && (/^[a-zA-Z0-9_-]+$/.test(value))) return true; + if (value && /^[a-zA-Z0-9_-]+$/.test(value)) return true; return t("onlyUse"); }, ]; // Function called when a teacher creates a class - function createClass(): void { + async function createClass(): Promise { // Check if the class name is valid if (className.value && className.value.length > 0 && /^[a-zA-Z0-9_-]+$/.test(className.value)) { - //TODO > waiting on updated frontend controllers - console.log("created class with name: " + className.value); + try { + const classDto: ClassDTO = { + id: "", + displayName: className.value, + teachers: [username.value!], + students: [], + joinRequests: [], + }; + const classResponse : ClassResponse = await classController.createClass(classDto); + const createdClass : ClassDTO = classResponse.cls; + code.value = createdClass.id; + dialog.value = true; + showSnackbar(t("created"), "success"); - // Show the generated code to share with the class - dialog.value = true; - code.value = "04c7c759-c41e-4ea9-968a-1e2a987ce0ed"; + // reload the table with classes + await refetch(); + + } catch (e: any) { + showSnackbar(t("wrong"), "error"); + } } if (!className.value || className.value === "") { - alert("classname should not be empty") + alert("classname should not be empty"); } } + const snackbar = ref({ + visible: false, + message: "", + color: "success", + }); + + function showSnackbar(message: string, color: string): void { + snackbar.value.message = message; + snackbar.value.color = color; + snackbar.value.visible = true; + } + // Show the teacher, copying of the code was a successs const copied = ref(false); @@ -283,6 +311,13 @@ + + {{ snackbar.message }} +