diff --git a/web/app/components/tools/utils/to-form-schema.ts b/web/app/components/tools/utils/to-form-schema.ts index f428e9bca4..4e83248c9b 100644 --- a/web/app/components/tools/utils/to-form-schema.ts +++ b/web/app/components/tools/utils/to-form-schema.ts @@ -18,6 +18,7 @@ export const toolParametersToFormSchemas = (parameters: ToolParameter[]) => { ...parameter, variable: parameter.name, type: toType(parameter.type), + _type: parameter.type, show_on: [], options: parameter.options?.map((option) => { return { diff --git a/web/app/components/workflow/nodes/tool/components/input-var-list.tsx b/web/app/components/workflow/nodes/tool/components/input-var-list.tsx index 125ca21afb..e756b8eb67 100644 --- a/web/app/components/workflow/nodes/tool/components/input-var-list.tsx +++ b/web/app/components/workflow/nodes/tool/components/input-var-list.tsx @@ -16,6 +16,7 @@ type Props = { schema: CredentialFormSchema[] value: ToolVarInput[] onChange: (value: ToolVarInput[]) => void + onOpen?: (index: number) => void isSupportConstantValue?: boolean filterVar?: (payload: Var, valueSelector: ValueSelector) => boolean } @@ -26,6 +27,7 @@ const InputVarList: FC = ({ schema, value, onChange, + onOpen = () => { }, isSupportConstantValue, filterVar, }) => { @@ -67,6 +69,9 @@ const InputVarList: FC = ({ } }, [value, onChange, isSupportConstantValue]) + const handleOpen = useCallback((index: number) => { + return () => onOpen(index) + }, [onOpen]) return (
{ @@ -76,7 +81,7 @@ const InputVarList: FC = ({ type, required, tooltip, - }) => { + }, index) => { const varInput = keyValues[variable] return (
@@ -91,6 +96,7 @@ const InputVarList: FC = ({ nodeId={nodeId} value={varInput?.variable_type === VarKindType.static ? (varInput?.value || '') : (varInput?.value_selector || [])} onChange={handleChange(variable)} + onOpen={handleOpen(index)} isSupportConstantValue={isSupportConstantValue} defaultVarKindType={varInput?.variable_type} filterVar={filterVar} diff --git a/web/app/components/workflow/nodes/tool/panel.tsx b/web/app/components/workflow/nodes/tool/panel.tsx index aace9874af..78f59dfadc 100644 --- a/web/app/components/workflow/nodes/tool/panel.tsx +++ b/web/app/components/workflow/nodes/tool/panel.tsx @@ -28,6 +28,7 @@ const Panel: FC> = ({ inputs, toolInputVarSchema, setInputVar, + handleOnVarOpen, filterVar, toolSettingSchema, toolSettingValue, @@ -83,6 +84,7 @@ const Panel: FC> = ({ onChange={setInputVar} filterVar={filterVar} isSupportConstantValue + onOpen={handleOnVarOpen} /> )} diff --git a/web/app/components/workflow/nodes/tool/use-config.ts b/web/app/components/workflow/nodes/tool/use-config.ts index 82d3396a9c..d83b4ff3bd 100644 --- a/web/app/components/workflow/nodes/tool/use-config.ts +++ b/web/app/components/workflow/nodes/tool/use-config.ts @@ -101,11 +101,19 @@ const useConfig = (id: string, payload: ToolNodeType) => { }) }, [inputs, setInputs]) - // TODO: dynamic setting as the current var type - const filterVar = useCallback((varPayload: Var) => { - return varPayload.type !== VarVarType.arrayFile + const [currVarIndex, setCurrVarIndex] = useState(-1) + const currVarType = toolInputVarSchema[currVarIndex]?._type + const handleOnVarOpen = useCallback((index: number) => { + setCurrVarIndex(index) }, []) + const filterVar = useCallback((varPayload: Var) => { + if (currVarType) + return varPayload.type === currVarType + + return varPayload.type !== VarVarType.arrayFile + }, [currVarType]) + const isLoading = currTool && (isBuiltIn ? !currCollection : false) // single run @@ -170,6 +178,7 @@ const useConfig = (id: string, payload: ToolNodeType) => { setToolSettingValue, toolInputVarSchema, setInputVar, + handleOnVarOpen, filterVar, currCollection, isShowAuthBtn,