From e579fc0be86b9035fea0fd0410e234b8d53f86ff Mon Sep 17 00:00:00 2001 From: mARTin-B78 Date: Mon, 14 Sep 2026 23:27:05 +0200 Subject: [PATCH] fix: Kalender-Abfragefenster skaliert mit der eingestellten Tage-Ansicht MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fetchCalendarEvents holte serverseitig immer nur currentWeekStart -7/+14 Tage, egal wie breit die Ansicht (bis zu 31 Tage) tatsächlich war. Spalten jenseits von Tag 14 blieben leer, der "all day"-Zaehler zaehlte nur die geladenen Termine. timeMax skaliert jetzt mit viewDays (max(14, viewDays + 7) Tage vorwaerts), 7-Tage-Standard unveraendert. v1.129.2 Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 16 ++++++++++++++++ package.json | 2 +- src/components/WeeklyView.tsx | 25 ++++++++++++++----------- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f483a66..3fda5e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,22 @@ All notable changes to this project are documented in this file. +## [1.129.2] - 2026-09-14 + +### Fixed +- **Kalendertermine und der "All day"-Zähler fehlten in weiten Ansichten** (Tage-Auswahl + > 14, z.B. 21 oder 31 Tage): `fetchCalendarEvents` fragte serverseitig immer nur ein + festes Fenster von `currentWeekStart - 7` bis `currentWeekStart + 14` Tage ab, egal wie + breit die Ansicht tatsächlich eingestellt war. Spalten jenseits von Tag 14 blieben + dadurch leer, und der Zähler neben "all day" zählte nur die tatsächlich geladenen + Termine mit — beides sah nach fehlenden Daten aus, obwohl die Termine existierten. + `timeMax` skaliert jetzt mit `viewDays` (`currentWeekStart + max(14, viewDays + 7)` + Tage), der Standard-7-Tage-Fall bleibt unverändert (weiterhin 14 Tage Vorlauf). + +Verifiziert: Typecheck und Produktions-Build grün (Scratchpad-Klon), 118 Unit-Tests +grün, Datumsrechnung für viewDays 7/14/21/31 per Skript gegengeprüft — das neue Fenster +deckt in jedem Fall den letzten sichtbaren Tag plus Puffer ab. + ## [1.129.1] - 2026-09-14 ### Fixed diff --git a/package.json b/package.json index fef36f7..0f8a4e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "my-weekly-todo-list", - "version": "1.129.1", + "version": "1.129.2", "description": "A web-based weekly task management application that organizes to-dos and calendar events in a single, intuitive weekly view", "main": "index.js", "scripts": { diff --git a/src/components/WeeklyView.tsx b/src/components/WeeklyView.tsx index 738462e..ad73a7c 100644 --- a/src/components/WeeklyView.tsx +++ b/src/components/WeeklyView.tsx @@ -1397,16 +1397,22 @@ export default function WeeklyView() { startSync(); setIsFetchingCalendar(true); try { + // timeMax must cover the whole configured view (up to MAX_VIEW_DAYS=31), not just + // the default 7-day week — otherwise columns past day 14 silently show no events + // and the all-day count badge undercounts (it only tallies fetched events). + const forwardDays = Math.max(14, viewDays + 7); + const timeMin = new Date( + currentWeekStart.getTime() - 7 * 24 * 60 * 60 * 1000, + ).toISOString(); + const timeMax = new Date( + currentWeekStart.getTime() + forwardDays * 24 * 60 * 60 * 1000, + ).toISOString(); const response = await fetch("/api/calendar/sync", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ - timeMin: new Date( - currentWeekStart.getTime() - 7 * 24 * 60 * 60 * 1000, - ).toISOString(), - timeMax: new Date( - currentWeekStart.getTime() + 14 * 24 * 60 * 60 * 1000, - ).toISOString(), + timeMin, + timeMax, forceRefresh, ...(connectionId ? { connectionId } : {}), }), @@ -1425,10 +1431,7 @@ export default function WeeklyView() { fetch("/api/calendar/sync", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - timeMin: new Date(currentWeekStart.getTime() - 7 * 24 * 60 * 60 * 1000).toISOString(), - timeMax: new Date(currentWeekStart.getTime() + 14 * 24 * 60 * 60 * 1000).toISOString(), - }), + body: JSON.stringify({ timeMin, timeMax }), }).then(r => r.json()).then(d => { if (d.events) setRawCalendarEvents(d.events); }).catch(() => {}); @@ -1447,7 +1450,7 @@ export default function WeeklyView() { setIsFetchingCalendar(false); endSync(); } - }, [currentWeekStart, startSync, endSync]); + }, [currentWeekStart, viewDays, startSync, endSync]); // Weather fetch const fetchWeather = useCallback(async () => {