From 53db9c1969e58fcf9a774b73dcd29edee55a6e1c Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Sat, 30 Nov 2024 19:12:08 +0100 Subject: [PATCH] Use expansion panel for statistics list --- .../statistics/StatisticsForPersonPage.vue | 189 ++++++++++-------- 1 file changed, 109 insertions(+), 80 deletions(-) diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue b/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue index c5a8ed51e..cd968ba43 100644 --- a/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue +++ b/aleksis/apps/alsijil/frontend/components/coursebook/statistics/StatisticsForPersonPage.vue @@ -41,87 +41,113 @@ </v-btn> </template> <template #default="{ items }"> - <v-list> - <v-list-item v-for="item in items" :key="item.id" ripple> - <v-list-item-content> - <v-list-item-title> - <!-- date & timeslot --> - <time - :datetime="item.relatedDocumentation.datetimeStart" - class="text-no-wrap" - > - {{ - $d( - $parseISODate( - item.relatedDocumentation.datetimeStart, - ), - "short", - ) - }} - </time> + <v-expansion-panels focusable> + <v-expansion-panel + v-for="item in items" + :key="item.id" + ripple + :readonly="!item.canEdit" + > + <v-expansion-panel-header + :hide-actions="!item.canEdit" + disable-icon-rotate + > + <template #actions> + <v-icon> $edit </v-icon> + </template> + <v-row class="mr-4"> + <v-col cols="12" md="6" class="pa-0"> + <v-list-item-content> + <v-list-item-title> + <!-- date & timeslot --> + <time + :datetime="item.relatedDocumentation.datetimeStart" + class="text-no-wrap" + > + {{ + $d( + $parseISODate( + item.relatedDocumentation.datetimeStart, + ), + "short", + ) + }} + </time> - <time - :datetime="item.relatedDocumentation.datetimeStart" - class="text-no-wrap" - > - {{ - $d( - $parseISODate( - item.relatedDocumentation.datetimeStart, - ), - "shortTime", - ) - }} - </time> - <span>-</span> - <time - :datetime="item.relatedDocumentation.datetimeEnd" - class="text-no-wrap" - > - {{ - $d( - $parseISODate(item.relatedDocumentation.datetimeEnd), - "shortTime", - ) - }} - </time> - </v-list-item-title> - <v-list-item-subtitle class="overflow-scroll"> - <!-- teacher --> - <person-chip - v-for="teacher in item.relatedDocumentation.teachers" - :key="teacher.id" - :person="teacher" - no-link - small - /> - <!-- group --> - <span> - {{ item.groupShortName }} - </span> - <!-- subject --> - <subject-chip - :subject="item.relatedDocumentation.subject" - small - /> - </v-list-item-subtitle> - </v-list-item-content> - <v-list-item-action> - <!-- chips: absences & extraMarks --> - <absence-reason-chip - v-if="item.absenceReason" - :absence-reason="item.absenceReason" - /> - <extra-mark-chip - v-if="item.extraMark" - :extra-mark="item.extraMark" - /> - <div v-if="item.note"> - {{ item.note }} - </div> - </v-list-item-action> - </v-list-item> - </v-list> + <time + :datetime="item.relatedDocumentation.datetimeStart" + class="text-no-wrap" + > + {{ + $d( + $parseISODate( + item.relatedDocumentation.datetimeStart, + ), + "shortTime", + ) + }} + </time> + <span>-</span> + <time + :datetime="item.relatedDocumentation.datetimeEnd" + class="text-no-wrap" + > + {{ + $d( + $parseISODate( + item.relatedDocumentation.datetimeEnd, + ), + "shortTime", + ) + }} + </time> + </v-list-item-title> + <v-list-item-subtitle class="overflow-scroll"> + <!-- teacher --> + <person-chip + v-for="teacher in item.relatedDocumentation + .teachers" + :key="teacher.id" + :person="teacher" + no-link + small + /> + <!-- group --> + <span> + {{ item.groupShortName }} + </span> + <!-- subject --> + <subject-chip + :subject="item.relatedDocumentation.subject" + small + /> + </v-list-item-subtitle> + </v-list-item-content> + </v-col> + <v-col cols="12" md="6" class="pa-0"> + <v-list-item-action class="full-width justify-md-end"> + <!-- chips: absences & extraMarks --> + <absence-reason-chip + v-if="item.absenceReason" + :absence-reason="item.absenceReason" + /> + <extra-mark-chip + v-if="item.extraMark" + :extra-mark="item.extraMark" + /> + <personal-note-chip + v-if="item.note" + :note="{ note: item.note }" + /> + </v-list-item-action> + </v-col> + </v-row> + </v-expansion-panel-header> + <v-expansion-panel-content> + <!-- FIXME --> + </v-expansion-panel-content> + </v-expansion-panel> + </v-expansion-panels> <v-divider></v-divider> </template> </c-r-u-d-iterator> @@ -129,6 +155,7 @@ <statistics-for-person-card v-if="!$vuetify.breakpoint.mobile" class="flex-shrink-1" + style="min-width: 15vw" :compact="false" :person="{ id: personId }" /> @@ -171,10 +198,12 @@ import { } from "./statistics.graphql"; import ExtraMarkChip from "../../extra_marks/ExtraMarkChip.vue"; import { MODE } from "./modes.js"; +import PersonalNoteChip from "../personal_notes/PersonalNoteChip.vue"; export default { name: "StatisticsForPersonPage", components: { + PersonalNoteChip, ActiveSchoolTermSelect, ExtraMarkChip, AbsenceReasonChip, -- GitLab