From 8efc63a705592a52c3f09d70885e9d4d33b1a009 Mon Sep 17 00:00:00 2001 From: Joel Date: Thu, 29 Aug 2024 16:36:18 +0800 Subject: [PATCH] feat: handle value picker in body file selector --- .../variable/var-reference-picker.tsx | 205 ++++++++++-------- .../key-value/key-value-edit/item.tsx | 4 +- 2 files changed, 112 insertions(+), 97 deletions(-) diff --git a/web/app/components/workflow/nodes/_base/components/variable/var-reference-picker.tsx b/web/app/components/workflow/nodes/_base/components/variable/var-reference-picker.tsx index 92771db86c..ecd53b3d05 100644 --- a/web/app/components/workflow/nodes/_base/components/variable/var-reference-picker.tsx +++ b/web/app/components/workflow/nodes/_base/components/variable/var-reference-picker.tsx @@ -8,6 +8,7 @@ import { } from '@remixicon/react' import produce from 'immer' import { useStoreApi } from 'reactflow' +import RemoveButton from '../remove-button' import VarReferencePopup from './var-reference-popup' import { getNodeInfoById, isConversationVar, isENV, isSystemVar } from './utils' import ConstantField from './constant-field' @@ -52,6 +53,8 @@ type Props = { isAddBtnTrigger?: boolean schema?: Partial valueTypePlaceHolder?: string + isInTable?: boolean + onRemove?: () => void } const VarReferencePicker: FC = ({ @@ -71,6 +74,8 @@ const VarReferencePicker: FC = ({ isAddBtnTrigger, schema, valueTypePlaceHolder, + isInTable, + onRemove, }) => { const { t } = useTranslation() const store = useStoreApi() @@ -243,109 +248,117 @@ const VarReferencePicker: FC = ({ if (readonly) return !isConstant ? setOpen(!open) : setControlFocus(Date.now()) - }} className='!flex'> - {isAddBtnTrigger - ? ( -
- { }}> -
- ) - : (
- {isSupportConstantValue - ?
{ - e.stopPropagation() - setOpen(false) - setControlFocus(Date.now()) - }} className='h-full mr-1 flex items-center space-x-1'> - -
{varKindTypes.find(item => item.value === varKindType)?.label}
- -
- } - popupClassName='top-8' - readonly={readonly} - value={varKindType} - options={varKindTypes} - onChange={handleVarKindTypeChange} - showChecked - /> + }} className='!flex group/picker-trigger-wrap relative'> + <> + {isAddBtnTrigger + ? ( +
+ { }}>
- : (!hasValue &&
- -
)} - {isConstant - ? ( - void)} - schema={schema as CredentialFormSchema} - readonly={readonly} - /> - ) - : ( - { - if (readonly) - return - !isConstant ? setOpen(!open) : setControlFocus(Date.now()) - }} - className='grow h-full' - > -
-
- {hasValue - ? ( - <> - {isShowNodeName && !isEnv && !isChatVar && ( -
-
- + ) + : (
+ {isSupportConstantValue + ?
{ + e.stopPropagation() + setOpen(false) + setControlFocus(Date.now()) + }} className='h-full mr-1 flex items-center space-x-1'> + +
{varKindTypes.find(item => item.value === varKindType)?.label}
+ +
+ } + popupClassName='top-8' + readonly={readonly} + value={varKindType} + options={varKindTypes} + onChange={handleVarKindTypeChange} + showChecked + /> +
+ : (!hasValue &&
+ +
)} + {isConstant + ? ( + void)} + schema={schema as CredentialFormSchema} + readonly={readonly} + /> + ) + : ( + { + if (readonly) + return + !isConstant ? setOpen(!open) : setControlFocus(Date.now()) + }} + className='grow h-full' + > +
+
+ {hasValue + ? ( + <> + {isShowNodeName && !isEnv && !isChatVar && ( +
+
+ +
+
{outputVarNode?.title}
+
-
{outputVarNode?.title}
- + )} +
+ {!hasValue && } + {isEnv && } + {isChatVar && } +
{varName}
- )} -
- {!hasValue && } - {isEnv && } - {isChatVar && } -
{varName}
-
-
{type}
- - ) - :
{t('workflow.common.setVarValuePlaceholder')}
} +
{type}
+ + ) + :
{t('workflow.common.setVarValuePlaceholder')}
} +
-
- + + )} + {(hasValue && !readonly && !isInTable) && (
+ +
)} + {!hasValue && valueTypePlaceHolder && ( + )} - {(hasValue && !readonly) && (
-
)} - {!hasValue && valueTypePlaceHolder && ( - - )} -
)} + {!readonly && isInTable && ( + onRemove?.()} + /> + )} + = ({ }) onChange(newPayload) } - }, [onChange, onAdd, isLastItem, payload]) + }, [onChange, payload]) const filterOnlyFileVariable = (varPayload: Var) => { return [VarType.file, VarType.arrayFile].includes(varPayload.type) @@ -109,6 +109,8 @@ const KeyValueItem: FC = ({ value={payload.file || []} onChange={handleChange('file')} filterVar={filterOnlyFileVariable} + isInTable + onRemove={onRemove} /> ) : (