From f3eb9b5e6d06deeff696954f9ad7519c90ea573d Mon Sep 17 00:00:00 2001
From: Michael Bauer <michael-bauer@posteo.de>
Date: Thu, 13 Jun 2024 17:21:07 +0200
Subject: [PATCH] Implement absence-creation-summary list

---
 .../absences/AbsenceCreationSummary.vue       | 51 +++++++++++++++++--
 1 file changed, 48 insertions(+), 3 deletions(-)

diff --git a/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationSummary.vue b/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationSummary.vue
index 4d981cf0a..8653abc2d 100644
--- a/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationSummary.vue
+++ b/aleksis/apps/alsijil/frontend/components/coursebook/absences/AbsenceCreationSummary.vue
@@ -1,11 +1,16 @@
 <template>
-  <!-- TODO: Hide header -->
+  <!-- MAYBE introduce a minimal variant of CRUDIterator -->
+  <!--       with most features disabled for this list usecase -->
   <c-r-u-d-iterator
+    i18n-key="TODO"
     :gql-query="gqlQuery"
     :gql-additional-query-args="gqlArgs"
+    :enable-search="false"
     :enable-create="false"
     :enable-edit="false"
     :elevated="false"
+    disable-pagination
+    hide-default-footer
     >
     <template #default="{ items }">
       <v-expansion-panels>
@@ -14,10 +19,42 @@
           :key="person.id"
         >
           <v-expansion-panel-header>
-            {{ persons.find((p) => p.id === person.id) }}
+            <div>
+              {{ persons.find((p) => p.id === person.id).fullName }}
+            </div>
+            <v-spacer />
+            <div>
+              <!-- TODO i18 Stunden -->
+              {{ person.lessons.length }} Stunden
+            </div>
           </v-expansion-panel-header>
           <v-expansion-panel-content>
-            TODO
+            <v-divider />
+            <v-list-item
+              v-for="lesson in person.lessons"
+              class="px-0"
+            >
+              <!-- TODO: We should extract this display & share it -->
+              <time  :datetime="lesson.datetimeStart" class="pr-2 text-no-wrap">
+                {{ $d(toDateTime(lesson.datetimeStart), "shortWithWeekday") }}
+              </time>
+              <span>(</span>
+              <time  :datetime="lesson.datetimeStart" class="text-no-wrap">
+                {{ $d(toDateTime(lesson.datetimeStart), "shortTime") }}
+              </time>
+              <span>-</span>
+              <time  :datetime="lesson.datetimeEnd" class="text-no-wrap">
+                {{ $d(toDateTime(lesson.datetimeEnd), "shortTime") }}
+              </time>
+              <span>)</span>
+              <v-spacer />
+              <div class="pr-2">
+                {{ lesson.course.name }}
+              </div>
+              <subject-chip
+                :subject="lesson.subject"
+              />
+            </v-list-item>
           </v-expansion-panel-content>
         </v-expansion-panel>
       </v-expansion-panels>
@@ -27,12 +64,15 @@
 
 <script>
 import CRUDIterator from "aleksis.core/components/generic/CRUDIterator.vue";
+import SubjectChip from "aleksis.apps.cursus/components/SubjectChip.vue";
 import { lessonsForPersons } from "./absenceCreation.graphql";
+import { DateTime } from "luxon";
 
 export default {
   name: "AbsenceCreationSummary",
   components: {
     CRUDIterator,
+    SubjectChip,
   },
   props: {
     persons: {
@@ -62,5 +102,10 @@ export default {
       };
     },
   },
+  methods: {
+    toDateTime(dateString) {
+      return DateTime.fromISO(dateString);
+    },
+  },
 };
 </script>
-- 
GitLab