From 051e15b83c2bd20282b700cd5aee0c75014df819 Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Thu, 13 Jun 2024 17:23:13 +0200 Subject: [PATCH] Show extramarks in the coursebook overview --- .../absences/participationStatus.graphql | 1 + .../components/coursebook/coursebook.graphql | 1 + .../coursebook/documentation/LessonNotes.vue | 41 +++++++++++++++ .../components/extra_marks/ExtraMarkChip.vue | 51 +++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 aleksis/apps/alsijil/frontend/components/extra_marks/ExtraMarkChip.vue diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql index aafb3409f..61c486a70 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/participationStatus.graphql @@ -39,6 +39,7 @@ mutation touchDocumentation($documentationId: ID!) { id extraMark { id + showInCoursebook } } notesWithNote { diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql b/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql index f1c4012c3..2505ee24b 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql +++ b/aleksis/apps/alsijil/frontend/components/coursebook/coursebook.graphql @@ -83,6 +83,7 @@ query documentationsForCoursebook( id extraMark { id + showInCoursebook } } notesWithNote { diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue index bc0da4a74..641e346b6 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/documentation/LessonNotes.vue @@ -1,5 +1,6 @@ <script setup> import AbsenceReasonChip from "aleksis.apps.kolego/components/AbsenceReasonChip.vue"; +import ExtraMarkChip from "../../extra_marks/ExtraMarkChip.vue"; </script> <template> @@ -35,6 +36,32 @@ import AbsenceReasonChip from "aleksis.apps.kolego/components/AbsenceReasonChip. </template> </absence-reason-chip> + <extra-mark-chip + v-for="[markId, [mark, ...participations]] in Object.entries(extraMarkChips)" + :key="'extra-mark-' + markId" + :extra-mark="mark" + dense + > + <template #append> + <span + >: + <span> + {{ + participations + .slice(0, 5) + .map((participation) => participation.person.firstName) + .join(", ") + }} + </span> + <span v-if="participations.length > 5"> + <!-- eslint-disable @intlify/vue-i18n/no-raw-text --> + +{{ participations.length - 5 }} + <!-- eslint-enable @intlify/vue-i18n/no-raw-text --> + </span> + </span> + </template> + </extra-mark-chip> + <manage-students-trigger v-bind="documentationPartProps" /> </div> </template> @@ -65,6 +92,20 @@ export default { ({ absenceReason }) => absenceReason.id, ); }, + extraMarkChips() { + return this.documentation.participations.reduce((value, p) => { + p.notesWithExtraMark.forEach(({ extraMark }) => { + if (extraMark.showInCoursebook) { + if (value[extraMark.id]) { + value[extraMark.id].push(p); + } else { + value[extraMark.id] = [this.extraMarks.find(e => e.id === extraMark.id), p]; + } + } + }); + return value; + }, {}); + }, }, }; </script> diff --git a/aleksis/apps/alsijil/frontend/components/extra_marks/ExtraMarkChip.vue b/aleksis/apps/alsijil/frontend/components/extra_marks/ExtraMarkChip.vue new file mode 100644 index 000000000..28bdc85d5 --- /dev/null +++ b/aleksis/apps/alsijil/frontend/components/extra_marks/ExtraMarkChip.vue @@ -0,0 +1,51 @@ +<script> +import CounterChip from "aleksis.core/components/generic/chips/CounterChip.vue"; + +export default { + name: "ExtraMarkChip", + components: { CounterChip }, + props: { + extraMark: { + type: Object, + required: true, + }, + short: { + type: Boolean, + required: false, + default: false, + }, + loading: { + type: Boolean, + required: false, + default: false, + }, + }, + extends: CounterChip, + computed: { + text() { + return this.short + ? this.extraMark.shortName + : this.extraMark.name; + }, + }, +}; +</script> + +<template> + <counter-chip + :color="extraMark.colourBg" + :text-color="extraMark.colourFg" + :value="extraMark.id" + :count="count" + :outlined="false" + v-bind="$attrs" + v-on="$listeners" + > + <slot name="prepend" /> + {{ text }} + <slot name="append" /> + <v-avatar right v-if="loading"> + <v-progress-circular indeterminate :size="16" :width="2" /> + </v-avatar> + </counter-chip> +</template> -- GitLab