mirror of
https://github.com/n8n-io/n8n.git
synced 2025-01-12 13:27:31 -08:00
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:
parent
a517c8251b
commit
c21c4b9178
|
@ -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' },
|
||||
|
|
|
@ -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':
|
||||
|
|
|
@ -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 },
|
||||
|
|
Loading…
Reference in a new issue