From 2107de2f4a4a6f2dbb326af9f4e718b5a7bfd04f Mon Sep 17 00:00:00 2001 From: Alex Grozav Date: Wed, 10 Jul 2024 11:53:27 +0300 Subject: [PATCH] feat(editor): Add stop current execution button in new canvas (no-changelog) (#9968) --- .../CanvasExecuteWorkflowButton.spec.ts | 33 ++++++++++++ .../buttons/CanvasExecuteWorkflowButton.vue | 27 ++++++---- .../CanvasStopCurrentExecutionButton.spec.ts | 22 ++++++++ .../CanvasStopCurrentExecutionButton.vue | 28 ++++++++++ .../CanvasStopWaitingForWebhookButton.spec.ts | 12 +++++ .../CanvasStopWaitingForWebhookButton.vue | 15 ++++++ .../CanvasExecuteWorkflowButton.spec.ts.snap | 7 +++ ...vasStopCurrentExecutionButton.spec.ts.snap | 7 +++ ...asStopWaitingForWebhookButton.spec.ts.snap | 7 +++ .../__tests__/useCanvasOperations.spec.ts | 21 +++++--- .../src/composables/useCanvasOperations.ts | 39 +++++++++----- .../src/composables/useNodeHelpers.ts | 1 + .../src/composables/useRunWorkflow.ts | 10 ++++ .../src/composables/useWorkflowHelpers.ts | 6 +-- packages/editor-ui/src/views/NodeView.v2.vue | 52 ++++++++++++++++--- 15 files changed, 245 insertions(+), 42 deletions(-) create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.spec.ts create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/CanvasStopCurrentExecutionButton.spec.ts create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/CanvasStopCurrentExecutionButton.vue create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/CanvasStopWaitingForWebhookButton.spec.ts create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/CanvasStopWaitingForWebhookButton.vue create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/__snapshots__/CanvasExecuteWorkflowButton.spec.ts.snap create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/__snapshots__/CanvasStopCurrentExecutionButton.spec.ts.snap create mode 100644 packages/editor-ui/src/components/canvas/elements/buttons/__snapshots__/CanvasStopWaitingForWebhookButton.spec.ts.snap diff --git a/packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.spec.ts b/packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.spec.ts new file mode 100644 index 000000000..71db48cb9 --- /dev/null +++ b/packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.spec.ts @@ -0,0 +1,33 @@ +import { createComponentRenderer } from '@/__tests__/render'; +import CanvasExecuteWorkflowButton from './CanvasExecuteWorkflowButton.vue'; + +const renderComponent = createComponentRenderer(CanvasExecuteWorkflowButton); + +describe('CanvasExecuteWorkflowButton', () => { + it('should render correctly', () => { + const wrapper = renderComponent(); + + expect(wrapper.html()).toMatchSnapshot(); + }); + + it('should render different label when executing', () => { + const wrapper = renderComponent({ + props: { + executing: true, + }, + }); + + expect(wrapper.getAllByText('Executing workflow')).toHaveLength(2); + }); + + it('should render different label when executing and waiting for webhook', () => { + const wrapper = renderComponent({ + props: { + executing: true, + waitingForWebhook: true, + }, + }); + + expect(wrapper.getAllByText('Waiting for trigger event')).toHaveLength(2); + }); +}); diff --git a/packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.vue b/packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.vue index 1ef7ef786..65a1312e5 100644 --- a/packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.vue +++ b/packages/editor-ui/src/components/canvas/elements/buttons/CanvasExecuteWorkflowButton.vue @@ -2,31 +2,36 @@ import KeyboardShortcutTooltip from '@/components/KeyboardShortcutTooltip.vue'; import { computed } from 'vue'; import { useI18n } from '@/composables/useI18n'; -import { useUIStore } from '@/stores/ui.store'; defineEmits<{ click: [event: MouseEvent]; }>(); -const uiStore = useUIStore(); -const locale = useI18n(); +const props = defineProps<{ + waitingForWebhook: boolean; + executing: boolean; +}>(); -const workflowRunning = computed(() => uiStore.isActionActive['workflowRunning']); +const i18n = useI18n(); -const runButtonText = computed(() => { - if (!workflowRunning.value) { - return locale.baseText('nodeView.runButtonText.executeWorkflow'); +const label = computed(() => { + if (!props.executing) { + return i18n.baseText('nodeView.runButtonText.executeWorkflow'); } - return locale.baseText('nodeView.runButtonText.executingWorkflow'); + if (props.waitingForWebhook) { + return i18n.baseText('nodeView.runButtonText.waitingForTriggerEvent'); + } + + return i18n.baseText('nodeView.runButtonText.executingWorkflow'); });