feat: file array not sub vars

This commit is contained in:
Joel 2024-08-16 11:39:23 +08:00
parent 581228be74
commit eaa7d114dc
6 changed files with 60 additions and 6 deletions

View File

@ -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'

View File

@ -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) => (

View File

@ -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 = {

View File

@ -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,

View File

@ -420,6 +420,7 @@ const translation = {
'not null': 'is not null',
'in': 'in',
'not in': 'not in',
'all of': 'all of',
},
optionName: {
image: 'Image',

View File

@ -420,6 +420,7 @@ const translation = {
'not null': '不为空',
'in': '是',
'not in': '不是',
'all of': '全部是',
},
optionName: {
image: '图片',