feat: file arrary sub variable select

This commit is contained in:
Joel 2024-08-21 16:22:58 +08:00
parent 91c0657cf6
commit b50e94d681
3 changed files with 22 additions and 7 deletions

View File

@ -461,7 +461,7 @@ export const FILE_STRUCT: Var[] = [
type: VarType.string, type: VarType.string,
}, },
{ {
variable: 'mimetype', variable: 'mime_type',
type: VarType.string, type: VarType.string,
}, },
{ {

View File

@ -93,6 +93,8 @@ const ConditionItem = ({
}, [condition, doUpdateCondition]) }, [condition, doUpdateCondition])
const handleUpdateConditionValue = useCallback((value: string) => { const handleUpdateConditionValue = useCallback((value: string) => {
if (value === condition.value)
return
const newCondition = { const newCondition = {
...condition, ...condition,
value, value,
@ -109,16 +111,28 @@ const ConditionItem = ({
doUpdateCondition(newCondition) doUpdateCondition(newCondition)
}, [condition, doUpdateCondition]) }, [condition, doUpdateCondition])
const isSubVariable = condition.varType === VarType.arrayFile && [ComparisonOperator.contains, ComparisonOperator.notContains].includes(condition.comparison_operator!)
const fileAttr = useMemo(() => {
if (file)
return file
if (isSubVariableKey) {
return {
key: condition.key!,
}
}
return undefined
}, [condition.key, file, isSubVariableKey])
const isSelect = condition.comparison_operator && [ComparisonOperator.in, ComparisonOperator.notIn, ComparisonOperator.allOf].includes(condition.comparison_operator) const isSelect = condition.comparison_operator && [ComparisonOperator.in, ComparisonOperator.notIn, ComparisonOperator.allOf].includes(condition.comparison_operator)
const selectOptions = useMemo(() => { const selectOptions = useMemo(() => {
if (isSelect) { if (isSelect) {
if (file?.key === 'type' || condition.comparison_operator === ComparisonOperator.allOf) { if (fileAttr?.key === 'type' || condition.comparison_operator === ComparisonOperator.allOf) {
return FILE_TYPE_OPTIONS.map(item => ({ return FILE_TYPE_OPTIONS.map(item => ({
name: t(`${optionNameI18NPrefix}.${item.i18nKey}`), name: t(`${optionNameI18NPrefix}.${item.i18nKey}`),
value: item.value, value: item.value,
})) }))
} }
if (file?.key === 'transfer_method') { if (fileAttr?.key === 'transfer_method') {
return TRANSFER_METHOD.map(item => ({ return TRANSFER_METHOD.map(item => ({
name: t(`${optionNameI18NPrefix}.${item.i18nKey}`), name: t(`${optionNameI18NPrefix}.${item.i18nKey}`),
value: item.value, value: item.value,
@ -127,9 +141,8 @@ const ConditionItem = ({
return [] return []
} }
return [] return []
}, [condition.comparison_operator, file?.key, isSelect, t]) }, [condition.comparison_operator, fileAttr?.key, isSelect, t])
const isSubVariable = condition.varType === VarType.arrayFile && [ComparisonOperator.contains, ComparisonOperator.notContains].includes(condition.comparison_operator!)
const isNotInput = isSelect || isSubVariable const isNotInput = isSelect || isSubVariable
const isSubVarSelect = isSubVariableKey const isSubVarSelect = isSubVariableKey
@ -145,6 +158,8 @@ const ConditionItem = ({
draft.varType = VarType.number draft.varType = VarType.number
else else
draft.varType = VarType.string draft.varType = VarType.string
draft.value = ''
draft.comparison_operator = getOperators(undefined, { key })[0] draft.comparison_operator = getOperators(undefined, { key })[0]
}) })
@ -202,7 +217,7 @@ const ConditionItem = ({
varType={condition.varType} varType={condition.varType}
value={condition.comparison_operator} value={condition.comparison_operator}
onSelect={handleUpdateConditionOperator} onSelect={handleUpdateConditionOperator}
file={isSubVariableKey ? { key: condition.key! } : file} file={fileAttr}
/> />
</div> </div>
{ {

View File

@ -54,7 +54,7 @@ export const getOperators = (type?: VarType, file?: { key: string }) => {
ComparisonOperator.contains, ComparisonOperator.contains,
ComparisonOperator.notContains, ComparisonOperator.notContains,
] ]
case 'mimetype': case 'mime_type':
return [ return [
ComparisonOperator.contains, ComparisonOperator.contains,
ComparisonOperator.notContains, ComparisonOperator.notContains,