diff --git a/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.spec.ts b/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.spec.ts index 91d3b001..05b0c4a3 100644 --- a/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.spec.ts +++ b/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.spec.ts @@ -1077,4 +1077,26 @@ describe('components/forms/auto-complete/RuiAutoComplete.vue', () => { const chipElement = firstChip.element as HTMLElement; expect(chipElement.getAttribute('data-index')).toBe('0'); }); + + it('should expose openMenu and closeMenu to control the menu programmatically', async () => { + wrapper = createWrapper({ + props: { + keyAttr: 'id', + modelValue: undefined, + options, + textAttr: 'label', + }, + }); + + await vi.advanceTimersToNextTimerAsync(); + expect(queryByRole('menu')).toBeFalsy(); + + wrapper.vm.openMenu(); + await vi.runAllTimersAsync(); + expect(queryByRole('menu')).toBeTruthy(); + + wrapper.vm.closeMenu(); + await vi.runAllTimersAsync(); + expect(queryByRole('menu')).toBeFalsy(); + }); }); diff --git a/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.vue b/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.vue index f3c4a0bb..ff7bf540 100644 --- a/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.vue +++ b/packages/ui-library/src/components/forms/auto-complete/RuiAutoComplete.vue @@ -425,6 +425,14 @@ function arrowClicked(event: MouseEvent): void { } } +function openMenu(): void { + set(isOpen, true); +} + +function closeMenu(): void { + set(isOpen, false); +} + // Optimize options watcher with shallow comparison first watch(() => options, (curr, old) => { if (curr === old || customValue) @@ -438,7 +446,9 @@ watch(() => options, (curr, old) => { }); defineExpose({ + closeMenu, focus: focusSetInputFocus, + openMenu, setSelectionRange, });