Skip to content
This repository was archived by the owner on Sep 30, 2024. It is now read-only.

Commit faf8950

Browse files
committed
fix(AutoComplete): fix UX to open menu after autocomplete focus
1 parent 4d7bff9 commit faf8950

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

src/components/forms/auto-complete/RuiAutoComplete.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,12 @@ describe('autocomplete', () => {
8080
},
8181
});
8282

83+
await wrapper.find('input').trigger('focus');
84+
await nextTick();
85+
expect(document.body.querySelector('div[role=menu]')).toBeFalsy();
86+
8387
// Open Menu Select
88+
await wrapper.find('[data-id=activator]').trigger('focus');
8489
await wrapper.find('[data-id=activator]').trigger('click');
8590
await vi.delay();
8691
await nextTick();

src/components/forms/auto-complete/RuiAutoComplete.vue

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,6 @@ watch(anyFocused, (focused) => {
417417
});
418418
419419
function onInputFocused() {
420-
set(isOpen, true);
421420
set(focusedValueIndex, -1);
422421
if (get(shouldApplyValueAsSearch))
423422
get(textInput)?.select();
@@ -470,6 +469,10 @@ function onEnter(event: KeyboardEvent) {
470469
set(isOpen, false);
471470
event.preventDefault();
472471
}
472+
else if (!get(isOpen)) {
473+
set(isOpen, true);
474+
event.preventDefault();
475+
}
473476
}
474477
475478
function onTab(event: KeyboardEvent) {
@@ -503,6 +506,13 @@ const inputClass: ComputedRef<string> = computed(() => {
503506
return 'flex-1 min-w-0';
504507
});
505508
509+
function arrowClicked(event: any) {
510+
if (get(isOpen)) {
511+
set(isOpen, false);
512+
event.stopPropagation();
513+
}
514+
}
515+
506516
defineExpose({
507517
focus: setInputFocus,
508518
setSelectionRange,
@@ -662,7 +672,10 @@ defineExpose({
662672
/>
663673
</span>
664674

665-
<span :class="css.icon__wrapper">
675+
<span
676+
:class="css.icon__wrapper"
677+
@click="arrowClicked($event)"
678+
>
666679
<RuiIcon
667680
:class="[css.icon, { 'rotate-180': open }]"
668681
:size="dense ? 24 : 32"

src/composables/dropdown-menu.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,10 @@ export function useDropdownMenu<T, K extends keyof T>({
208208
});
209209

210210
const moveHighlight = (up: boolean) => {
211-
if (get(!isOpen))
211+
if (!get(isOpen)) {
212+
toggle(true);
212213
return;
214+
}
213215

214216
let position = get(highlightedIndex);
215217
const move = up ? -1 : 1;

0 commit comments

Comments
 (0)