diff --git a/web/app/components/workflow/nodes/code/use-config.ts b/web/app/components/workflow/nodes/code/use-config.ts index db2ed6fa36..fd72f6b006 100644 --- a/web/app/components/workflow/nodes/code/use-config.ts +++ b/web/app/components/workflow/nodes/code/use-config.ts @@ -1,15 +1,34 @@ -import { useCallback, useEffect } from 'react' +import { useCallback, useEffect, useState } from 'react' import produce from 'immer' import useVarList from '../_base/hooks/use-var-list' import useOutputVarList from '../_base/hooks/use-output-var-list' -import { VarType } from '../../types' +import { BlockEnum, VarType } from '../../types' import type { Var } from '../../types' import { useStore } from '../../store' -import type { CodeLanguage, CodeNodeType } from './types' +import type { CodeNodeType } from './types' +import { CodeLanguage } 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 { fetchNodeDefault } from '@/service/workflow' +import { useStore as useAppStore } from '@/app/components/app/store' const useConfig = (id: string, payload: CodeNodeType) => { + const appId = useAppStore.getState().appDetail?.id + + const [allLanguageDefault, setAllLanguageDefault] = useState | null>(null) + useEffect(() => { + if (appId) { + (async () => { + const { config: javaScriptConfig } = await fetchNodeDefault(appId, BlockEnum.Code, { code_language: CodeLanguage.javascript }) as any + const { config: pythonConfig } = await fetchNodeDefault(appId, BlockEnum.Code, { code_language: CodeLanguage.python3 }) as any + setAllLanguageDefault({ + [CodeLanguage.javascript]: javaScriptConfig as CodeNodeType, + [CodeLanguage.python3]: pythonConfig as CodeNodeType, + } as any) + })() + } + }, [appId]) + const defaultConfig = useStore(s => s.nodesDefaultConfigs)[payload.type] const { inputs, setInputs } = useNodeCrud(id, payload) const { handleVarListChange, handleAddVariable } = useVarList({ @@ -40,10 +59,14 @@ const useConfig = (id: string, payload: CodeNodeType) => { const handleCodeLanguageChange = useCallback((codeLanguage: CodeLanguage) => { const newInputs = produce(inputs, (draft) => { + const currDefaultConfig = allLanguageDefault![codeLanguage] draft.code_language = codeLanguage + draft.code = currDefaultConfig.code + draft.variables = currDefaultConfig.variables + draft.outputs = currDefaultConfig.outputs }) setInputs(newInputs) - }, [inputs, setInputs]) + }, [allLanguageDefault, inputs, setInputs]) const { handleVarsChange, handleAddVariable: handleAddOutputVariable } = useOutputVarList({ inputs, diff --git a/web/service/workflow.ts b/web/service/workflow.ts index 6b95213d9c..0e3aa3a443 100644 --- a/web/service/workflow.ts +++ b/web/service/workflow.ts @@ -7,6 +7,7 @@ import type { NodesDefaultConfigsResponse, WorkflowRunHistoryResponse, } from '@/types/workflow' +import type { BlockEnum } from '@/app/components/workflow/types' export const fetchWorkflowDraft: Fetcher = (url) => { return get(url, {}, { silent: true }) @@ -43,3 +44,9 @@ export const fetchPublishedWorkflow: Fetcher export const stopWorkflowRun = (url: string) => { return post(url) } + +export const fetchNodeDefault = (appId: string, blockType: BlockEnum, query = {}) => { + return get(`apps/${appId}/workflows/default-workflow-block-configs/${blockType}`, { + params: { q: JSON.stringify(query) }, + }) +}