From c417462e7cb6a2ba909360523fb324d4625d3ae0 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Fri, 25 Aug 2023 10:58:16 +0200
Subject: [PATCH] Directly show the first event in the calendar

---
 .../frontend/components/calendar/Calendar.vue | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/aleksis/core/frontend/components/calendar/Calendar.vue b/aleksis/core/frontend/components/calendar/Calendar.vue
index 1cff82c35..188c3e522 100644
--- a/aleksis/core/frontend/components/calendar/Calendar.vue
+++ b/aleksis/core/frontend/components/calendar/Calendar.vue
@@ -15,6 +15,8 @@
         :events="events"
         :type="internalCalendarType"
         :event_color="getColorForEvent"
+        :first-time="firstTime"
+        interval-height="60"
         @click:date="viewDay"
         @click:day="viewDay"
         @click:more="viewDay"
@@ -89,6 +91,8 @@ export default {
         start: null,
         end: null,
       },
+
+      firstTime: 1,
     };
   },
   emits: ["changeCalendarType", "changeCalendarFocus", "selectEvent"],
@@ -171,10 +175,17 @@ export default {
     },
     range: {
       handler() {
+        this.updateMinTime();
         this.fetch();
       },
       deep: true,
     },
+    events: {
+      handler() {
+        this.updateMinTime();
+      },
+      deep: true,
+    },
     internalCalendarType(val) {
       this.$emit("changeCalendarType", val);
     },
@@ -242,6 +253,24 @@ export default {
       }
       return GenericCalendarFeedEventBar;
     },
+    updateMinTime() {
+      // Set the minimum time of the calendar
+      const visibileEvents = this.events.filter(
+        (event) =>
+          event.end >= new Date(this.range.start.date) &&
+          event.start <= new Date(this.range.end.date)
+      );
+      const minuteTimes = visibileEvents.map((event) =>
+        this.getMinutesAfterMidnight(event.start)
+      );
+
+      const minTime =
+        minuteTimes.length > 0 ? Math.min.apply(Math, minuteTimes) : 0;
+      this.firstTime = minTime;
+    },
+    getMinutesAfterMidnight(date) {
+      return 60 * date.getHours() + date.getMinutes();
+    },
     getColorForEvent(event) {
       return event.color;
     },
-- 
GitLab