From 7910eea129b4731bbc88c49a9214671b72c1103d Mon Sep 17 00:00:00 2001 From: idaho <664101+idaho@users.noreply.github.com> Date: Tue, 2 Apr 2024 08:00:18 +0200 Subject: [PATCH] some events are fetched but should not be shown (api issue?) (#281) --- src/utils/findActiveEvents.test.ts | 54 ++++++++++++++++++++++++++++++ src/utils/findActiveEvents.ts | 12 +++++-- src/utils/getCalendarData.ts | 3 +- 3 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 src/utils/findActiveEvents.test.ts diff --git a/src/utils/findActiveEvents.test.ts b/src/utils/findActiveEvents.test.ts new file mode 100644 index 0000000..38f2868 --- /dev/null +++ b/src/utils/findActiveEvents.test.ts @@ -0,0 +1,54 @@ +import { findActiveEvents } from './findActiveEvents'; + +import type { CalendarEvent } from './calendarEvents'; + +describe(`findActiveEvents`, () => { + test(`filter events which starts not in range but recived by api`, () => { + const data = [ + { + date: { + start: new Date('2024-03-29T23:00:00.000Z'), + end: new Date('2024-03-30T23:00:00.000Z') + }, + isWholeDayEvent: true, + content: { + summary: 'refuse bin', + description: null, + location: null, + uid: null, + recurrence_id: null, + rrule: null, + entity: 'calendar.portsmouth_city_council' + } + }, + { + date: { + start: new Date('2024-03-29T23:00:00.000Z'), + end: new Date('2024-03-30T23:00:00.000Z') + }, + isWholeDayEvent: true, + content: { + summary: 'food waste bin', + description: '', + location: null, + uid: 'removed when posted', + recurrence_id: '20240401', + rrule: 'FREQ=WEEKLY;BYDAY=MO', + entity: 'calendar.home_assistant_calendar' + } + } + ]; + + const result = findActiveEvents(data as CalendarEvent[], { + config: { + filter_events: false, + pattern: [] + }, + dropAfter: false, + now: new Date('2024-03-29T12:09:08.879Z'), + filterFutureEventsDay: '2024-03-29' + }); + + expect(result).toEqual([]); + }); +}); diff --git a/src/utils/findActiveEvents.ts b/src/utils/findActiveEvents.ts index 1223a2d..9766060 100644 --- a/src/utils/findActiveEvents.ts +++ b/src/utils/findActiveEvents.ts @@ -1,4 +1,5 @@ import { getDayFromDate } from './getDayFromDate'; +import { getTimeZoneOffset } from './getTimeZoneOffset'; import type { CalendarEvent } from './calendarEvents'; import type { TrashCardConfig } from '../cards/trash-card/trash-card-config'; @@ -13,6 +14,7 @@ interface Options { config: Config; now: Date; dropAfter: boolean; + filterFutureEventsDay: string; } const isMatchingAnyPatterns = (item: CalendarEvent, config: Config) => { @@ -30,13 +32,19 @@ const isNotPastWholeDayEvent = (item: CalendarEvent, now: Date, dropAfter: boole (item.isWholeDayEvent && getDayFromDate(item.date.start) === getDayFromDate(now) && !dropAfter) || (item.isWholeDayEvent && getDayFromDate(item.date.start) !== getDayFromDate(now)); -const findActiveEvents = (items: CalendarEvent[], { config, now, dropAfter }: Options): CalendarEvent[] => { +const findActiveEvents = (items: CalendarEvent[], { config, now, dropAfter, filterFutureEventsDay }: Options): CalendarEvent[] => { + const dateString = `${filterFutureEventsDay}T00:00:00${getTimeZoneOffset()}`; + const dateMaxStart = new Date(dateString); + const activeItems = items. filter((item): boolean => { + if (item.date.start > dateMaxStart) { + return false; + } + if (item.isWholeDayEvent) { return item.date.end > now; } - if (item.date.end < now) { return false; } diff --git a/src/utils/getCalendarData.ts b/src/utils/getCalendarData.ts index bd9b14d..d722670 100644 --- a/src/utils/getCalendarData.ts +++ b/src/utils/getCalendarData.ts @@ -57,7 +57,8 @@ const getCalendarData = async ( filter_events: config.filter_events }, dropAfter, - now + now, + filterFutureEventsDay: end }); debuggerInstance.log(`activeElements`, activeEvents);