From 574cff16ed6670456b84122a489b44f65c713deb Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Fri, 27 Sep 2024 16:15:15 +0300 Subject: [PATCH] fix(editor): Fix bug causing node issues to not be assigned before first interaction (no-changelog) (#10980) --- .../__tests__/NodeDetailsView.test.ts | 1 + .../src/composables/useCanvasMapping.ts | 2 +- .../src/composables/useCanvasOperations.ts | 14 +++++--- .../editor-ui/src/stores/workflows.store.ts | 34 +++---------------- packages/editor-ui/src/views/NodeView.v2.vue | 10 +++--- 5 files changed, 22 insertions(+), 39 deletions(-) diff --git a/packages/editor-ui/src/components/__tests__/NodeDetailsView.test.ts b/packages/editor-ui/src/components/__tests__/NodeDetailsView.test.ts index e970ea964..65caf45cc 100644 --- a/packages/editor-ui/src/components/__tests__/NodeDetailsView.test.ts +++ b/packages/editor-ui/src/components/__tests__/NodeDetailsView.test.ts @@ -33,6 +33,7 @@ async function createPiniaWithActiveNode() { nodeTypesStore.setNodeTypes(defaultNodeDescriptions); workflowsStore.workflow = workflow; + workflowsStore.nodeMetadata[node.name] = { pristine: true }; ndvStore.activeNodeName = node.name; await useSettingsStore().getSettings(); diff --git a/packages/editor-ui/src/composables/useCanvasMapping.ts b/packages/editor-ui/src/composables/useCanvasMapping.ts index 65d2c9ccb..bd5ef81ed 100644 --- a/packages/editor-ui/src/composables/useCanvasMapping.ts +++ b/packages/editor-ui/src/composables/useCanvasMapping.ts @@ -373,7 +373,7 @@ export function useCanvasMapping({ subtitle: nodeSubtitleById.value[node.id] ?? '', type: node.type, typeVersion: node.typeVersion, - disabled: !!node.disabled, + disabled: node.disabled, inputs: nodeInputsById.value[node.id] ?? [], outputs: nodeOutputsById.value[node.id] ?? [], connections: { diff --git a/packages/editor-ui/src/composables/useCanvasOperations.ts b/packages/editor-ui/src/composables/useCanvasOperations.ts index c27ba12db..2851b8aae 100644 --- a/packages/editor-ui/src/composables/useCanvasOperations.ts +++ b/packages/editor-ui/src/composables/useCanvasOperations.ts @@ -589,6 +589,12 @@ export function useCanvasOperations({ router }: { router: ReturnType { + nodeHelpers.updateNodeInputIssues(sourceNode); + nodeHelpers.updateNodeInputIssues(targetNode); + }); uiStore.stateIsDirty = true; } diff --git a/packages/editor-ui/src/stores/workflows.store.ts b/packages/editor-ui/src/stores/workflows.store.ts index c8464a5d4..6a5cb221a 100644 --- a/packages/editor-ui/src/stores/workflows.store.ts +++ b/packages/editor-ui/src/stores/workflows.store.ts @@ -989,15 +989,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { function updateNodeAtIndex(nodeIndex: number, nodeData: Partial): void { if (nodeIndex !== -1) { - const node = workflow.value.nodes[nodeIndex]; - workflow.value = { - ...workflow.value, - nodes: [ - ...workflow.value.nodes.slice(0, nodeIndex), - { ...node, ...nodeData }, - ...workflow.value.nodes.slice(nodeIndex + 1), - ], - }; + Object.assign(workflow.value.nodes[nodeIndex], nodeData); } } @@ -1023,12 +1015,6 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { issues: remainingNodeIssues, }); } else { - if (node.issues === undefined) { - updateNodeAtIndex(nodeIndex, { - issues: {}, - }); - } - updateNodeAtIndex(nodeIndex, { issues: { ...node.issues, @@ -1053,7 +1039,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { workflow.value.nodes.push(nodeData); // Init node metadata if (!nodeMetadata.value[nodeData.name]) { - nodeMetadata.value = { ...nodeMetadata.value, [nodeData.name]: {} as INodeMetadata }; + nodeMetadata.value[nodeData.name] = {} as INodeMetadata; } } @@ -1158,13 +1144,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { parameters: newParameters as INodeParameters, }); - nodeMetadata.value = { - ...nodeMetadata.value, - [node.name]: { - ...nodeMetadata.value[node.name], - parametersLastUpdatedAt: Date.now(), - }, - } as NodeMetadataMap; + nodeMetadata.value[node.name].parametersLastUpdatedAt = Date.now(); } function setLastNodeParameters(updateInformation: IUpdateInformation): void { @@ -1484,13 +1464,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => { } function setNodePristine(nodeName: string, isPristine: boolean): void { - nodeMetadata.value = { - ...nodeMetadata.value, - [nodeName]: { - ...nodeMetadata.value[nodeName], - pristine: isPristine, - }, - }; + nodeMetadata.value[nodeName].pristine = isPristine; } function resetChatMessages(): void { diff --git a/packages/editor-ui/src/views/NodeView.v2.vue b/packages/editor-ui/src/views/NodeView.v2.vue index 1c0f9b830..2d480fb99 100644 --- a/packages/editor-ui/src/views/NodeView.v2.vue +++ b/packages/editor-ui/src/views/NodeView.v2.vue @@ -319,12 +319,14 @@ async function initializeRoute() { await initializeWorkspaceForExistingWorkflow(workflowId.value); - nodeHelpers.updateNodesInputIssues(); - nodeHelpers.updateNodesCredentialsIssues(); - nodeHelpers.updateNodesParameterIssues(); - await loadCredentials(); await initializeDebugMode(); + + void nextTick(() => { + nodeHelpers.updateNodesInputIssues(); + nodeHelpers.updateNodesCredentialsIssues(); + nodeHelpers.updateNodesParameterIssues(); + }); } }