web: drop leading empty month from the event calendar
web / ci (push) Successful in 1m57s

This commit is contained in:
2026-09-04 22:15:04 +02:00
parent ff4d3b2e28
commit 4bd05880ac
2 changed files with 34 additions and 0 deletions
+21
View File
@@ -78,6 +78,27 @@ describe("organizeEventsInCalendar", () => {
expect(week["2026-07-12"]).toEqual([]);
});
it("drops a leading month that only contains seeded padding days", () => {
// tirsdag 1. september 2026: the seeded week starts mandag 31. august
const events = getSingularEvents([
makeEvent("a", ["2026-09-04T17:00:00Z"]),
makeEvent("b", ["2026-10-02T17:00:00Z"]),
]);
const calendar = organizeEventsInCalendar(events);
expect(Object.keys(calendar)).toEqual(["2026-09", "2026-10"]);
// the first week is still seeded with its September days
expect(Object.keys(calendar["2026-09"]["36"])).toEqual([
"2026-09-01",
"2026-09-02",
"2026-09-03",
"2026-09-04",
"2026-09-05",
"2026-09-06",
]);
});
it("splits a week across the year boundary under a shared week key", () => {
const events = getSingularEvents([
makeEvent("romjul", ["2026-12-30T20:00:00Z"]),
+13
View File
@@ -314,6 +314,19 @@ export function organizeEventsInCalendar<E extends EventListable>(
calendar[yearMonth][week][day].push(event);
});
// Seeding starts at the Monday of the first event's week, which can spill a
// few empty days into the previous month. Drop that leading empty month so
// the calendar starts at the first month that actually has events.
for (const yearMonth of Object.keys(calendar)) {
const hasEvents = Object.values(calendar[yearMonth]).some((week) =>
Object.values(week).some((day) => day.length > 0)
);
if (hasEvents) {
break;
}
delete calendar[yearMonth];
}
return calendar;
}