From 801bf5ff704b48015a29580cfc478026a0b0b9da Mon Sep 17 00:00:00 2001 From: Joel Date: Wed, 28 May 2025 14:10:27 +0800 Subject: [PATCH] fix: iteration and loop debug pass wrong struct --- .../workflow-panel/last-run/use-last-run.ts | 22 ++++++++++++++++++- .../iteration/use-single-run-form-params.ts | 6 +++-- .../nodes/loop/use-single-run-form-params.ts | 13 ++++++----- web/config/index.ts | 2 ++ 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts index b83b8af6b4..00d7eb7306 100644 --- a/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts +++ b/web/app/components/workflow/nodes/_base/components/workflow-panel/last-run/use-last-run.ts @@ -19,6 +19,7 @@ import useLoopSingleRunFormParams from '@/app/components/workflow/nodes/loop/use import useIfElseSingleRunFormParams from '@/app/components/workflow/nodes/if-else/use-single-run-form-params' import useVariableAggregatorSingleRunFormParams from '@/app/components/workflow/nodes/variable-assigner/use-single-run-form-params' import useToolGetDataForCheckMore from '@/app/components/workflow/nodes/tool/use-get-data-for-check-more' +import { VALUE_SELECTOR_DELIMITER as DELIMITER } from '@/config' // import import type { CommonNodeType, ValueSelector } from '@/app/components/workflow/types' @@ -102,6 +103,8 @@ const useLastRun = ({ }: Params) => { const { conversationVars, systemVars, hasSetInspectVar } = useInspectVarsCrud() const blockType = oneStepRunParams.data.type + const isIterationNode = blockType === BlockEnum.Iteration + const isLoopNode = blockType === BlockEnum.Loop const { handleSyncWorkflowDraft } = useNodesSyncDraft() const { getData: getDataForCheckMore, @@ -148,9 +151,26 @@ const useLastRun = ({ loopRunResult, }) + const toSubmitData = useCallback((data: Record) => { + if(!isIterationNode && !isLoopNode) + return data + + const allVarObject = singleRunParams?.allVarObject || {} + const formattedData: Record = {} + Object.keys(allVarObject).forEach((key) => { + const [varSectorStr, nodeId] = key.split(DELIMITER) + formattedData[`${nodeId}.${allVarObject[key].inSingleRunPassedKey}`] = data[varSectorStr] + }) + if(isIterationNode) { + const iteratorInputKey = `${id}.input_selector` + formattedData[iteratorInputKey] = data[iteratorInputKey] + } + return formattedData + }, [isIterationNode, isLoopNode, singleRunParams?.allVarObject, id]) + const callRunApi = async (data: Record) => { await handleSyncWorkflowDraft(true) - doCallRunApi(data) + doCallRunApi(toSubmitData(data)) } const [tabType, setTabType] = useState(TabType.settings) diff --git a/web/app/components/workflow/nodes/iteration/use-single-run-form-params.ts b/web/app/components/workflow/nodes/iteration/use-single-run-form-params.ts index ff686921c4..2a0ab34106 100644 --- a/web/app/components/workflow/nodes/iteration/use-single-run-form-params.ts +++ b/web/app/components/workflow/nodes/iteration/use-single-run-form-params.ts @@ -8,9 +8,9 @@ import { getNodeInfoById, getNodeUsedVarPassToServerKey, getNodeUsedVars, isSyst import { InputVarType } from '@/app/components/workflow/types' import formatTracing from '@/app/components/workflow/run/utils/format-log' import type { NodeTracing } from '@/types/workflow' +import { VALUE_SELECTOR_DELIMITER as DELIMITER } from '@/config' const i18nPrefix = 'workflow.nodes.iteration' -const DELIMITER = '@@@@@' type Params = { id: string, @@ -47,7 +47,7 @@ const useSingleRunFormParams = ({ }) }, [iteratorInputKey, runInputData, setRunInputData]) - const { usedOutVars } = (() => { + const { usedOutVars, allVarObject } = (() => { const vars: ValueSelector[] = [] const varObjs: Record = {} const allVarObject: Record { + const { usedOutVars, allVarObject } = (() => { const vars: ValueSelector[] = [] const varObjs: Record = {} const allVarObject: Record = {} - iterationChildrenNodes.forEach((node) => { + loopChildrenNodes.forEach((node) => { const nodeVars = getNodeUsedVars(node).filter(item => item && item.length > 0) nodeVars.forEach((varSelector) => { if (varSelector[0] === id) { // skip loop node itself variable: item, index @@ -87,6 +86,7 @@ const useSingleRunFormParams = ({ })) return { usedOutVars: res, + allVarObject, } })() @@ -211,6 +211,7 @@ const useSingleRunFormParams = ({ return { forms, nodeInfo, + allVarObject, getDependentVars, } } diff --git a/web/config/index.ts b/web/config/index.ts index af4da76835..78f9d10351 100644 --- a/web/config/index.ts +++ b/web/config/index.ts @@ -315,3 +315,5 @@ export const ENABLE_WEBSITE_FIRECRAWL = process.env.NEXT_PUBLIC_ENABLE_WEBSITE_F export const ENABLE_WEBSITE_WATERCRAWL = process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL !== undefined ? process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL === 'true' : globalThis.document?.body?.getAttribute('data-public-enable-website-watercrawl') === 'true' || true + +export const VALUE_SELECTOR_DELIMITER = '@@@@@'