fix: multiple event dispatch, and item selection bug

This commit is contained in:
István Pató 2021-12-06 09:55:55 +01:00
commit 213c15031a
No known key found for this signature in database
GPG key ID: 3A842123BFF8E969

View file

@ -111,6 +111,8 @@
let inputValue = value;
let highlightedIndex = -1;
let selectedItem;
function change(dir) {
let index = highlightedIndex + dir;
let _items = !filteredItems?.length ? items : filteredItems;
@ -130,6 +132,7 @@
export function clear() {
selectedIndex = -1;
highlightedIndex = -1;
selectedItem = undefined;
open = false;
inputValue = "";
ref?.focus();
@ -149,16 +152,17 @@
}
});
$: if (selectedIndex > -1) {
let _selectedItem;
let prevSelectedIndex;
$: if (selectedIndex > -1 && prevSelectedIndex !== selectedIndex) {
prevSelectedIndex = selectedIndex;
if (filteredItems?.length === 1) {
selectedId = filteredItems[0].id;
_selectedItem = filteredItems[0];
selectedItem = filteredItems[0];
} else {
selectedId = items[selectedIndex].id;
_selectedItem = selectedItem;
selectedItem = items[selectedIndex];
}
dispatch("select", { selectedId, selectedIndex, selectedItem: _selectedItem });
dispatch("select", { selectedId, selectedIndex, selectedItem });
}
$: ariaLabel = $$props["aria-label"] || "Choose an item";
$: menuId = `menu-${id}`;
@ -167,7 +171,6 @@
? items[highlightedIndex].id
: undefined;
$: filteredItems = items.filter((item) => shouldFilterItem(item, value));
$: selectedItem = items[selectedIndex];
$: value = inputValue;
</script>