Skip to content

Commit 57d7b5e

Browse files
authored
fix(editor): Fix Execute workflow button hover state (#15518)
1 parent 0398505 commit 57d7b5e

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

packages/frontend/editor-ui/src/components/KeyboardShortcutTooltip.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ interface Props {
77
label: string;
88
shortcut?: KeyboardShortcut;
99
placement?: Placement;
10+
disabled?: boolean;
1011
}
1112
withDefaults(defineProps<Props>(), { placement: 'top', shortcut: undefined });
1213
</script>
1314

1415
<template>
15-
<N8nTooltip :placement="placement" :show-after="500">
16+
<N8nTooltip :placement="placement" :show-after="500" :disabled>
1617
<template #content>
1718
<div :class="$style.shortcut">
1819
<div :class="$style.label">{{ label }}</div>

packages/frontend/editor-ui/src/components/canvas/elements/buttons/CanvasRunWorkflowButton.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { createComponentRenderer } from '@/__tests__/render';
22
import CanvasRunWorkflowButton from './CanvasRunWorkflowButton.vue';
3+
import userEvent from '@testing-library/user-event';
4+
import { waitFor } from '@testing-library/vue';
35

46
const renderComponent = createComponentRenderer(CanvasRunWorkflowButton);
57

@@ -30,4 +32,22 @@ describe('CanvasRunWorkflowButton', () => {
3032

3133
expect(wrapper.getAllByText('Waiting for trigger event')).toHaveLength(2);
3234
});
35+
36+
it("should only show the tooltip when it's not executing", async () => {
37+
const wrapper = renderComponent({ props: { executing: false } });
38+
await userEvent.hover(wrapper.getByRole('button'));
39+
40+
function isTooltipVisible(isVisible: boolean) {
41+
return wrapper.baseElement.querySelector(
42+
`[id^="el-popper-container"] div[aria-hidden="${!isVisible}"]`,
43+
);
44+
}
45+
46+
await waitFor(() => expect(isTooltipVisible(true)).toBeTruthy());
47+
48+
await wrapper.rerender({ executing: true });
49+
await userEvent.hover(wrapper.getByRole('button'));
50+
51+
await waitFor(() => expect(isTooltipVisible(false)).toBeTruthy());
52+
});
3353
});

packages/frontend/editor-ui/src/components/canvas/elements/buttons/CanvasRunWorkflowButton.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<script setup lang="ts">
22
import KeyboardShortcutTooltip from '@/components/KeyboardShortcutTooltip.vue';
3-
import { computed } from 'vue';
43
import { useI18n } from '@/composables/useI18n';
4+
import { computed } from 'vue';
55
66
defineEmits<{
77
mouseenter: [event: MouseEvent];
@@ -31,7 +31,11 @@ const label = computed(() => {
3131
</script>
3232

3333
<template>
34-
<KeyboardShortcutTooltip :label="label" :shortcut="{ metaKey: true, keys: ['↵'] }">
34+
<KeyboardShortcutTooltip
35+
:label="label"
36+
:shortcut="{ metaKey: true, keys: ['↵'] }"
37+
:disabled="executing"
38+
>
3539
<N8nButton
3640
:loading="executing"
3741
:label="label"

0 commit comments

Comments
 (0)