mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -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',
|
name: 'filter.operator.notExists',
|
||||||
singleValue: true,
|
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:equals': { type: 'string', operation: 'equals', name: 'filter.operator.equals' },
|
||||||
'string:notEquals': { type: 'string', operation: 'notEquals', name: 'filter.operator.notEquals' },
|
'string:notEquals': { type: 'string', operation: 'notEquals', name: 'filter.operator.notEquals' },
|
||||||
'string:contains': { type: 'string', operation: 'contains', name: 'filter.operator.contains' },
|
'string:contains': { type: 'string', operation: 'contains', name: 'filter.operator.contains' },
|
||||||
|
|
|
@ -179,6 +179,10 @@ export function executeFilterCondition(
|
||||||
const right = (rightValue ?? '') as string;
|
const right = (rightValue ?? '') as string;
|
||||||
|
|
||||||
switch (condition.operator.operation) {
|
switch (condition.operator.operation) {
|
||||||
|
case 'empty':
|
||||||
|
return left.length === 0;
|
||||||
|
case 'notEmpty':
|
||||||
|
return left.length !== 0;
|
||||||
case 'equals':
|
case 'equals':
|
||||||
return left === right;
|
return left === right;
|
||||||
case 'notEquals':
|
case 'notEquals':
|
||||||
|
|
|
@ -250,6 +250,38 @@ describe('FilterParameter', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('string', () => {
|
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([
|
it.each([
|
||||||
{ left: 'first string', right: 'first string', expected: true },
|
{ left: 'first string', right: 'first string', expected: true },
|
||||||
{ left: 'first string', right: 'second string', expected: false },
|
{ left: 'first string', right: 'second string', expected: false },
|
||||||
|
|
Loading…
Reference in a new issue