From 17e65e47a22c373d201afe6c1bdf5beeb31727aa Mon Sep 17 00:00:00 2001 From: silentoplayz Date: Thu, 27 Aug 2026 05:29:34 -0400 Subject: [PATCH] fix: keep a calendar event visible after its date is moved --- backend/open_webui/models/calendar.py | 3 ++- src/lib/components/calendar/CalendarEventModal.svelte | 7 ++++++- src/lib/components/calendar/CalendarView.svelte | 7 +++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/backend/open_webui/models/calendar.py b/backend/open_webui/models/calendar.py index 52470f1178..b61bf036fa 100644 --- a/backend/open_webui/models/calendar.py +++ b/backend/open_webui/models/calendar.py @@ -533,7 +533,8 @@ class CalendarEventTable: & (CalendarEvent.start_at < end) & or_( CalendarEvent.end_at.is_(None) & (CalendarEvent.start_at >= start), - CalendarEvent.end_at.isnot(None) & (CalendarEvent.end_at > start), + CalendarEvent.end_at.isnot(None) + & ((CalendarEvent.end_at > start) | (CalendarEvent.start_at >= start)), ) ), # Recurring: fetch all (expansion in Python) diff --git a/src/lib/components/calendar/CalendarEventModal.svelte b/src/lib/components/calendar/CalendarEventModal.svelte index 8c0b724683..55df47a9ef 100644 --- a/src/lib/components/calendar/CalendarEventModal.svelte +++ b/src/lib/components/calendar/CalendarEventModal.svelte @@ -129,7 +129,12 @@ loading = true; try { const startNs = dateTimeToNs(startDate, allDay ? '00:00' : startTime); - const endNs = endDate ? dateTimeToNs(endDate, allDay ? '23:59' : endTime) : undefined; + let endNs = endDate ? dateTimeToNs(endDate, allDay ? '23:59' : endTime) : undefined; + if (endNs !== undefined && endNs < startNs) { + const duration = + event?.end_at && event.end_at > event.start_at ? event.end_at - event.start_at : 0; + endNs = startNs + duration; + } if (event && !event.meta?.automation_id) { const result = await updateCalendarEvent(localStorage.token, event.id, { diff --git a/src/lib/components/calendar/CalendarView.svelte b/src/lib/components/calendar/CalendarView.svelte index 51d4632f23..ec734956f3 100644 --- a/src/lib/components/calendar/CalendarView.svelte +++ b/src/lib/components/calendar/CalendarView.svelte @@ -31,7 +31,10 @@ const startDate = new Date(startMs); const endDate = new Date(endMs); const d = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate()); - const last = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()).getTime(); + const last = Math.max( + d.getTime(), + new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()).getTime() + ); while (d.getTime() <= last) { const key = d.getTime().toString(); (map[key] ??= []).push(e); @@ -90,7 +93,7 @@ const dayEndMs = dayStartMs + 86_400_000; return filteredEvents.filter((e) => { const startMs = e.start_at / NS; - const endMs = (e.end_at || e.start_at) / NS; + const endMs = Math.max(startMs, (e.end_at || e.start_at) / NS); return startMs < dayEndMs && endMs >= dayStartMs; }); }