| | import { useCallback, useEffect, useRef } from 'react' |
| | import produce from 'immer' |
| | import useVarList from '../_base/hooks/use-var-list' |
| | import type { Var, Variable } from '../../types' |
| | import { VarType } from '../../types' |
| | import { useStore } from '../../store' |
| | import type { TemplateTransformNodeType } from './types' |
| | import useNodeCrud from '@/app/components/workflow/nodes/_base/hooks/use-node-crud' |
| | import useOneStepRun from '@/app/components/workflow/nodes/_base/hooks/use-one-step-run' |
| | import { |
| | useNodesReadOnly, |
| | } from '@/app/components/workflow/hooks' |
| | import useAvailableVarList from '@/app/components/workflow/nodes/_base/hooks/use-available-var-list' |
| |
|
| | const useConfig = (id: string, payload: TemplateTransformNodeType) => { |
| | const { nodesReadOnly: readOnly } = useNodesReadOnly() |
| | const defaultConfig = useStore(s => s.nodesDefaultConfigs)[payload.type] |
| |
|
| | const { inputs, setInputs: doSetInputs } = useNodeCrud<TemplateTransformNodeType>(id, payload) |
| | const inputsRef = useRef(inputs) |
| | const setInputs = useCallback((newPayload: TemplateTransformNodeType) => { |
| | doSetInputs(newPayload) |
| | inputsRef.current = newPayload |
| | }, [doSetInputs]) |
| |
|
| | const { availableVars } = useAvailableVarList(id, { |
| | onlyLeafNodeVar: false, |
| | filterVar: () => true, |
| | }) |
| |
|
| | const { handleAddVariable: handleAddEmptyVariable } = useVarList<TemplateTransformNodeType>({ |
| | inputs, |
| | setInputs, |
| | }) |
| |
|
| | const handleVarListChange = useCallback((newList: Variable[]) => { |
| | const newInputs = produce(inputsRef.current, (draft: any) => { |
| | draft.variables = newList |
| | }) |
| | setInputs(newInputs) |
| | }, [setInputs]) |
| |
|
| | const handleAddVariable = useCallback((payload: Variable) => { |
| | const newInputs = produce(inputsRef.current, (draft: any) => { |
| | draft.variables.push(payload) |
| | }) |
| | setInputs(newInputs) |
| | }, [setInputs]) |
| |
|
| | |
| | const handleVarNameChange = useCallback((oldName: string, newName: string) => { |
| | const newInputs = produce(inputsRef.current, (draft: any) => { |
| | draft.template = draft.template.replaceAll(`{{ ${oldName} }}`, `{{ ${newName} }}`) |
| | }) |
| | setInputs(newInputs) |
| | }, [setInputs]) |
| |
|
| | useEffect(() => { |
| | if (inputs.template) |
| | return |
| |
|
| | const isReady = defaultConfig && Object.keys(defaultConfig).length > 0 |
| | if (isReady) { |
| | setInputs({ |
| | ...inputs, |
| | ...defaultConfig, |
| | }) |
| | } |
| | |
| | }, [defaultConfig]) |
| |
|
| | const handleCodeChange = useCallback((template: string) => { |
| | const newInputs = produce(inputsRef.current, (draft: any) => { |
| | draft.template = template |
| | }) |
| | setInputs(newInputs) |
| | }, [setInputs]) |
| |
|
| | |
| | const { |
| | isShowSingleRun, |
| | hideSingleRun, |
| | toVarInputs, |
| | runningStatus, |
| | handleRun, |
| | handleStop, |
| | runInputData, |
| | setRunInputData, |
| | runResult, |
| | } = useOneStepRun<TemplateTransformNodeType>({ |
| | id, |
| | data: inputs, |
| | defaultRunInputData: {}, |
| | }) |
| | const varInputs = toVarInputs(inputs.variables) |
| |
|
| | const inputVarValues = (() => { |
| | const vars: Record<string, any> = {} |
| | Object.keys(runInputData) |
| | .forEach((key) => { |
| | vars[key] = runInputData[key] |
| | }) |
| | return vars |
| | })() |
| |
|
| | const setInputVarValues = useCallback((newPayload: Record<string, any>) => { |
| | setRunInputData(newPayload) |
| | }, [setRunInputData]) |
| |
|
| | const filterVar = useCallback((varPayload: Var) => { |
| | return [VarType.string, VarType.number, VarType.object, VarType.array, VarType.arrayNumber, VarType.arrayString, VarType.arrayObject].includes(varPayload.type) |
| | }, []) |
| |
|
| | return { |
| | readOnly, |
| | inputs, |
| | availableVars, |
| | handleVarListChange, |
| | handleVarNameChange, |
| | handleAddVariable, |
| | handleAddEmptyVariable, |
| | handleCodeChange, |
| | filterVar, |
| | |
| | isShowSingleRun, |
| | hideSingleRun, |
| | runningStatus, |
| | handleRun, |
| | handleStop, |
| | varInputs, |
| | inputVarValues, |
| | setInputVarValues, |
| | runResult, |
| | } |
| | } |
| |
|
| | export default useConfig |
| |
|