feat: support item.disabled key for Dropdown, MultiSelect, ComboBox (#1328)

Closes #1326

* feat: support item.disabled key for `Dropdown`, `MultiSelect`, `ComboBox`

* Run "yarn build:docs"

* test: assert disabled property

* docs: add "Disabled items" examples
This commit is contained in:
metonym 2022-06-02 17:56:30 -07:00 committed by GitHub
commit f25a10c9c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 150 additions and 19 deletions

View file

@ -2,7 +2,7 @@
/**
* @typedef {any} MultiSelectItemId
* @typedef {string} MultiSelectItemText
* @typedef {{ id: MultiSelectItemId; text: MultiSelectItemText; }} MultiSelectItem
* @typedef {{ id: MultiSelectItemId; text: MultiSelectItemText; disabled?: boolean; }} MultiSelectItem
* @event {{ selectedIds: MultiSelectItemId[]; selected: MultiSelectItem[]; unselected: MultiSelectItem[]; }} select
* @event {null} clear
* @event {FocusEvent | CustomEvent<FocusEvent>} blur
@ -210,6 +210,20 @@
index = 0;
}
let disabled = items[index].disabled;
while (disabled) {
index = index + direction;
if (index < 0) {
index = items.length - 1;
} else if (index >= items.length) {
index = 0;
}
disabled = items[index].disabled;
}
highlightedIndex = index;
}
@ -481,13 +495,19 @@
aria-selected="{item.checked}"
active="{item.checked}"
highlighted="{highlightedIndex === i}"
on:click="{() => {
disabled="{item.disabled}"
on:click="{(e) => {
if (item.disabled) {
e.stopPropagation();
return;
}
sortedItems = sortedItems.map((_) =>
_.id === item.id ? { ..._, checked: !_.checked } : _
);
fieldRef.focus();
}}"
on:mouseenter="{() => {
if (item.disabled) return;
highlightedIndex = i;
}}"
>
@ -499,7 +519,7 @@
tabindex="-1"
id="checkbox-{item.id}"
checked="{item.checked}"
disabled="{disabled}"
disabled="{item.disabled}"
on:blur="{() => {
if (i === filteredItems.length - 1) open = false;
}}"