diff --git a/src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.test.ts b/src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.test.ts new file mode 100644 index 000000000..f86fff2bd --- /dev/null +++ b/src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.test.ts @@ -0,0 +1,54 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { isWorkspaceBoardKeepOpenTarget } from './use-workspace-kanban-outside-dismiss' + +class FakeNode { + parentElement: FakeElement | null = null +} + +class FakeElement extends FakeNode { + private readonly attributes: ReadonlySet + + constructor(attributes: readonly string[] = [], parentElement: FakeElement | null = null) { + super() + this.attributes = new Set(attributes) + this.parentElement = parentElement + } + + closest(selector: string): FakeElement | null { + if (this.matches(selector)) { + return this + } + return this.parentElement?.closest(selector) ?? null + } + + private matches(selector: string): boolean { + return selector + .split(',') + .map((part) => part.trim()) + .some((part) => this.attributes.has(part)) + } +} + +describe('workspace kanban outside dismiss keep-open targets', () => { + beforeEach(() => { + vi.stubGlobal('Node', FakeNode) + vi.stubGlobal('Element', FakeElement) + }) + + afterEach(() => { + vi.unstubAllGlobals() + }) + + it('keeps the board open when a Sonner toast action is clicked', () => { + const toast = new FakeElement(['[data-sonner-toast]']) + const action = new FakeElement([], toast) + + expect(isWorkspaceBoardKeepOpenTarget(action as unknown as EventTarget)).toBe(true) + }) + + it('does not keep the board open for generic outside content', () => { + const target = new FakeElement() + + expect(isWorkspaceBoardKeepOpenTarget(target as unknown as EventTarget)).toBe(false) + }) +}) diff --git a/src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.ts b/src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.ts index 7b8228933..d37e9b6cb 100644 --- a/src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.ts +++ b/src/renderer/src/components/sidebar/use-workspace-kanban-outside-dismiss.ts @@ -11,6 +11,7 @@ const WORKSPACE_BOARD_KEEP_OPEN_SELECTOR = [ '[data-slot="popover-content"]', '[data-slot="dialog-content"]', '[data-slot="dialog-overlay"]', + '[data-sonner-toast]', '[role="dialog"][data-state="open"]', '[role="alertdialog"][data-state="open"]', '[role="menu"][data-state="open"]'