diff --git a/aleksis/apps/alsijil/frontend/components/Coursebook.vue b/aleksis/apps/alsijil/frontend/components/Coursebook.vue index 25bf02ca58a0ae11364ac496c3ada608bfa4a13b..f5f3402d6d57f14659a407864baffd40a4d07452 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>