diff --git a/packages/frontend/editor-ui/src/stores/workflows.store.test.ts b/packages/frontend/editor-ui/src/stores/workflows.store.test.ts index 409ce3523f..b8426eb475 100644 --- a/packages/frontend/editor-ui/src/stores/workflows.store.test.ts +++ b/packages/frontend/editor-ui/src/stores/workflows.store.test.ts @@ -1042,7 +1042,36 @@ describe('useWorkflowsStore', () => { }, ], }, - pinData: {}, + pinData: { + [nodeName]: [ + { + json: { + foo: 'bar', + }, + pairedItem: [ + { + item: 0, + sourceOverwrite: { + previousNode: "When clicking 'Test workflow'", + }, + }, + ], + }, + ], + 'Edit Fields': [ + { + json: { + bar: 'foo', + }, + pairedItem: { + item: 1, + sourceOverwrite: { + previousNode: nodeName, + }, + }, + }, + ], + }, lastNodeExecuted: 'Edit Fields', }, }, @@ -1057,6 +1086,37 @@ describe('useWorkflowsStore', () => { typeVersion: 3.4, }); + workflowsStore.workflow.pinData = { + [nodeName]: [ + { + json: { + foo: 'bar', + }, + pairedItem: { + item: 2, + sourceOverwrite: { + previousNode: "When clicking 'Test workflow'", + }, + }, + }, + ], + 'Edit Fields': [ + { + json: { + bar: 'foo', + }, + pairedItem: [ + { + item: 3, + sourceOverwrite: { + previousNode: nodeName, + }, + }, + ], + }, + ], + }; + workflowsStore.renameNodeSelectedAndExecution({ old: nodeName, new: newName }); expect(workflowsStore.nodeMetadata[nodeName]).not.toBeDefined(); @@ -1072,6 +1132,32 @@ describe('useWorkflowsStore', () => { previousNode: newName, }, ]); + expect( + workflowsStore.workflowExecutionData?.data?.resultData.pinData?.[nodeName], + ).not.toBeDefined(); + expect( + workflowsStore.workflowExecutionData?.data?.resultData.pinData?.[newName], + ).toBeDefined(); + expect( + workflowsStore.workflowExecutionData?.data?.resultData.pinData?.['Edit Fields'][0] + .pairedItem, + ).toEqual({ + item: 1, + sourceOverwrite: { + previousNode: newName, + }, + }); + + expect(workflowsStore.workflow.pinData?.[nodeName]).not.toBeDefined(); + expect(workflowsStore.workflow.pinData?.[newName]).toBeDefined(); + expect(workflowsStore.workflow.pinData?.['Edit Fields'][0].pairedItem).toEqual([ + { + item: 3, + sourceOverwrite: { + previousNode: newName, + }, + }, + ]); }); }); }); diff --git a/packages/frontend/editor-ui/src/stores/workflows.store.ts b/packages/frontend/editor-ui/src/stores/workflows.store.ts index 4f649e8340..1dc87a5e2c 100644 --- a/packages/frontend/editor-ui/src/stores/workflows.store.ts +++ b/packages/frontend/editor-ui/src/stores/workflows.store.ts @@ -1180,10 +1180,10 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { // If node has any WorkflowResultData rename also that one that the data // does still get displayed also after node got renamed - if (workflowExecutionData.value?.data?.resultData.runData[nameData.old]) { - workflowExecutionData.value.data.resultData.runData[nameData.new] = - workflowExecutionData.value.data.resultData.runData[nameData.old]; - delete workflowExecutionData.value.data.resultData.runData[nameData.old]; + const runData = workflowExecutionData.value?.data?.resultData?.runData; + if (runData?.[nameData.old]) { + runData[nameData.new] = runData[nameData.old]; + delete runData[nameData.old]; } // In case the renamed node was last selected set it also there with the new name @@ -1194,7 +1194,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { const { [nameData.old]: removed, ...rest } = nodeMetadata.value; nodeMetadata.value = { ...rest, [nameData.new]: nodeMetadata.value[nameData.old] }; - if (workflow.value.pinData && workflow.value.pinData.hasOwnProperty(nameData.old)) { + if (workflow.value.pinData?.[nameData.old]) { const { [nameData.old]: renamed, ...restPinData } = workflow.value.pinData; workflow.value = { ...workflow.value, @@ -1205,8 +1205,33 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { }; } + const resultData = workflowExecutionData.value?.data?.resultData; + if (resultData?.pinData?.[nameData.old]) { + resultData.pinData[nameData.new] = resultData.pinData[nameData.old]; + delete resultData.pinData[nameData.old]; + } + + // Update the name in pinData + Object.values(workflow.value.pinData ?? {}) + .concat(Object.values(workflowExecutionData.value?.data?.resultData.pinData ?? {})) + .flatMap((executionData) => + executionData.flatMap((nodeExecution) => + Array.isArray(nodeExecution.pairedItem) + ? nodeExecution.pairedItem + : [nodeExecution.pairedItem], + ), + ) + .forEach((pairedItem) => { + if ( + typeof pairedItem === 'number' || + pairedItem?.sourceOverwrite?.previousNode !== nameData.old + ) + return; + pairedItem.sourceOverwrite.previousNode = nameData.new; + }); + Object.values(workflowExecutionData.value?.data?.resultData.runData ?? {}) - .flatMap((taskData) => taskData.map((task) => task.source).flat()) + .flatMap((taskData) => taskData.flatMap((task) => task.source)) .forEach((source) => { if (!source || source.previousNode !== nameData.old) return; source.previousNode = nameData.new;