Skip to content

Commit f887d0a

Browse files
committed
Merge branch 'master' of https://github.com/edu-rosado/svelte-material-ui into edu-rosado-master
2 parents da2d137 + 09cd127 commit f887d0a

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

packages/autocomplete/src/Autocomplete.svelte

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,19 @@
3535
'smui-autocomplete__menu': true,
3636
})}
3737
managed
38-
open={menuOpen}
38+
bind:open={menuOpen}
3939
bind:anchorElement={element}
4040
anchor={menu$anchor}
4141
anchorCorner={menu$anchorCorner}
4242
on:SMUIList:mount={handleListAccessor}
43+
on:SMUIMenu:closedProgrammatically={() => {
44+
if (resetTextWhenSelected) {
45+
text = '';
46+
focus();
47+
} else {
48+
hideMenu = true;
49+
}
50+
}}
4351
{...prefixFilter($$restProps, 'menu$')}
4452
>
4553
<List {...prefixFilter($$restProps, 'list$')}>
@@ -162,6 +170,7 @@
162170
export let selectOnExactMatch = true;
163171
export let showMenuWithNoInput = true;
164172
export let noMatchesActionDisabled = true;
173+
export let resetTextWhenSelected = false;
165174
export let search: (input: string) => Promise<any[] | false> = async (
166175
input: string
167176
) => {
@@ -202,9 +211,12 @@
202211
let matches: any[] = [];
203212
let focusedIndex = -1;
204213
let focusedItem: SMUIListItemAccessor | undefined = undefined;
214+
let itemHasBeenSelected: boolean = false;
215+
let hideMenu: boolean = false;
205216
206217
$: menuOpen =
207218
focused &&
219+
!hideMenu &&
208220
(text !== '' || showMenuWithNoInput) &&
209221
(loading ||
210222
(!combobox && !(matches.length === 1 && matches[0] === value)) ||
@@ -214,6 +226,9 @@
214226
215227
let previousText: string | undefined = undefined;
216228
$: if (previousText !== text) {
229+
if (!itemHasBeenSelected) {
230+
hideMenu = false;
231+
}
217232
if (!combobox && value != null && getOptionLabel(value) !== text) {
218233
deselectOption(value, false);
219234
}
@@ -240,6 +255,13 @@
240255
loading = false;
241256
})();
242257
258+
if (itemHasBeenSelected) {
259+
if (resetTextWhenSelected) {
260+
text = '';
261+
focus();
262+
}
263+
itemHasBeenSelected = false;
264+
}
243265
previousText = text;
244266
}
245267
@@ -248,6 +270,10 @@
248270
// If the value changes from outside, update the text.
249271
text = getOptionLabel(value);
250272
previousValue = value;
273+
itemHasBeenSelected = true;
274+
if (!resetTextWhenSelected) {
275+
hideMenu = true;
276+
}
251277
} else if (combobox) {
252278
// If the text changes, update value if we're a combobox.
253279
value = text;

packages/menu/src/Menu.svelte

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,10 @@
7878
listAccessor.getAttributeFromElementIndex(index, attr),
7979
elementContainsClass: (element, className) =>
8080
element.classList.contains(className),
81-
closeSurface: (skipRestoreFocus) =>
82-
menuSurfaceAccessor.closeProgrammatic(skipRestoreFocus),
81+
closeSurface: (skipRestoreFocus) => {
82+
menuSurfaceAccessor.closeProgrammatic(skipRestoreFocus);
83+
dispatch(getElement(), 'SMUIMenu:closedProgrammatically', {});
84+
},
8385
getElementIndex: (element) =>
8486
listAccessor
8587
.getOrderedList()

0 commit comments

Comments
 (0)