feat: student kan nu ook de leerkrachten bij zijn klassen zien
This commit is contained in:
parent
a5e82858ab
commit
39cfcab179
1 changed files with 48 additions and 3 deletions
|
@ -7,9 +7,12 @@
|
||||||
import { useCreateJoinRequestMutation, useStudentClassesQuery } from "@/queries/students";
|
import { useCreateJoinRequestMutation, useStudentClassesQuery } from "@/queries/students";
|
||||||
import type { StudentDTO } from "@dwengo-1/common/interfaces/student";
|
import type { StudentDTO } from "@dwengo-1/common/interfaces/student";
|
||||||
import { StudentController } from "@/controllers/students";
|
import { StudentController } from "@/controllers/students";
|
||||||
|
import { type TeacherDTO } from "@dwengo-1/common/interfaces/teacher";
|
||||||
|
import { TeacherController } from "@/controllers/teachers";
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const studentController: StudentController = new StudentController();
|
const studentController: StudentController = new StudentController();
|
||||||
|
const teacherController: TeacherController = new TeacherController();
|
||||||
|
|
||||||
// Username of logged in student
|
// Username of logged in student
|
||||||
const username = ref<string | undefined>(undefined);
|
const username = ref<string | undefined>(undefined);
|
||||||
|
@ -40,16 +43,19 @@
|
||||||
// Students of selected class are shown when logged in student presses on the member count
|
// Students of selected class are shown when logged in student presses on the member count
|
||||||
const selectedClass = ref<ClassDTO | null>(null);
|
const selectedClass = ref<ClassDTO | null>(null);
|
||||||
const students = ref<StudentDTO[]>([]);
|
const students = ref<StudentDTO[]>([]);
|
||||||
|
const teachers = ref<TeacherDTO[]>([]);
|
||||||
|
const getStudents = ref(false);
|
||||||
|
|
||||||
// Boolean that handles visibility for dialogs
|
// Boolean that handles visibility for dialogs
|
||||||
// Clicking on membercount will show a dialog with all members
|
// Clicking on membercount will show a dialog with all members
|
||||||
const dialog = ref(false);
|
const dialog = ref(false);
|
||||||
|
|
||||||
// Function to display all members of a class in a dialog
|
// Function to display all members of a class in a dialog
|
||||||
async function openDialog(c: ClassDTO): Promise<void> {
|
async function openStudentDialog(c: ClassDTO): Promise<void> {
|
||||||
selectedClass.value = c;
|
selectedClass.value = c;
|
||||||
|
|
||||||
// Clear previous value
|
// Clear previous value
|
||||||
|
getStudents.value = true;
|
||||||
students.value = [];
|
students.value = [];
|
||||||
dialog.value = true;
|
dialog.value = true;
|
||||||
|
|
||||||
|
@ -69,6 +75,30 @@
|
||||||
students.value = studentDTOs.filter(Boolean) as StudentDTO[];
|
students.value = studentDTOs.filter(Boolean) as StudentDTO[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function openTeacherDialog(c: ClassDTO): Promise<void> {
|
||||||
|
selectedClass.value = c;
|
||||||
|
|
||||||
|
// clear previous value
|
||||||
|
getStudents.value = false;
|
||||||
|
teachers.value = [];
|
||||||
|
dialog.value = true;
|
||||||
|
|
||||||
|
// Fetch names of teachers
|
||||||
|
const teacherDTOs: (TeacherDTO | null)[] = await Promise.all(
|
||||||
|
c.teachers.map(async (uid) => {
|
||||||
|
try {
|
||||||
|
const res = await teacherController.getByUsername(uid);
|
||||||
|
console.log(res);
|
||||||
|
return res.teacher;
|
||||||
|
} catch (_) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
teachers.value = teacherDTOs.filter(Boolean) as TeacherDTO[];
|
||||||
|
}
|
||||||
|
|
||||||
// Hold the code a student gives in to join a class
|
// Hold the code a student gives in to join a class
|
||||||
const code = ref<string>("");
|
const code = ref<string>("");
|
||||||
|
|
||||||
|
@ -158,6 +188,7 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="header">{{ t("classes") }}</th>
|
<th class="header">{{ t("classes") }}</th>
|
||||||
|
<th class="header">{{ t("teachers") }}</th>
|
||||||
<th class="header">{{ t("members") }}</th>
|
<th class="header">{{ t("members") }}</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -169,7 +200,13 @@
|
||||||
<td>{{ c.displayName }}</td>
|
<td>{{ c.displayName }}</td>
|
||||||
<td
|
<td
|
||||||
class="link"
|
class="link"
|
||||||
@click="openDialog(c)"
|
@click="openTeacherDialog(c)"
|
||||||
|
>
|
||||||
|
{{ c.teachers.length }}
|
||||||
|
</td>
|
||||||
|
<td
|
||||||
|
class="link"
|
||||||
|
@click="openStudentDialog(c)"
|
||||||
>
|
>
|
||||||
{{ c.students.length }}
|
{{ c.students.length }}
|
||||||
</td>
|
</td>
|
||||||
|
@ -187,7 +224,7 @@
|
||||||
<v-card>
|
<v-card>
|
||||||
<v-card-title> {{ selectedClass?.displayName }} </v-card-title>
|
<v-card-title> {{ selectedClass?.displayName }} </v-card-title>
|
||||||
<v-card-text>
|
<v-card-text>
|
||||||
<ul>
|
<ul v-if="getStudents">
|
||||||
<li
|
<li
|
||||||
v-for="student in students"
|
v-for="student in students"
|
||||||
:key="student.username"
|
:key="student.username"
|
||||||
|
@ -195,6 +232,14 @@
|
||||||
{{ student.firstName + " " + student.lastName }}
|
{{ student.firstName + " " + student.lastName }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<ul v-else>
|
||||||
|
<li
|
||||||
|
v-for="teacher in teachers"
|
||||||
|
:key="teacher.username"
|
||||||
|
>
|
||||||
|
{{ teacher.firstName + " " + teacher.lastName }}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
<v-card-actions>
|
<v-card-actions>
|
||||||
<v-btn
|
<v-btn
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue