feat: klas aanmaken
This commit is contained in:
		
							parent
							
								
									ebead11db3
								
							
						
					
					
						commit
						51b1940d2a
					
				
					 1 changed files with 44 additions and 9 deletions
				
			
		|  | @ -6,8 +6,10 @@ | ||||||
|     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 { TeacherInvitationDTO } from "@dwengo-1/common/interfaces/teacher-invitation"; | ||||||
|     import { useTeacherClassesQuery } from "@/queries/teachers"; |     import { useTeacherClassesQuery } from "@/queries/teachers"; | ||||||
|  |     import { ClassController, type ClassResponse } from "@/controllers/classes"; | ||||||
| 
 | 
 | ||||||
|     const { t } = useI18n(); |     const { t } = useI18n(); | ||||||
|  |     const classController = new ClassController(); | ||||||
| 
 | 
 | ||||||
|     // Username of logged in teacher |     // Username of logged in teacher | ||||||
|     const username = ref<string | undefined>(undefined); |     const username = ref<string | undefined>(undefined); | ||||||
|  | @ -20,7 +22,7 @@ | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     // Fetch all classes of the logged in teacher |     // 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 |     // Empty list when classes are not yet loaded, else the list of classes of the user | ||||||
|     const classes: ComputedRef<ClassDTO[]> = computed(() => { |     const classes: ComputedRef<ClassDTO[]> = computed(() => { | ||||||
|  | @ -72,27 +74,53 @@ | ||||||
|     const nameRules = [ |     const nameRules = [ | ||||||
|         (value: string | undefined): string | boolean => { |         (value: string | undefined): string | boolean => { | ||||||
|             if (!value) return true; |             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"); |             return t("onlyUse"); | ||||||
|         }, |         }, | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|     // Function called when a teacher creates a class |     // Function called when a teacher creates a class | ||||||
|     function createClass(): void { |     async function createClass(): Promise<void> { | ||||||
|         // Check if the class name is valid |         // Check if the class name is valid | ||||||
|         if (className.value && className.value.length > 0 && /^[a-zA-Z0-9_-]+$/.test(className.value)) { |         if (className.value && className.value.length > 0 && /^[a-zA-Z0-9_-]+$/.test(className.value)) { | ||||||
|             //TODO > waiting on updated frontend controllers |             try { | ||||||
|             console.log("created class with name: " + className.value); |                 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 |                 // reload the table with classes | ||||||
|             dialog.value = true; |                 await refetch(); | ||||||
|             code.value = "04c7c759-c41e-4ea9-968a-1e2a987ce0ed"; | 
 | ||||||
|  |             } catch (e: any) { | ||||||
|  |                 showSnackbar(t("wrong"), "error"); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         if (!className.value || className.value === "") { |         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 |     // Show the teacher, copying of the code was a successs | ||||||
|     const copied = ref(false); |     const copied = ref(false); | ||||||
| 
 | 
 | ||||||
|  | @ -283,6 +311,13 @@ | ||||||
|                 </tbody> |                 </tbody> | ||||||
|             </v-table> |             </v-table> | ||||||
|         </div> |         </div> | ||||||
|  |         <v-snackbar | ||||||
|  |             v-model="snackbar.visible" | ||||||
|  |             :color="snackbar.color" | ||||||
|  |             timeout="3000" | ||||||
|  |         > | ||||||
|  |             {{ snackbar.message }} | ||||||
|  |         </v-snackbar> | ||||||
|     </main> |     </main> | ||||||
| </template> | </template> | ||||||
| <style scoped> | <style scoped> | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 laurejablonski
						laurejablonski