diff --git a/packages/gi-common-components/src/GroupContainer/ExpressionGroup.tsx b/packages/gi-common-components/src/GroupContainer/ExpressionGroup.tsx index 2e0c393b1..74234c485 100644 --- a/packages/gi-common-components/src/GroupContainer/ExpressionGroup.tsx +++ b/packages/gi-common-components/src/GroupContainer/ExpressionGroup.tsx @@ -86,10 +86,10 @@ const ExpressionGroup: React.FunctionComponent<{ - {propertyType === 'string' ? ( - - ) : ( + {propertyType === 'number' ? ( + ) : ( + )} diff --git a/packages/gi-sdk/src/process/filterByRules.ts b/packages/gi-sdk/src/process/filterByRules.ts index 4fd24e6d8..5bf2aa94b 100644 --- a/packages/gi-sdk/src/process/filterByRules.ts +++ b/packages/gi-sdk/src/process/filterByRules.ts @@ -33,7 +33,6 @@ export const formatProperties = (node: { } //@ts-ignore return node || {}; - // return node.data || {}; }; // lite version of lodash.get @@ -53,39 +52,35 @@ function get(obj: any, path: string): T | undefined { } const filterByExpression = (data: Record, expression: Expression): boolean => { - if (!expression) { - return false; - } + if (!expression) return false; const { name = '', operator, value } = expression; - const formatted: string | number = value; - - const propertyValue = get(data, name); - - if (propertyValue === undefined) return false; - - if (operator === 'eql') { - return propertyValue === formatted; - } else if (operator === 'not-eql') { - return propertyValue !== formatted; - } else if (operator === 'contain') { - return propertyValue.indexOf(`${formatted}`) > -1; - } else if (operator === 'not-contain') { - return propertyValue.indexOf(`${formatted}`) === -1; - } else if (operator === 'gt') { - return Number(propertyValue) > Number(formatted); - } else if (operator === 'gte') { - return Number(propertyValue) >= Number(formatted); - } else if (operator === 'lt') { - return Number(propertyValue) < Number(formatted); - } else if (operator === 'lte') { - return Number(propertyValue) <= Number(formatted); + const formatted = String(value); + const propertyValue = String(get(data, name)); + + switch (operator) { + case 'eql': + return propertyValue === formatted; + case 'not-eql': + return propertyValue !== formatted; + case 'contain': + return propertyValue.indexOf(`${formatted}`) > -1; + case 'not-contain': + return propertyValue.indexOf(`${formatted}`) === -1; + case 'gt': + return Number(propertyValue) > Number(value); + case 'gte': + return Number(propertyValue) >= Number(value); + case 'lt': + return Number(propertyValue) < Number(value); + case 'lte': + return Number(propertyValue) <= Number(value); + default: + return false; } - - return false; }; -export const filterByTopRule = (node, rule: Condition) => { +export const filterByTopRule = (item, rule: Condition) => { const { logic, expressions } = rule; // 未配置规则一律通过 @@ -94,12 +89,12 @@ export const filterByTopRule = (node, rule: Condition) => { } return logic === true - ? expressions.every(item => filterByExpression(formatProperties(node), item)) - : expressions.some(item => filterByExpression(formatProperties(node), item)); + ? expressions.every(exp => filterByExpression(formatProperties(item), exp)) + : expressions.some(exp => filterByExpression(formatProperties(item), exp)); }; -export const filterByRules = (nodes, rule) => { - return nodes.filter(node => { - return filterByTopRule(node, rule); +export const filterByRules = (items, rule) => { + return items.filter(item => { + return filterByTopRule(item, rule); }); };