Fix filterable multiselect keyboard selection behavior (#923)

* fix(multi-select): correctly select correct item in filterable multiselect

Fixes #922

* fix(multiselect): do not mutate sortedItems
This commit is contained in:
Eric Liu 2021-11-27 10:04:22 -08:00 committed by GitHub
commit 4de0fab859
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -329,9 +329,10 @@
change(-1);
} else if (key === 'Enter') {
if (highlightedIndex > -1) {
sortedItems[highlightedIndex].checked = !sortedItems[
highlightedIndex
].checked;
sortedItems = sortedItems.map((item, i) => {
if (i !== highlightedIndex) return item;
return { ...item, checked: !item.checked };
});
}
}
}}"
@ -392,9 +393,22 @@
on:keydown|stopPropagation="{({ key }) => {
if (key === 'Enter') {
if (highlightedIndex > -1) {
sortedItems[highlightedIndex].checked = !sortedItems[
highlightedIndex
].checked;
if (filterable) {
const filteredItemId = filteredItems[highlightedIndex].id;
const filteredItemIndex = sortedItems
.map((item) => item.id)
.indexOf(filteredItemId);
sortedItems = sortedItems.map((item, i) => {
if (i !== filteredItemIndex) return item;
return { ...item, checked: !item.checked };
});
} else {
sortedItems = sortedItems.map((item, i) => {
if (i !== highlightedIndex) return item;
return { ...item, checked: !item.checked };
});
}
}
} else if (key === 'Tab') {
open = false;