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