import { useCallback } from 'react' import produce from 'immer' import useVarList from '../_base/hooks/use-var-list' import useOutputVarList from '../_base/hooks/use-output-var-list' import type { CodeLanguage, CodeNodeType } 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' const useConfig = (id: string, payload: CodeNodeType) => { const { inputs, setInputs } = useNodeCrud(id, payload) const { handleVarListChange, handleAddVariable } = useVarList({ inputs, setInputs, }) const handleCodeChange = useCallback((code: string) => { const newInputs = produce(inputs, (draft) => { draft.code = code }) setInputs(newInputs) }, [inputs, setInputs]) const handleCodeLanguageChange = useCallback((codeLanguage: CodeLanguage) => { const newInputs = produce(inputs, (draft) => { draft.code_language = codeLanguage }) setInputs(newInputs) }, [inputs, setInputs]) const { handleVarsChange, handleAddVariable: handleAddOutputVariable } = useOutputVarList({ inputs, setInputs, }) // single run const { isShowSingleRun, hideSingleRun, toVarInputs, runningStatus, isCompleted, handleRun, handleStop, runInputData, setRunInputData, runResult, } = useOneStepRun({ id, data: inputs, defaultRunInputData: {}, }) const varInputs = toVarInputs(inputs.variables) const inputVarValues = (() => { const vars: Record = {} Object.keys(runInputData) .forEach((key) => { vars[key] = runInputData[key] }) return vars })() const setInputVarValues = useCallback((newPayload: Record) => { setRunInputData(newPayload) }, [runInputData, setRunInputData]) return { inputs, handleVarListChange, handleAddVariable, handleCodeChange, handleCodeLanguageChange, handleVarsChange, handleAddOutputVariable, // single run isShowSingleRun, hideSingleRun, runningStatus, isCompleted, handleRun, handleStop, varInputs, inputVarValues, setInputVarValues, runResult, } } export default useConfig