From 4023ab7deeca78f05eb4e15e168b165c8d9a8778 Mon Sep 17 00:00:00 2001
From: Michael Bauer <michael-bauer@posteo.de>
Date: Fri, 26 Jan 2024 00:06:40 +0100
Subject: [PATCH] Group documentations by day and show in coursebook frontend

---
 .../frontend/components/Coursebook.vue        | 43 +++++++++++++++++--
 1 file changed, 39 insertions(+), 4 deletions(-)

diff --git a/aleksis/apps/alsijil/frontend/components/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/Coursebook.vue
index 25bf02ca5..f5f3402d6 100644
--- a/aleksis/apps/alsijil/frontend/components/Coursebook.vue
+++ b/aleksis/apps/alsijil/frontend/components/Coursebook.vue
@@ -4,15 +4,34 @@
     :gql-query="gqlQuery"
     :gql-additional-query-args="gqlQueryArgs"
     >
-    <template #default="{ items, groupedItems }">
-      {{ items }}
+    <template #default="{ items }">
+      <v-card class="my-6 mx-3">
+        <v-list-item
+          v-for="day in groupDocsByDay(items)"
+          two-line
+        >
+          <v-list-item-content>
+            <v-list-item-title>{{ day[0] }}</v-list-item-title>
+            <v-list>
+              <!-- I know slice copies the array. But show me something better. -->
+              <v-list-item v-for="doc in day.slice(1)">
+                <v-card class="my-2">
+                  <!-- Insert subcomponents here. -->
+                  <v-card-text>{{ doc.id }}</v-card-text>
+                </v-card>
+              </v-list-item>
+            </v-list>
+          </v-list-item-content>
+        </v-list-item>
+      </v-card>
     </template>
   </c-r-u-d-iterator>
 </template>
 
 <script>
-import CRUDIterator from "aleksis.core/components/generic/CRUDIterator.vue"
-import gqlDocumentationsForCoursebook from "./coursebook.graphql"
+import CRUDIterator from "aleksis.core/components/generic/CRUDIterator.vue";
+import gqlDocumentationsForCoursebook from "./coursebook.graphql";
+import { DateTime } from "luxon";
 
 export default {
   name: "Coursebook",
@@ -54,5 +73,21 @@ export default {
       };
     },
   },
+  methods: {
+    groupDocsByDay(docs) {
+      const byDay = docs.reduce(
+        (byDay, doc) => {
+          // This works with dummy. Does actual doc have dateStart instead?
+          const day = DateTime.fromISO(doc.datetimeStart).startOf('day');
+          byDay[day] ??= [];
+          byDay[day].push(doc);
+          return byDay;
+        },
+        {}
+      );
+
+      return Object.keys(byDay).sort().map(key => [key, ...byDay[key]]);
+    },
+  },
 };
 </script>
-- 
GitLab