feat: condition operation

This commit is contained in:
Joel 2024-08-13 11:16:27 +08:00
parent 20922fde1c
commit ae098ad121
8 changed files with 58 additions and 2 deletions

View File

@ -26,6 +26,7 @@ type ConditionItemProps = {
disabled?: boolean
caseId: string
condition: Condition
file?: { key: string }
onRemoveCondition: HandleRemoveCondition
onUpdateCondition: HandleUpdateCondition
nodesOutputVars: NodeOutPutVar[]
@ -36,6 +37,7 @@ const ConditionItem = ({
disabled,
caseId,
condition,
file,
onRemoveCondition,
onUpdateCondition,
nodesOutputVars,
@ -88,6 +90,7 @@ const ConditionItem = ({
varType={condition.varType}
value={condition.comparison_operator}
onSelect={handleUpdateConditionOperator}
file={file}
/>
</div>
{

View File

@ -19,12 +19,14 @@ const i18nPrefix = 'workflow.nodes.ifElse'
type ConditionOperatorProps = {
disabled?: boolean
varType: VarType
file?: { key: string }
value?: string
onSelect: (value: ComparisonOperator) => void
}
const ConditionOperator = ({
disabled,
varType,
file,
value,
onSelect,
}: ConditionOperatorProps) => {
@ -32,13 +34,13 @@ const ConditionOperator = ({
const [open, setOpen] = useState(false)
const options = useMemo(() => {
return getOperators(varType).map((o) => {
return getOperators(varType, file).map((o) => {
return {
label: isComparisonOperatorNeedTranslate(o) ? t(`${i18nPrefix}.comparisonOperator.${o}`) : o,
value: o,
}
})
}, [t, varType])
}, [t, varType, file])
const selectedOption = options.find(o => o.value === value)
return (

View File

@ -21,6 +21,7 @@ type ConditionListProps = {
nodesOutputVars: NodeOutPutVar[]
availableNodes: Node[]
numberVariables: NodeOutPutVar[]
varsIsVarFileAttribute: Record<string, boolean>
}
const ConditionList = ({
disabled,
@ -31,6 +32,7 @@ const ConditionList = ({
nodesOutputVars,
availableNodes,
numberVariables,
varsIsVarFileAttribute,
}: ConditionListProps) => {
const { conditions, logical_operator } = caseItem
@ -65,6 +67,7 @@ const ConditionList = ({
nodesOutputVars={nodesOutputVars}
availableNodes={availableNodes}
numberVariables={numberVariables}
file={varsIsVarFileAttribute[condition.id] ? { key: condition.variable_selector.slice(-1)[0] } : undefined}
/>
))
}

View File

@ -41,6 +41,7 @@ const Panel: FC<NodePanelProps<IfElseNodeType>> = ({
handleUpdateConditionLogicalOperator,
nodesOutputVars,
availableNodes,
varsIsVarFileAttribute,
} = useConfig(id, data)
const [willDeleteCaseId, setWillDeleteCaseId] = useState('')
const cases = inputs.cases || []
@ -93,6 +94,7 @@ const Panel: FC<NodePanelProps<IfElseNodeType>> = ({
nodesOutputVars={nodesOutputVars}
availableNodes={availableNodes}
numberVariables={getAvailableVars(id, '', filterNumberVar)}
varsIsVarFileAttribute={varsIsVarFileAttribute}
/>
</div>
)

View File

@ -190,6 +190,7 @@ const useConfig = (id: string, payload: IfElseNodeType) => {
availableNodes: availableNodesWithParent,
nodesOutputNumberVars: availableNumberVars,
availableNumberNodes: availableNumberNodesWithParent,
varsIsVarFileAttribute,
}
}

View File

@ -40,6 +40,47 @@ export const getOperators = (type?: VarType, file?: { key: string }) => {
ComparisonOperator.in,
ComparisonOperator.notIn,
]
case 'size':
return [
ComparisonOperator.largerThan,
ComparisonOperator.largerThanOrEqual,
ComparisonOperator.lessThan,
ComparisonOperator.lessThanOrEqual,
]
case 'extension':
return [
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.contains,
ComparisonOperator.notContains,
]
case 'mimetype':
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.startWith,
ComparisonOperator.endWith,
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
case 'transfer_method':
return [
ComparisonOperator.in,
ComparisonOperator.notIn,
]
case 'url':
return [
ComparisonOperator.contains,
ComparisonOperator.notContains,
ComparisonOperator.startWith,
ComparisonOperator.endWith,
ComparisonOperator.is,
ComparisonOperator.isNot,
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
}
}
switch (type) {

View File

@ -387,6 +387,8 @@ const translation = {
'not empty': 'is not empty',
'null': 'is null',
'not null': 'is not null',
'in': 'in',
'not in': 'not in',
},
enterValue: 'Enter value',
addCondition: 'Add Condition',

View File

@ -387,6 +387,8 @@ const translation = {
'not empty': '不为空',
'null': '空',
'not null': '不为空',
'in': '在',
'not in': '不在',
},
enterValue: '输入值',
addCondition: '添加条件',