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);
});
};