diff --git a/docs/src/pages/components/ComboBox.svx b/docs/src/pages/components/ComboBox.svx index b63d1c67..204573bf 100644 --- a/docs/src/pages/components/ComboBox.svx +++ b/docs/src/pages/components/ComboBox.svx @@ -3,7 +3,7 @@ import { Button } from "carbon-components-svelte"; import Preview from "../../components/Preview.svelte"; let comboboxComponent - + let selectedIndex = 1 ### Default @@ -25,7 +25,12 @@ items={[ {id: "2", text: "Fax"} ]} /> +### Reactive example + + + ### Clear selection + + import { ComboBox, Button } from "carbon-components-svelte"; + let selectedIndex = 1; + + + +
+ + diff --git a/src/ComboBox/ComboBox.svelte b/src/ComboBox/ComboBox.svelte index 1227db29..1a02c276 100644 --- a/src/ComboBox/ComboBox.svelte +++ b/src/ComboBox/ComboBox.svelte @@ -110,7 +110,6 @@ let selectedId = undefined; let selectedItem = undefined; let inputValue = value; - let prevInputValue = undefined; let prevSelectedIndex = undefined; let highlightedIndex = -1; @@ -130,6 +129,7 @@ * @type {() => void} */ export function clear() { + prevSelectedIndex = undefined; selectedIndex = -1; highlightedIndex = -1; highlightedId = undefined; @@ -150,6 +150,10 @@ if (!selectedItem) { selectedId = undefined; selectedIndex = -1; + inputValue = ""; + highlightedIndex = -1; + highlightedId = undefined; + prevSelectedIndex = undefined; } else { // programmatically set selectedIndex inputValue = selectedItem.text; @@ -157,18 +161,23 @@ } }); - $: if (selectedIndex > -1 && prevSelectedIndex !== selectedIndex) { - prevSelectedIndex = selectedIndex; - if (filteredItems?.length === 1 && open) { - selectedId = filteredItems[0].id; - selectedItem = filteredItems[0]; - highlightedIndex = -1; - highlightedId = undefined; - } else { - selectedId = items[selectedIndex].id; - selectedItem = items[selectedIndex]; + $: if (selectedIndex > -1) { + if (prevSelectedIndex !== selectedIndex) { + prevSelectedIndex = selectedIndex; + if (filteredItems?.length === 1 && open) { + selectedId = filteredItems[0].id; + selectedItem = filteredItems[0]; + highlightedIndex = -1; + highlightedId = undefined; + } else { + selectedId = items[selectedIndex].id; + selectedItem = items[selectedIndex]; + } + dispatch("select", { selectedId, selectedIndex, selectedItem }); } - dispatch("select", { selectedId, selectedIndex, selectedItem }); + } else { + prevSelectedIndex = selectedIndex; + selectedItem = undefined; } $: ariaLabel = $$props["aria-label"] || "Choose an item";