Skip to content

Commit

Permalink
feat(disasters panel): 20511 Added config-based filters by last N day…
Browse files Browse the repository at this point in the history
…s (updatedAt and startedAt fields)
  • Loading branch information
albaranau committed Dec 27, 2024
1 parent 34cd404 commit 8bee6e2
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 6 deletions.
7 changes: 7 additions & 0 deletions src/features/events_list/atoms/sortedEventList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { sortEventsBySingleProperty } from '../helpers/singlePropertySort';
import { sortEventsByMcda } from '../helpers/eventsMcdaSort';
import {
filterByExcludedEventTypes,
filterByLastNDaysStartedAt,
filterByLastNDaysUpdatedAt,
filterByMinAffectedPopulation,
filterByMinSeverity,
filterByMinStartedAt,
Expand Down Expand Up @@ -56,11 +58,16 @@ function applyLocalEventListFilters(
if (filtersConfig.excludedEventTypes) {
result = filterByExcludedEventTypes(result, filtersConfig.excludedEventTypes);
}
// date filters
if (filtersConfig.minUpdatedAt) {
result = filterByMinUpdatedAt(result, filtersConfig.minUpdatedAt);
} else if (isNumber(filtersConfig.lastNDaysUpdatedAt)) {
result = filterByLastNDaysUpdatedAt(result, filtersConfig.lastNDaysUpdatedAt);
}
if (filtersConfig.minStartedAt) {
result = filterByMinStartedAt(result, filtersConfig.minStartedAt);
} else if (isNumber(filtersConfig.lastNDaysStartedAt)) {
result = filterByLastNDaysStartedAt(result, filtersConfig.lastNDaysStartedAt);
}
return result;
}
Expand Down
46 changes: 40 additions & 6 deletions src/features/events_list/helpers/localEventFilters.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,34 @@
import { SEVERITY_SORTING_SCORES } from '../constants';
import type { Event, EventType, Severity } from '~core/types';

export function filterByLastNDaysUpdatedAt(events: Event[], days: number): Event[] {
const minTime = getNDaysBack(days).getTime();
if (minTime > 0) {
return filterByMinTime(events, minTime, (event) => event.updatedAt);
}
return events;
}

export function filterByLastNDaysStartedAt(events: Event[], days: number): Event[] {
const minTime = getNDaysBack(days).getTime();
if (minTime > 0) {
return filterByMinTime(events, minTime, (event) => event.startedAt);
}
return events;
}

export function filterByMinUpdatedAt(events: Event[], minDateString: string): Event[] {
const minTime = new Date(minDateString).getTime();
if (minTime) {
return events.filter((event) => {
return event.updatedAt && new Date(event.updatedAt).getTime() >= minTime;
});
return filterByMinTime(events, minTime, (event) => event.updatedAt);
}
return events;
}

export function filterByMinStartedAt(events: Event[], minDateString: string): Event[] {
const minTime = new Date(minDateString).getTime();
if (minTime) {
return events.filter((event) => {
return event.startedAt && new Date(event.startedAt).getTime() >= minTime;
});
return filterByMinTime(events, minTime, (event) => event.startedAt);
}
return events;
}
Expand Down Expand Up @@ -59,3 +71,25 @@ export function filterByExcludedEventTypes(
}
return events;
}

function filterByMinTime(
events: Event[],
minTimeMs: number,
fieldExtractor: (event: Event) => string,
): Event[] {
return events.filter((event) => {
return (
fieldExtractor(event) && new Date(fieldExtractor(event)).getTime() >= minTimeMs
);
});
}

function getNDaysBack(days: number): Date {
const date = new Date();
date.setDate(date.getDate() - days);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
return date;
}
4 changes: 4 additions & 0 deletions src/features/events_list/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ export type LocalEventListFilters = {
minSeverity?: Severity;
minStartedAt?: string;
minUpdatedAt?: string;
// minUpdatedAt has priority
lastNDaysUpdatedAt?: number;
// minStartedAt has priority
lastNDaysStartedAt?: number;
};

export type EventsListFeatureConfig = {
Expand Down

0 comments on commit 8bee6e2

Please sign in to comment.