From abe923b2e4c15dc41d39d49922014eda4ed90d16 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 6 Sep 2023 16:47:38 +0200 Subject: [PATCH 1/3] Fix bug so that you can select different attendance courses --- .../AttendanceCheckPage.vue | 54 +++++++++++-------- .../pages/cockpit/cockpitPage/CockpitPage.vue | 2 +- client/src/router/index.ts | 2 +- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/client/src/pages/cockpit/attendanceCheckPage/AttendanceCheckPage.vue b/client/src/pages/cockpit/attendanceCheckPage/AttendanceCheckPage.vue index 2a17c732..fdd6cbc3 100644 --- a/client/src/pages/cockpit/attendanceCheckPage/AttendanceCheckPage.vue +++ b/client/src/pages/cockpit/attendanceCheckPage/AttendanceCheckPage.vue @@ -5,14 +5,15 @@ import ItPersonRow from "@/components/ui/ItPersonRow.vue"; import { useCurrentCourseSession } from "@/composables"; import type { AttendanceUserStatus } from "@/gql/graphql"; import { ATTENDANCE_CHECK_MUTATION } from "@/graphql/mutations"; -import { ATTENDANCE_CHECK_QUERY } from "@/graphql/queries"; import { useCockpitStore } from "@/stores/cockpit"; import type { DropdownSelectable } from "@/types"; -import { useMutation, useQuery } from "@urql/vue"; +import { useMutation } from "@urql/vue"; import dayjs from "dayjs"; import log from "loglevel"; -import { computed, reactive, watch } from "vue"; +import { computed, onMounted, reactive, watch } from "vue"; import { useTranslation } from "i18next-vue"; +import { ATTENDANCE_CHECK_QUERY } from "@/graphql/queries"; +import { graphqlClient } from "@/graphql/client"; const { t } = useTranslation(); const cockpitStore = useCockpitStore(); @@ -35,10 +36,6 @@ const presenceCoursesDropdownOptions = computed(() => { ); }); -const attendanceCourseSelected = computed( - () => state.attendanceCourseSelected.id != "-1" -); - const state = reactive({ userPresence: new Map(), attendanceCourseSelected: presenceCoursesDropdownOptions.value[0], @@ -46,13 +43,11 @@ const state = reactive({ attendanceSaved: false, }); -const attendanceQuery = useQuery({ - query: ATTENDANCE_CHECK_QUERY, - pause: true, - variables: { - courseSessionId: state.attendanceCourseSelected.id.toString(), - }, -}); +function resetState() { + state.userPresence = new Map(); + state.disclaimerConfirmed = false; + state.attendanceSaved = false; +} const onSubmit = async () => { type UserPresence = { @@ -79,9 +74,19 @@ const onSubmit = async () => { }; const loadAttendanceData = async () => { - const res = await attendanceQuery.executeQuery(); + resetState(); + // with changing variables `useQuery` does not seem to work correctly + const res = await graphqlClient.query( + ATTENDANCE_CHECK_QUERY, + { + courseSessionId: state.attendanceCourseSelected.id.toString(), + }, + { + requestPolicy: "network-only", + } + ); const attendanceUserList = - res?.data?.value?.course_session_attendance_course?.attendance_user_list ?? []; + res.data?.course_session_attendance_course?.attendance_user_list ?? []; for (const user of attendanceUserList) { if (!user) continue; state.userPresence.set(user.user_id.toString(), user.status === "PRESENT"); @@ -91,15 +96,23 @@ const loadAttendanceData = async () => { } }; -loadAttendanceData(); -watch(state.attendanceCourseSelected, () => { +onMounted(() => { + log.debug("AttendanceCheckPage mounted"); loadAttendanceData(); }); + +watch( + () => state.attendanceCourseSelected, + () => { + log.debug("attendanceCourseSelected changed", state.attendanceCourseSelected); + loadAttendanceData(); + } +);