From 91a2e71fff2bef993273b509dce5b7948d6d5c65 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 27 Feb 2024 15:52:07 +0800 Subject: [PATCH] feat: if comparasion --- .../nodes/_base/components/selector.tsx | 2 +- .../if-else/components/condition-item.tsx | 70 ++++++++++++++++++- .../workflow/nodes/if-else/node.tsx | 11 +-- .../workflow/nodes/if-else/utils.ts | 10 +++ 4 files changed, 81 insertions(+), 12 deletions(-) diff --git a/web/app/components/workflow/nodes/_base/components/selector.tsx b/web/app/components/workflow/nodes/_base/components/selector.tsx index 799ca08a39..5580dd7b1a 100644 --- a/web/app/components/workflow/nodes/_base/components/selector.tsx +++ b/web/app/components/workflow/nodes/_base/components/selector.tsx @@ -37,7 +37,7 @@ const TypeSelector: FC = ({ setHide() }, ref) return ( -
+
{trigger ? (
) +const getOperators = (type: string) => { + switch (type) { + case 'string': + return [ + ComparisonOperator.contains, + ComparisonOperator.notContains, + ComparisonOperator.startWith, + ComparisonOperator.endWith, + ComparisonOperator.is, + ComparisonOperator.isNot, + ComparisonOperator.empty, + ComparisonOperator.notEmpty, + ] + case 'number': + return [ + ComparisonOperator.equal, + ComparisonOperator.notEqual, + ComparisonOperator.largerThan, + ComparisonOperator.lessThan, + ComparisonOperator.largerThanOrEqual, + ComparisonOperator.lessThanOrEqual, + ComparisonOperator.is, + ComparisonOperator.isNot, + ComparisonOperator.empty, + ComparisonOperator.notEmpty, + ] + case 'array': + return [ + ComparisonOperator.is, + ComparisonOperator.isNot, + ComparisonOperator.empty, + ComparisonOperator.notEmpty, + ] + default: + return [] + } +} + type ItemProps = { readonly: boolean payload: Condition @@ -51,6 +91,7 @@ const Item: FC = ({ ...payload, variable_selector: value, }) + // TODO: handle value type change will effect the comparisonOperators }, [onChange, payload]) const handleValueChange = useCallback((e: React.ChangeEvent) => { @@ -60,6 +101,13 @@ const Item: FC = ({ }) }, [onChange, payload]) + const handleComparisonOperatorChange = useCallback((v: ComparisonOperator) => { + onChange({ + ...payload, + comparison_operator: v, + }) + }, [onChange, payload]) + return (
{isShowLogicalOperator && ( @@ -90,12 +138,30 @@ const Item: FC = ({ onChange={handleVarReferenceChange} /> + +
{isComparisonOperatorNeedTranslate(payload.comparison_operator) ? t(`${i18nPrefix}.comparisonOperator.${payload.comparison_operator}`) : payload.comparison_operator}
+
+ } + readonly={readonly} + value={payload.comparison_operator} + options={getOperators('string').map((o) => { + return { + label: isComparisonOperatorNeedTranslate(o) ? t(`${i18nPrefix}.comparisonOperator.${o}`) : o, + value: o, + } + })} + onChange={handleComparisonOperatorChange} + /> + diff --git a/web/app/components/workflow/nodes/if-else/node.tsx b/web/app/components/workflow/nodes/if-else/node.tsx index 3e4267819c..a1cca8cbde 100644 --- a/web/app/components/workflow/nodes/if-else/node.tsx +++ b/web/app/components/workflow/nodes/if-else/node.tsx @@ -3,17 +3,10 @@ import { useTranslation } from 'react-i18next' import type { NodeProps } from 'reactflow' import { NodeSourceHandle } from '../_base/components/node-handle' import { mockData } from './mock' -import { ComparisonOperator } from './types' -import { isEmptyRelatedOperator } from './utils' +import { isComparisonOperatorNeedTranslate, isEmptyRelatedOperator } from './utils' import { Variable02 } from '@/app/components/base/icons/src/vender/solid/development' const i18nPrefix = 'workflow.nodes.ifElse' -const notTranslateKey = [ - ComparisonOperator.equal, ComparisonOperator.notEqual, - ComparisonOperator.largerThan, ComparisonOperator.largerThanOrEqual, - ComparisonOperator.lessThan, ComparisonOperator.lessThanOrEqual, -] - const IfElseNode: FC> = (props) => { const { t } = useTranslation() const { conditions, logical_operator } = mockData @@ -35,7 +28,7 @@ const IfElseNode: FC> = (props) => {
{condition.variable_selector.slice(-1)[0]} - {notTranslateKey.includes(condition.comparison_operator) ? condition.comparison_operator : t(`${i18nPrefix}.comparisonOperator.${condition.comparison_operator}`)} + {isComparisonOperatorNeedTranslate(condition.comparison_operator) ? condition.comparison_operator : t(`${i18nPrefix}.comparisonOperator.${condition.comparison_operator}`)} {!isEmptyRelatedOperator(condition.comparison_operator) && {condition.value}}
{i !== conditions.length - 1 && ( diff --git a/web/app/components/workflow/nodes/if-else/utils.ts b/web/app/components/workflow/nodes/if-else/utils.ts index e6a3a0f5c0..55b1f656f6 100644 --- a/web/app/components/workflow/nodes/if-else/utils.ts +++ b/web/app/components/workflow/nodes/if-else/utils.ts @@ -8,3 +8,13 @@ export const isEmptyRelatedOperator = (operator: ComparisonOperator) => { export const checkNodeValid = (payload: IfElseNodeType) => { return true } + +const notTranslateKey = [ + ComparisonOperator.equal, ComparisonOperator.notEqual, + ComparisonOperator.largerThan, ComparisonOperator.largerThanOrEqual, + ComparisonOperator.lessThan, ComparisonOperator.lessThanOrEqual, +] + +export const isComparisonOperatorNeedTranslate = (operator: ComparisonOperator) => { + return !notTranslateKey.includes(operator) +}