From e44e1a8447e424e72f5a3acb4c520e6a4cf7ebd2 Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 20 Feb 2023 20:37:23 -0600 Subject: [PATCH] New: Additional custom filter predicates for strings (cherry picked from commit 6082253166b67d59d7907d83c362116d47bcdaeb) --- frontend/src/Helpers/Props/filterBuilderTypes.js | 6 +++++- .../src/Helpers/Props/filterTypePredicates.js | 16 ++++++++++++++++ frontend/src/Helpers/Props/filterTypes.js | 10 +++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/frontend/src/Helpers/Props/filterBuilderTypes.js b/frontend/src/Helpers/Props/filterBuilderTypes.js index 776ba2afc..f2ef6f2f8 100644 --- a/frontend/src/Helpers/Props/filterBuilderTypes.js +++ b/frontend/src/Helpers/Props/filterBuilderTypes.js @@ -47,6 +47,10 @@ export const possibleFilterTypes = { { key: filterTypes.CONTAINS, value: 'contains' }, { key: filterTypes.NOT_CONTAINS, value: 'does not contain' }, { key: filterTypes.EQUAL, value: 'equal' }, - { key: filterTypes.NOT_EQUAL, value: 'not equal' } + { key: filterTypes.NOT_EQUAL, value: 'not equal' }, + { key: filterTypes.STARTS_WITH, value: 'starts with' }, + { key: filterTypes.NOT_STARTS_WITH, value: 'does not start with' }, + { key: filterTypes.ENDS_WITH, value: 'ends with' }, + { key: filterTypes.NOT_ENDS_WITH, value: 'does not end with' } ] }; diff --git a/frontend/src/Helpers/Props/filterTypePredicates.js b/frontend/src/Helpers/Props/filterTypePredicates.js index a3ea11956..d07059c02 100644 --- a/frontend/src/Helpers/Props/filterTypePredicates.js +++ b/frontend/src/Helpers/Props/filterTypePredicates.js @@ -39,6 +39,22 @@ const filterTypePredicates = { [filterTypes.NOT_EQUAL]: function(itemValue, filterValue) { return itemValue !== filterValue; + }, + + [filterTypes.STARTS_WITH]: function(itemValue, filterValue) { + return itemValue.toLowerCase().startsWith(filterValue.toLowerCase()); + }, + + [filterTypes.NOT_STARTS_WITH]: function(itemValue, filterValue) { + return !itemValue.toLowerCase().startsWith(filterValue.toLowerCase()); + }, + + [filterTypes.ENDS_WITH]: function(itemValue, filterValue) { + return itemValue.toLowerCase().endsWith(filterValue.toLowerCase()); + }, + + [filterTypes.NOT_ENDS_WITH]: function(itemValue, filterValue) { + return !itemValue.toLowerCase().endsWith(filterValue.toLowerCase()); } }; diff --git a/frontend/src/Helpers/Props/filterTypes.js b/frontend/src/Helpers/Props/filterTypes.js index 993e8df57..239a4e7e9 100644 --- a/frontend/src/Helpers/Props/filterTypes.js +++ b/frontend/src/Helpers/Props/filterTypes.js @@ -10,6 +10,10 @@ export const LESS_THAN = 'lessThan'; export const LESS_THAN_OR_EQUAL = 'lessThanOrEqual'; export const NOT_CONTAINS = 'notContains'; export const NOT_EQUAL = 'notEqual'; +export const STARTS_WITH = 'startsWith'; +export const NOT_STARTS_WITH = 'notStartsWith'; +export const ENDS_WITH = 'endsWith'; +export const NOT_ENDS_WITH = 'notEndsWith'; export const all = [ CONTAINS, @@ -23,5 +27,9 @@ export const all = [ IN_LAST, NOT_IN_LAST, IN_NEXT, - NOT_IN_NEXT + NOT_IN_NEXT, + STARTS_WITH, + NOT_STARTS_WITH, + ENDS_WITH, + NOT_ENDS_WITH ];