mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-19 05:15:53 +08:00
feat: file array not sub vars
This commit is contained in:
parent
581228be74
commit
eaa7d114dc
@ -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 (
|
||||
<div className='flex mb-1 last-of-type:mb-0'>
|
||||
<div className={cn(
|
||||
@ -124,7 +129,7 @@ const ConditionItem = ({
|
||||
/>
|
||||
</div>
|
||||
{
|
||||
!comparisonOperatorNotRequireValue(condition.comparison_operator) && !isSelect && condition.varType !== VarType.number && (
|
||||
!comparisonOperatorNotRequireValue(condition.comparison_operator) && !isNotInput && condition.varType !== VarType.number && (
|
||||
<div className='px-2 py-1 max-h-[100px] border-t border-t-divider-subtle overflow-y-auto'>
|
||||
<ConditionInput
|
||||
disabled={disabled}
|
||||
@ -137,7 +142,7 @@ const ConditionItem = ({
|
||||
)
|
||||
}
|
||||
{
|
||||
!comparisonOperatorNotRequireValue(condition.comparison_operator) && !isSelect && condition.varType === VarType.number && (
|
||||
!comparisonOperatorNotRequireValue(condition.comparison_operator) && !isNotInput && condition.varType === VarType.number && (
|
||||
<div className='px-2 py-1 pt-[3px] border-t border-t-divider-subtle'>
|
||||
<ConditionNumberInput
|
||||
numberVarType={condition.numberVarType}
|
||||
@ -162,6 +167,31 @@ const ConditionItem = ({
|
||||
</div>
|
||||
)
|
||||
}
|
||||
{
|
||||
!comparisonOperatorNotRequireValue(condition.comparison_operator) && isSubVariable && (
|
||||
<div className='p-1'>
|
||||
<ConditionWrap
|
||||
isSubVariable
|
||||
readOnly={!!disabled}
|
||||
nodeId=''
|
||||
cases={[{
|
||||
case_id: '0',
|
||||
conditions: [],
|
||||
logical_operator: LogicalOperator.and,
|
||||
}]}
|
||||
handleRemoveCase={() => { }}
|
||||
handleAddCondition={() => { }}
|
||||
handleUpdateCondition={() => { }}
|
||||
handleRemoveCondition={() => { }}
|
||||
handleUpdateConditionLogicalOperator={() => { }}
|
||||
nodesOutputVars={[]}
|
||||
availableNodes={[]}
|
||||
varsIsVarFileAttribute={{}}
|
||||
filterVar={() => true}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
<div
|
||||
className='shrink-0 flex items-center justify-center ml-1 mt-1 w-6 h-6 rounded-lg cursor-pointer hover:bg-state-destructive-hover text-text-tertiary hover:text-text-destructive'
|
||||
|
@ -17,6 +17,7 @@ import cn from '@/utils/classnames'
|
||||
import Button from '@/app/components/base/button'
|
||||
|
||||
type Props = {
|
||||
isSubVariable?: boolean
|
||||
nodeId: string
|
||||
cases: CaseItem[]
|
||||
readOnly: boolean
|
||||
@ -33,10 +34,11 @@ type Props = {
|
||||
}
|
||||
|
||||
const ConditionWrap: FC<Props> = ({
|
||||
isSubVariable,
|
||||
nodeId: id,
|
||||
cases,
|
||||
readOnly,
|
||||
handleSortCase,
|
||||
handleSortCase = () => { },
|
||||
handleUpdateCondition,
|
||||
handleRemoveCondition,
|
||||
handleUpdateConditionLogicalOperator,
|
||||
@ -65,6 +67,7 @@ const ConditionWrap: FC<Props> = ({
|
||||
handle='.handle'
|
||||
ghostClass='bg-components-panel-bg'
|
||||
animation={150}
|
||||
disabled={readOnly || isSubVariable}
|
||||
>
|
||||
{
|
||||
cases.map((item, index) => (
|
||||
|
@ -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 = {
|
||||
|
@ -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,
|
||||
|
@ -420,6 +420,7 @@ const translation = {
|
||||
'not null': 'is not null',
|
||||
'in': 'in',
|
||||
'not in': 'not in',
|
||||
'all of': 'all of',
|
||||
},
|
||||
optionName: {
|
||||
image: 'Image',
|
||||
|
@ -420,6 +420,7 @@ const translation = {
|
||||
'not null': '不为空',
|
||||
'in': '是',
|
||||
'not in': '不是',
|
||||
'all of': '全部是',
|
||||
},
|
||||
optionName: {
|
||||
image: '图片',
|
||||
|
Loading…
x
Reference in New Issue
Block a user