fix(editor): Fix node renaming in pinned data (#15482)

This commit is contained in:
Csaba Tuncsik
2025-05-19 09:37:04 +02:00
committed by GitHub
parent a1ee96d560
commit fc17cdece2
2 changed files with 118 additions and 7 deletions

View File

@@ -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,
},
},
]);
});
});
});

View File

@@ -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;