diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index 9271d00492..f0a38506ca 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -296,7 +296,7 @@ export type VisitsApiQueryParams = { }>; filterBy?: Array<{ field: keyof Visit; - operator: '<' | '<=' | '==' | '>' | '>=' | 'contains'; + operator: '<' | '<=' | '==' | '!=' | '>' | '>=' | 'contains'; value: string | number; }>; }; diff --git a/plugins/home/src/api/VisitsApi.ts b/plugins/home/src/api/VisitsApi.ts index ab43d1c7a7..ad750d81f2 100644 --- a/plugins/home/src/api/VisitsApi.ts +++ b/plugins/home/src/api/VisitsApi.ts @@ -84,7 +84,7 @@ export type VisitsApiQueryParams = { */ filterBy?: Array<{ field: keyof Visit; - operator: '<' | '<=' | '==' | '>' | '>=' | 'contains'; + operator: '<' | '<=' | '==' | '!=' | '>' | '>=' | 'contains'; value: string | number; }>; }; diff --git a/plugins/home/src/api/VisitsApiFactory.test.ts b/plugins/home/src/api/VisitsApiFactory.test.ts index 4e00b1432f..416481be53 100644 --- a/plugins/home/src/api/VisitsApiFactory.test.ts +++ b/plugins/home/src/api/VisitsApiFactory.test.ts @@ -299,6 +299,19 @@ describe('new MemoryVisitsApi()', () => { expect(visits).toEqual([expect.objectContaining(visitsToSave[1])]); }); + it('filters by timestamp with !=', async () => { + const visits = await api.list({ + filterBy: [ + { field: 'timestamp', operator: '!=', value: baseDate + 360_000 }, + ], + }); + expect(visits).toHaveLength(2); + expect(visits).toEqual([ + expect.objectContaining(visitsToSave[2]), + expect.objectContaining(visitsToSave[0]), + ]); + }); + it('filters by entityRef with contains', async () => { const visits = await api.list({ filterBy: [ diff --git a/plugins/home/src/api/VisitsApiFactory.ts b/plugins/home/src/api/VisitsApiFactory.ts index e83bcef723..9ba6a2fe79 100644 --- a/plugins/home/src/api/VisitsApiFactory.ts +++ b/plugins/home/src/api/VisitsApiFactory.ts @@ -69,6 +69,7 @@ export class VisitsApiFactory implements VisitsApi { if (filter.operator === '<') return field < filter.value; if (filter.operator === '<=') return field <= filter.value; if (filter.operator === '==') return field === filter.value; + if (filter.operator === '!=') return field !== filter.value; if (filter.operator === 'contains') return `${field}`.includes(`${filter.value}`); return false;