From 39154b90376fc26b40d72cb758d63aefc64e7141 Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Tue, 28 Apr 2026 16:53:59 +0300 Subject: [PATCH] refactor(editor): Move node issues to workflow document store (no-changelog) (#29390) --- .../WorkflowHeaderDraftPublishActions.test.ts | 1 - .../WorkflowHeaderDraftPublishActions.vue | 26 ++-- .../MainHeader/WorkflowPublishModal.test.ts | 3 - .../MainHeader/WorkflowPublishModal.vue | 12 +- .../app/composables/useRunWorkflow.test.ts | 24 ++-- .../app/stores/workflowDocument.store.test.ts | 122 ++++++++++++++++ .../src/app/stores/workflowDocument.store.ts | 11 ++ .../useWorkflowDocumentNodesIssues.ts | 83 +++++++++++ .../src/app/stores/workflows.store.test.ts | 135 +----------------- .../src/app/stores/workflows.store.ts | 77 +--------- .../ai/assistant/builder.store.test.ts | 57 ++++---- .../components/Agent/ExecuteMessage.test.ts | 33 ++--- .../components/Agent/ExecuteMessage.vue | 8 +- .../components/Agent/NodeIssueItem.test.ts | 8 +- .../components/Agent/NodeIssueItem.vue | 6 +- .../composables/useBuilderTodos.test.ts | 17 ++- .../assistant/composables/useBuilderTodos.ts | 6 +- 17 files changed, 323 insertions(+), 306 deletions(-) create mode 100644 packages/frontend/editor-ui/src/app/stores/workflowDocument/useWorkflowDocumentNodesIssues.ts diff --git a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.test.ts b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.test.ts index d8c78c4c79c..8b31f114571 100644 --- a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.test.ts +++ b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.test.ts @@ -132,7 +132,6 @@ describe('WorkflowHeaderDraftPublishActions', () => { const setupEnabledPublishButton = (overrides = {}) => { workflowsStore.workflowTriggerNodes = [triggerNode]; - workflowsStore.nodesIssuesExist = false; Object.assign(workflowsStore, overrides); }; diff --git a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.vue b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.vue index 2861f7b9cd6..3754559d011 100644 --- a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.vue +++ b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowHeaderDraftPublishActions.vue @@ -93,6 +93,12 @@ const containsTrigger = computed((): boolean => { return foundTriggers.value.length > 0; }); +const nodesWithValidationIssues = computed( + () => workflowDocumentStore.value.nodesWithValidationIssues, +); + +const hasNodeIssues = computed(() => workflowDocumentStore.value.hasNodeValidationIssues); + type WorkflowPublishState = | 'not-published-not-eligible' // No trigger nodes or has errors | 'not-published-eligible' // Can be published for first time @@ -109,7 +115,7 @@ const workflowPublishState = computed((): WorkflowPublishState => { // Not published states if (!hasBeenPublished) { - const canPublish = containsTrigger.value && !workflowsStore.nodesIssuesExist; + const canPublish = containsTrigger.value && !hasNodeIssues.value; return canPublish ? 'not-published-eligible' : 'not-published-not-eligible'; } @@ -118,7 +124,7 @@ const workflowPublishState = computed((): WorkflowPublishState => { return 'published-invalid-trigger'; } - if (workflowsStore.nodesIssuesExist) { + if (hasNodeIssues.value) { return 'published-node-issues'; } @@ -207,15 +213,15 @@ const publishButtonConfig = computed(() => { if (props.isNewWorkflow) { return { text: i18n.baseText('workflows.publish'), - enabled: containsTrigger.value && !workflowsStore.nodesIssuesExist, + enabled: containsTrigger.value && !hasNodeIssues.value, showIndicator: false, indicatorClass: '', tooltip: !containsTrigger.value ? i18n.baseText('workflows.publishModal.noTriggerMessage') - : workflowsStore.nodesIssuesExist + : hasNodeIssues.value ? i18n.baseText('workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title', { - interpolate: { count: workflowsStore.nodesWithIssues.length }, - adjustToNumber: workflowsStore.nodesWithIssues.length, + interpolate: { count: nodesWithValidationIssues.value.length }, + adjustToNumber: nodesWithValidationIssues.value.length, }) : '', showVersionInfo: false, @@ -232,8 +238,8 @@ const publishButtonConfig = computed(() => { tooltip: !containsTrigger.value ? i18n.baseText('workflows.publishModal.noTriggerMessage') : i18n.baseText('workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title', { - interpolate: { count: workflowsStore.nodesWithIssues.length }, - adjustToNumber: workflowsStore.nodesWithIssues.length, + interpolate: { count: nodesWithValidationIssues.value.length }, + adjustToNumber: nodesWithValidationIssues.value.length, }), showVersionInfo: false, }, @@ -269,8 +275,8 @@ const publishButtonConfig = computed(() => { tooltip: i18n.baseText( 'workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title', { - interpolate: { count: workflowsStore.nodesWithIssues.length }, - adjustToNumber: workflowsStore.nodesWithIssues.length, + interpolate: { count: nodesWithValidationIssues.value.length }, + adjustToNumber: nodesWithValidationIssues.value.length, }, ), showVersionInfo: true, diff --git a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.test.ts b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.test.ts index e4938f80f01..8fb50f92282 100644 --- a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.test.ts +++ b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.test.ts @@ -144,9 +144,6 @@ describe('WorkflowPublishModal', () => { }, ]; - workflowsStore.nodesIssuesExist = false; - workflowsStore.nodesWithIssues = []; - mockPublishWorkflow.mockReset().mockResolvedValue({ success: true, errorHandled: false, diff --git a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.vue b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.vue index 5ce9469459e..ce0d15b3fb2 100644 --- a/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.vue +++ b/packages/frontend/editor-ui/src/app/components/MainHeader/WorkflowPublishModal.vue @@ -64,7 +64,11 @@ const wfHasAnyChanges = computed(() => { ); }); -const hasNodeIssues = computed(() => workflowsStore.nodesIssuesExist); +const nodesWithValidationIssues = computed( + () => workflowDocumentStore.value.nodesWithValidationIssues, +); + +const hasNodeIssues = computed(() => workflowDocumentStore.value.hasNodeValidationIssues); const inputsDisabled = computed(() => { return ( @@ -289,12 +293,12 @@ async function handlePublish() { {{ i18n.baseText('workflowActivator.showMessage.activeChangedNodesIssuesExistTrue.title', { - interpolate: { count: workflowsStore.nodesWithIssues.length }, - adjustToNumber: workflowsStore.nodesWithIssues.length, + interpolate: { count: nodesWithValidationIssues.length }, + adjustToNumber: nodesWithValidationIssues.length, }) }}