Skip to content

Commit 2ecc067

Browse files
committed
fix: close linked widget menus on mount
1 parent c04848d commit 2ecc067

3 files changed

Lines changed: 25 additions & 8 deletions

File tree

src/renderer/extensions/vueNodes/widgets/components/WidgetWithControl.test.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createTestingPinia } from '@pinia/testing'
2-
import { fireEvent, render, screen, waitFor } from '@testing-library/vue'
2+
import { render, screen, waitFor } from '@testing-library/vue'
33
import userEvent from '@testing-library/user-event'
44
import PrimeVue from 'primevue/config'
55
import { describe, expect, it, vi } from 'vitest'
@@ -171,9 +171,9 @@ describe('WidgetWithControl', () => {
171171
const update = vi.fn<(value: WidgetValue) => void>()
172172
const widget = makeControlWidget(update, 'randomize')
173173
const { rerender } = mountWithPortal(widget)
174+
const user = userEvent.setup()
174175

175-
// eslint-disable-next-line testing-library/prefer-user-event
176-
await fireEvent.click(await screen.findByTestId('value-control'))
176+
await user.click(await screen.findByTestId('value-control'))
177177
expect(await screen.findAllByRole('radio')).toHaveLength(4)
178178

179179
const linkedWidget: SimplifiedControlWidget = {
@@ -193,7 +193,6 @@ describe('WidgetWithControl', () => {
193193
expect(linkedButton).toBeDisabled()
194194
linkedButton.focus()
195195
expect(linkedButton).not.toHaveFocus()
196-
const user = userEvent.setup()
197196
await user.click(linkedButton)
198197
await user.keyboard('{Enter}')
199198
expect(update).not.toHaveBeenCalled()

src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdown.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ const MockPopover = {
8383
interface MountDropdownOptions {
8484
closeOnDisable?: boolean
8585
disabled?: boolean
86+
isOpen?: boolean
8687
searcher?: (
8788
query: string,
8889
items: FormDropdownItem[],
@@ -109,6 +110,7 @@ function mountDropdown(
109110
items,
110111
closeOnDisable: options.closeOnDisable,
111112
disabled: options.disabled,
113+
...(options.isOpen === undefined ? {} : { isOpen: options.isOpen }),
112114
multiple: options.multiple,
113115
selected: options.selected,
114116
searcher: options.searcher,
@@ -482,6 +484,18 @@ describe('FormDropdown', () => {
482484
expect(onUpdateIsOpen).toHaveBeenLastCalledWith(false)
483485
})
484486

487+
it('closes when mounted disabled with closeOnDisable', () => {
488+
const onUpdateIsOpen = vi.fn()
489+
mountDropdown([createItem('1', 'alpha')], {
490+
closeOnDisable: true,
491+
disabled: true,
492+
isOpen: true,
493+
onUpdateIsOpen
494+
})
495+
496+
expect(onUpdateIsOpen).toHaveBeenCalledWith(false)
497+
})
498+
485499
it('stays open when disabled without closeOnDisable', async () => {
486500
const onUpdateIsOpen = vi.fn()
487501
const items = [createItem('1', 'alpha')]

src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdown.vue

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,15 +212,19 @@ function focusTrigger() {
212212
const closeDropdown = ({ restoreFocus = false } = {}) => {
213213
if (popoverRef.value) {
214214
popoverRef.value.hide?.()
215-
isOpen.value = false
216215
}
216+
isOpen.value = false
217217
218218
if (restoreFocus) focusTrigger()
219219
}
220220
221-
watch([() => disabled, () => closeOnDisable], ([isDisabled, shouldClose]) => {
222-
if (isDisabled && shouldClose) closeDropdown()
223-
})
221+
watch(
222+
[() => disabled, () => closeOnDisable],
223+
([isDisabled, shouldClose]) => {
224+
if (isDisabled && shouldClose) closeDropdown()
225+
},
226+
{ immediate: true }
227+
)
224228
225229
/**
226230
* Dismiss on `pointerdown` rather than PrimeVue's default `click` (mouseup) so

0 commit comments

Comments
 (0)