feat: Add new 'is empty' and 'is not empty' operators to Filter (#8445)

Co-authored-by: Michael Kret <michael.k@radency.com>
This commit is contained in:
Elias Meire 2024-01-26 11:17:41 +01:00 committed by GitHub
parent a517c8251b
commit c21c4b9178
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 48 additions and 0 deletions

View file

@ -23,6 +23,18 @@ export const OPERATORS_BY_ID = {
name: 'filter.operator.notExists',
singleValue: true,
},
'string:empty': {
type: 'string',
operation: 'empty',
name: 'filter.operator.empty',
singleValue: true,
},
'string:notEmpty': {
type: 'string',
operation: 'notEmpty',
name: 'filter.operator.notEmpty',
singleValue: true,
},
'string:equals': { type: 'string', operation: 'equals', name: 'filter.operator.equals' },
'string:notEquals': { type: 'string', operation: 'notEquals', name: 'filter.operator.notEquals' },
'string:contains': { type: 'string', operation: 'contains', name: 'filter.operator.contains' },

View file

@ -179,6 +179,10 @@ export function executeFilterCondition(
const right = (rightValue ?? '') as string;
switch (condition.operator.operation) {
case 'empty':
return left.length === 0;
case 'notEmpty':
return left.length !== 0;
case 'equals':
return left === right;
case 'notEquals':

View file

@ -250,6 +250,38 @@ describe('FilterParameter', () => {
});
describe('string', () => {
it.each([
{ left: null, expected: true },
{ left: undefined, expected: true },
{ left: '', expected: true },
{ left: '🐛', expected: false },
])('string:empty($left) === $expected', ({ left, expected }) => {
const result = executeFilter(
filterFactory({
conditions: [
{ id: '1', leftValue: left, operator: { operation: 'empty', type: 'string' } },
],
}),
);
expect(result).toBe(expected);
});
it.each([
{ left: null, expected: false },
{ left: undefined, expected: false },
{ left: '', expected: false },
{ left: '🐛', expected: true },
])('string:notEmpty($left) === $expected', ({ left, expected }) => {
const result = executeFilter(
filterFactory({
conditions: [
{ id: '1', leftValue: left, operator: { operation: 'notEmpty', type: 'string' } },
],
}),
);
expect(result).toBe(expected);
});
it.each([
{ left: 'first string', right: 'first string', expected: true },
{ left: 'first string', right: 'second string', expected: false },