From 37ecf7ae32173b3b6699fe87446f36974d20ba9c Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Sat, 19 Jul 2025 23:15:57 +0200 Subject: [PATCH 1/2] feat: add inclusive date constraints --- src/lib/Filters.js | 22 +++++++++++++++++++++- src/lib/queryFromFilters.js | 6 ++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/lib/Filters.js b/src/lib/Filters.js index 03c8a57f44..0fa9e60888 100644 --- a/src/lib/Filters.js +++ b/src/lib/Filters.js @@ -76,6 +76,18 @@ export const Constraints = { composable: true, comparable: true, }, + afterOrOn: { + name: 'is after or on', + field: 'Date', + composable: true, + comparable: true, + }, + beforeOrOn: { + name: 'is before or on', + field: 'Date', + composable: true, + comparable: true, + }, containsString: { name: 'contains string', field: 'String', @@ -170,7 +182,15 @@ export const FieldConstraints = { Boolean: ['exists', 'dne', 'eq', 'neq', 'unique'], Number: ['exists', 'dne', 'eq', 'neq', 'lt', 'lte', 'gt', 'gte', 'unique'], String: ['exists', 'dne', 'eq', 'neq', 'starts', 'ends', 'stringContainsString', 'unique'], - Date: ['exists', 'dne', 'before', 'after', 'unique'], + Date: [ + 'exists', + 'dne', + 'before', + 'beforeOrOn', + 'after', + 'afterOrOn', + 'unique', + ], Object: [ 'exists', 'dne', diff --git a/src/lib/queryFromFilters.js b/src/lib/queryFromFilters.js index 047d69cad2..777206e415 100644 --- a/src/lib/queryFromFilters.js +++ b/src/lib/queryFromFilters.js @@ -152,9 +152,15 @@ function addConstraint(query, filter) { case 'before': query.lessThan(filter.get('field'), filter.get('compareTo')); break; + case 'beforeOrOn': + query.lessThanOrEqualTo(filter.get('field'), filter.get('compareTo')); + break; case 'after': query.greaterThan(filter.get('field'), filter.get('compareTo')); break; + case 'afterOrOn': + query.greaterThanOrEqualTo(filter.get('field'), filter.get('compareTo')); + break; case 'containsString': case 'containsNumber': query.equalTo(filter.get('field'), filter.get('compareTo')); From ed7ac22bf59d71bc92dabd0a4e2e2c848ca2ff15 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Sat, 19 Jul 2025 23:25:19 +0200 Subject: [PATCH 2/2] semantics --- src/lib/Filters.js | 12 ++++++------ src/lib/queryFromFilters.js | 8 ++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/lib/Filters.js b/src/lib/Filters.js index 0fa9e60888..6947c0556b 100644 --- a/src/lib/Filters.js +++ b/src/lib/Filters.js @@ -76,14 +76,14 @@ export const Constraints = { composable: true, comparable: true, }, - afterOrOn: { - name: 'is after or on', + onOrAfter: { + name: 'is on or after', field: 'Date', composable: true, comparable: true, }, - beforeOrOn: { - name: 'is before or on', + onOrBefore: { + name: 'is on or before', field: 'Date', composable: true, comparable: true, @@ -186,9 +186,9 @@ export const FieldConstraints = { 'exists', 'dne', 'before', - 'beforeOrOn', + 'onOrBefore', 'after', - 'afterOrOn', + 'onOrAfter', 'unique', ], Object: [ diff --git a/src/lib/queryFromFilters.js b/src/lib/queryFromFilters.js index 777206e415..ea4c49a591 100644 --- a/src/lib/queryFromFilters.js +++ b/src/lib/queryFromFilters.js @@ -127,12 +127,14 @@ function addConstraint(query, filter) { query.lessThan(filter.get('field'), filter.get('compareTo')); break; case 'lte': + case 'onOrBefore': query.lessThanOrEqualTo(filter.get('field'), filter.get('compareTo')); break; case 'gt': query.greaterThan(filter.get('field'), filter.get('compareTo')); break; case 'gte': + case 'onOrAfter': query.greaterThanOrEqualTo(filter.get('field'), filter.get('compareTo')); break; case 'starts': @@ -152,15 +154,9 @@ function addConstraint(query, filter) { case 'before': query.lessThan(filter.get('field'), filter.get('compareTo')); break; - case 'beforeOrOn': - query.lessThanOrEqualTo(filter.get('field'), filter.get('compareTo')); - break; case 'after': query.greaterThan(filter.get('field'), filter.get('compareTo')); break; - case 'afterOrOn': - query.greaterThanOrEqualTo(filter.get('field'), filter.get('compareTo')); - break; case 'containsString': case 'containsNumber': query.equalTo(filter.get('field'), filter.get('compareTo'));