diff --git a/web/app/components/workflow/nodes/list-filter/default.ts b/web/app/components/workflow/nodes/list-filter/default.ts index b957a027e5..39be24ede5 100644 --- a/web/app/components/workflow/nodes/list-filter/default.ts +++ b/web/app/components/workflow/nodes/list-filter/default.ts @@ -1,5 +1,6 @@ import { BlockEnum } from '../../types' import type { NodeDefault } from '../../types' +import { comparisonOperatorNotRequireValue } from '../if-else/utils' import { type ListFilterNodeType, OrderBy } from './types' import { ALL_CHAT_AVAILABLE_BLOCKS, ALL_COMPLETION_AVAILABLE_BLOCKS } from '@/app/components/workflow/constants' const i18nPrefix = 'workflow.errorMsg' @@ -30,10 +31,19 @@ const nodeDefault: NodeDefault = { }, checkValid(payload: ListFilterNodeType, t: any) { let errorMessages = '' - const { variable } = payload + const { variable, filter_by } = payload if (!errorMessages && !variable?.length) - errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.assigner.assignedVariable') }) + errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.listFilter.inputVar') }) + + // Check filter condition + if (!errorMessages) { + if (!filter_by[0]?.comparison_operator) + errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.listFilter.filterConditionComparisonOperator') }) + + if (!errorMessages && !comparisonOperatorNotRequireValue(filter_by[0]?.comparison_operator) && !filter_by[0]?.value) + errorMessages = t(`${i18nPrefix}.fieldRequired`, { field: t('workflow.nodes.listFilter.filterConditionComparisonValue') }) + } return { isValid: !errorMessages, diff --git a/web/app/components/workflow/nodes/list-filter/use-config.ts b/web/app/components/workflow/nodes/list-filter/use-config.ts index d80fc3d87d..99aa2c45d7 100644 --- a/web/app/components/workflow/nodes/list-filter/use-config.ts +++ b/web/app/components/workflow/nodes/list-filter/use-config.ts @@ -4,7 +4,8 @@ import { useStoreApi } from 'reactflow' import type { ValueSelector, Var } from '../../types' import { VarType } from '../../types' import { getOperators } from '../if-else/utils' -import type { Condition, Limit, ListFilterNodeType, OrderBy } from './types' +import { OrderBy } from './types' +import type { Condition, Limit, ListFilterNodeType } from './types' import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud' import { useIsChatMode, @@ -80,10 +81,12 @@ const useConfig = (id: string, payload: ListFilterNodeType) => { draft.var_type = varType draft.item_var_type = itemVarType draft.filter_by = [{ - key: isFileArray ? 'name' : '', + key: (isFileArray && !draft.filter_by[0].key) ? 'name' : '', comparison_operator: getOperators(itemVarType, isFileArray ? { key: 'name' } : undefined)[0], value: '', }] + if (isFileArray && draft.order_by.enabled && !draft.order_by.key) + draft.order_by.key = 'name' }) setInputs(newInputs) }, [getType, inputs, setInputs]) @@ -110,9 +113,14 @@ const useConfig = (id: string, payload: ListFilterNodeType) => { const handleOrderByEnabledChange = useCallback((enabled: boolean) => { const newInputs = produce(inputs, (draft) => { draft.order_by.enabled = enabled + if (enabled) { + draft.order_by.value = OrderBy.ASC + if (hasSubVariable && !draft.order_by.key) + draft.order_by.key = 'name' + } }) setInputs(newInputs) - }, [inputs, setInputs]) + }, [hasSubVariable, inputs, setInputs]) const handleOrderByKeyChange = useCallback((key: string) => { const newInputs = produce(inputs, (draft) => { diff --git a/web/i18n/en-US/workflow.ts b/web/i18n/en-US/workflow.ts index 3ca5f1fbcb..b89c11aefc 100644 --- a/web/i18n/en-US/workflow.ts +++ b/web/i18n/en-US/workflow.ts @@ -562,6 +562,8 @@ const translation = { listFilter: { inputVar: 'Input Variable', filterCondition: 'Filter Condition', + filterConditionComparisonOperator: 'Filter Condition Comparison Operator', + filterConditionComparisonValue: 'Filter Condition value', selectVariableKeyPlaceholder: 'Select sub variable key', limit: 'Limit', orderBy: 'Order by', diff --git a/web/i18n/zh-Hans/workflow.ts b/web/i18n/zh-Hans/workflow.ts index 38278d55f2..0307a81090 100644 --- a/web/i18n/zh-Hans/workflow.ts +++ b/web/i18n/zh-Hans/workflow.ts @@ -562,6 +562,8 @@ const translation = { listFilter: { inputVar: '输入变量', filterCondition: '过滤条件', + filterConditionComparisonOperator: '过滤条件比较操作符', + filterConditionComparisonValue: '过滤条件比较值', selectVariableKeyPlaceholder: '选择子变量的 Key', limit: '限制', orderBy: '排序',