diff --git a/web/app/components/workflow/nodes/if-else/components/condition-list/condition-item.tsx b/web/app/components/workflow/nodes/if-else/components/condition-list/condition-item.tsx
index df19f77e97..3ce84dafc0 100644
--- a/web/app/components/workflow/nodes/if-else/components/condition-list/condition-item.tsx
+++ b/web/app/components/workflow/nodes/if-else/components/condition-list/condition-item.tsx
@@ -13,10 +13,12 @@ import type {
} from '../../types'
import {
ComparisonOperator,
+ LogicalOperator,
} from '../../types'
import { comparisonOperatorNotRequireValue } from '../../utils'
import ConditionNumberInput from '../condition-number-input'
import { FILE_TYPE_OPTIONS, TRANSFER_METHOD } from '../../default'
+import ConditionWrap from '../condition-wrap'
import ConditionOperator from './condition-operator'
import ConditionInput from './condition-input'
import VariableTag from '@/app/components/workflow/nodes/_base/components/variable-tag'
@@ -81,10 +83,10 @@ const ConditionItem = ({
onUpdateCondition(caseId, condition.id, newCondition)
}, [caseId, condition, onUpdateCondition])
- const isSelect = condition.comparison_operator && [ComparisonOperator.in, ComparisonOperator.notIn].includes(condition.comparison_operator)
+ const isSelect = condition.comparison_operator && [ComparisonOperator.in, ComparisonOperator.notIn, ComparisonOperator.allOf].includes(condition.comparison_operator)
const selectOptions = useMemo(() => {
if (isSelect) {
- if (file?.key === 'type') {
+ if (file?.key === 'type' || condition.comparison_operator === ComparisonOperator.allOf) {
return FILE_TYPE_OPTIONS.map(item => ({
name: t(`${optionNameI18NPrefix}.${item.i18nKey}`),
value: item.value,
@@ -99,8 +101,11 @@ const ConditionItem = ({
return []
}
return []
- }, [file?.key, isSelect, t])
+ }, [condition.comparison_operator, file?.key, isSelect, t])
+ const isSubVariable = condition.varType === VarType.arrayFile && [ComparisonOperator.contains, ComparisonOperator.notContains].includes(condition.comparison_operator!)
+
+ const isNotInput = isSelect || isSubVariable
return (
{
- !comparisonOperatorNotRequireValue(condition.comparison_operator) && !isSelect && condition.varType !== VarType.number && (
+ !comparisonOperatorNotRequireValue(condition.comparison_operator) && !isNotInput && condition.varType !== VarType.number && (
)
}
+ {
+ !comparisonOperatorNotRequireValue(condition.comparison_operator) && isSubVariable && (
+
+ { }}
+ handleAddCondition={() => { }}
+ handleUpdateCondition={() => { }}
+ handleRemoveCondition={() => { }}
+ handleUpdateConditionLogicalOperator={() => { }}
+ nodesOutputVars={[]}
+ availableNodes={[]}
+ varsIsVarFileAttribute={{}}
+ filterVar={() => true}
+ />
+
+ )
+ }
= ({
+ isSubVariable,
nodeId: id,
cases,
readOnly,
- handleSortCase,
+ handleSortCase = () => { },
handleUpdateCondition,
handleRemoveCondition,
handleUpdateConditionLogicalOperator,
@@ -65,6 +67,7 @@ const ConditionWrap: FC
= ({
handle='.handle'
ghostClass='bg-components-panel-bg'
animation={150}
+ disabled={readOnly || isSubVariable}
>
{
cases.map((item, index) => (
diff --git a/web/app/components/workflow/nodes/if-else/types.ts b/web/app/components/workflow/nodes/if-else/types.ts
index 41406d977d..0216e6028c 100644
--- a/web/app/components/workflow/nodes/if-else/types.ts
+++ b/web/app/components/workflow/nodes/if-else/types.ts
@@ -30,6 +30,16 @@ export enum ComparisonOperator {
isNotNull = 'is not null',
in = 'in',
notIn = 'not in',
+ allOf = 'all of',
+}
+
+export type SubVariableCondition = {
+ id: string
+ path: string
+ type: VarType
+ comparison_operator?: ComparisonOperator
+ value: string
+ numberVarType?: NumberVarType
}
export type Condition = {
@@ -39,6 +49,7 @@ export type Condition = {
comparison_operator?: ComparisonOperator
value: string
numberVarType?: NumberVarType
+ sub_variable_condition?: SubVariableCondition[]
}
export type CaseItem = {
diff --git a/web/app/components/workflow/nodes/if-else/utils.ts b/web/app/components/workflow/nodes/if-else/utils.ts
index e35382ca9f..53b0811cab 100644
--- a/web/app/components/workflow/nodes/if-else/utils.ts
+++ b/web/app/components/workflow/nodes/if-else/utils.ts
@@ -121,6 +121,14 @@ export const getOperators = (type?: VarType, file?: { key: string }) => {
ComparisonOperator.empty,
ComparisonOperator.notEmpty,
]
+ case VarType.arrayFile:
+ return [
+ ComparisonOperator.contains,
+ ComparisonOperator.notContains,
+ ComparisonOperator.allOf,
+ ComparisonOperator.empty,
+ ComparisonOperator.notEmpty,
+ ]
default:
return [
ComparisonOperator.is,
diff --git a/web/i18n/en-US/workflow.ts b/web/i18n/en-US/workflow.ts
index b0915a1f20..3c2df8a743 100644
--- a/web/i18n/en-US/workflow.ts
+++ b/web/i18n/en-US/workflow.ts
@@ -420,6 +420,7 @@ const translation = {
'not null': 'is not null',
'in': 'in',
'not in': 'not in',
+ 'all of': 'all of',
},
optionName: {
image: 'Image',
diff --git a/web/i18n/zh-Hans/workflow.ts b/web/i18n/zh-Hans/workflow.ts
index 15f5606d29..03390de4cc 100644
--- a/web/i18n/zh-Hans/workflow.ts
+++ b/web/i18n/zh-Hans/workflow.ts
@@ -420,6 +420,7 @@ const translation = {
'not null': '不为空',
'in': '是',
'not in': '不是',
+ 'all of': '全部是',
},
optionName: {
image: '图片',