diff --git a/packages/global/core/workflow/utils.ts b/packages/global/core/workflow/utils.ts index a775582c402..de1e19aeb82 100644 --- a/packages/global/core/workflow/utils.ts +++ b/packages/global/core/workflow/utils.ts @@ -392,7 +392,13 @@ export function replaceEditorVariable({ } ]; } - return []; + return [ + { + id: item.key, + value: item.value, + nodeId: runningNode.nodeId + } + ]; }); const allVariables = [...globalVariables, ...nodeVariables, ...customInputs]; diff --git a/projects/app/src/components/core/app/VariableEdit.tsx b/projects/app/src/components/core/app/VariableEdit.tsx index 6026e7cf7f9..6f294ccb673 100644 --- a/projects/app/src/components/core/app/VariableEdit.tsx +++ b/projects/app/src/components/core/app/VariableEdit.tsx @@ -289,6 +289,7 @@ const VariableEdit = ({ }} onClick={() => { setValue('type', item.value); + setValue('defaultValue', undefined); }} > { - console.log('defaultValues', defaultValues); reset(defaultValues); }, [defaultValues]); diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useDebug.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useDebug.tsx index 9b8cd0be46b..53fc994cc8e 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useDebug.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useDebug.tsx @@ -1,7 +1,7 @@ import { storeNodes2RuntimeNodes } from '@fastgpt/global/core/workflow/runtime/utils'; import { StoreNodeItemType } from '@fastgpt/global/core/workflow/type/node'; import { RuntimeEdgeItemType, StoreEdgeItemType } from '@fastgpt/global/core/workflow/type/edge'; -import { useCallback, useState, useMemo } from 'react'; +import { useCallback, useState, useMemo, useEffect } from 'react'; import { checkWorkflowNodeAndConnection } from '@/web/core/workflow/utils'; import { useTranslation } from 'next-i18next'; import { useToast } from '@fastgpt/web/hooks/useToast'; @@ -61,6 +61,16 @@ export const useDebug = () => { return variables?.filter((item) => item.type !== VariableInputEnum.custom) || []; }, [appDetail.chatConfig.variables]); + const [defaultGlobalVariables, setDefaultGlobalVariables] = useState>( + filteredVar.reduce( + (acc, item) => { + acc[item.key] = item.defaultValue; + return acc; + }, + {} as Record + ) + ); + const [runtimeNodeId, setRuntimeNodeId] = useState(); const [runtimeNodes, setRuntimeNodes] = useState(); const [runtimeEdges, setRuntimeEdges] = useState(); @@ -126,6 +136,19 @@ export const useDebug = () => { const DebugInputModal = useCallback(() => { if (!runtimeNodes || !runtimeEdges) return <>; + const [currentTab, setCurrentTab] = useState(TabEnum.node); + + // Check if the required global variables exist, if missing, switch to the global variable tab + useEffect(() => { + if ( + filteredVar.some( + (item) => item.required && defaultGlobalVariables && !defaultGlobalVariables[item.key] + ) + ) { + setCurrentTab(TabEnum.global); + } + }, []); + const runtimeNode = runtimeNodes.find((node) => node.nodeId === runtimeNodeId); if (!runtimeNode) return <>; @@ -136,18 +159,21 @@ export const useDebug = () => { }); const variablesForm = useForm>({ - defaultValues: renderInputs.reduce((acc: Record, input) => { - const isReference = checkInputIsReference(input); - if (isReference) { - acc[input.key] = undefined; - } else if (typeof input.value === 'object') { - acc[input.key] = JSON.stringify(input.value, null, 2); - } else { - acc[input.key] = input.value; - } + defaultValues: { + ...renderInputs.reduce((acc: Record, input) => { + const isReference = checkInputIsReference(input); + if (isReference) { + acc[input.key] = undefined; + } else if (typeof input.value === 'object') { + acc[input.key] = JSON.stringify(input.value, null, 2); + } else { + acc[input.key] = input.value; + } - return acc; - }, {}) + return acc; + }, {}), + ...defaultGlobalVariables + } }); const { register, getValues, setValue, handleSubmit } = variablesForm; @@ -158,7 +184,6 @@ export const useDebug = () => { }; const onClickRun = (data: Record) => { - console.log('data', data); onStartNodeDebug({ entryNodeId: runtimeNode.nodeId, runtimeNodes: runtimeNodes.map((node) => @@ -196,11 +221,17 @@ export const useDebug = () => { Object.entries(data).filter(([key]) => filteredVar.some((item) => item.key === key)) ) }); + + // Filter global variables and set them as default global variable values + setDefaultGlobalVariables( + Object.fromEntries( + Object.entries(data).filter(([key]) => filteredVar.some((item) => item.key === key)) + ) + ); + onClose(); }; - const [currentTab, setCurrentTab] = useState(TabEnum.node); - return ( { ); - }, [filteredVar, onStartNodeDebug, runtimeEdges, runtimeNodeId, runtimeNodes, t]); + }, [ + defaultGlobalVariables, + filteredVar, + onStartNodeDebug, + runtimeEdges, + runtimeNodeId, + runtimeNodes, + t + ]); return { DebugInputModal, diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeComment.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeComment.tsx index fd623c2c08e..1604ce8db84 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeComment.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeComment.tsx @@ -80,12 +80,13 @@ const NodeComment = ({ data }: NodeProps) => { menuForbid={{ debug: true }} - border={'none'} - rounded={'none'} - bg={'#D8E9FF'} - boxShadow={ - '0px 4px 10px 0px rgba(19, 51, 107, 0.10), 0px 0px 1px 0px rgba(19, 51, 107, 0.10)' - } + customStyle={{ + border: 'none', + rounded: 'none', + bg: '#D8E9FF', + boxShadow: + '0px 4px 10px 0px rgba(19, 51, 107, 0.10), 0px 0px 1px 0px rgba(19, 51, 107, 0.10)' + }} > } {inputType === FlowNodeInputTypeEnum.select && ( - list={[defaultListValue, ...listValue].map((item) => ({ - label: item.label, - value: item.value - }))} + list={[defaultListValue, ...listValue] + .filter((item) => item.label !== '') + .map((item) => ({ + label: item.label, + value: item.value + }))} value={ defaultValue && listValue.map((item) => item.value).includes(defaultValue) ? defaultValue diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx index 5cda53bc3d6..16ba8424710 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx @@ -41,7 +41,8 @@ type Props = FlowNodeItemType & { copy?: boolean; delete?: boolean; }; -} & Omit; + customStyle?: FlexProps; +}; const NodeCard = (props: Props) => { const { t } = useTranslation(); @@ -65,7 +66,7 @@ const NodeCard = (props: Props) => { isError = false, debugResult, isFolded, - ...customStyle + customStyle } = props; const nodeList = useContextSelector(WorkflowContext, (v) => v.nodeList); const setHoverNodeId = useContextSelector(WorkflowContext, (v) => v.setHoverNodeId);