fix: autocomplete for combobox (reset activeIndex when needed)
This commit is contained in:
parent
db2ab59aeb
commit
c459ded9d8
3 changed files with 49 additions and 0 deletions
5
.changeset/unlucky-owls-search.md
Normal file
5
.changeset/unlucky-owls-search.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'@lion/ui': patch
|
||||
---
|
||||
|
||||
Fixed autocomplete feature for the lion-combobox component. It used to autoselect a wrong item
|
||||
|
|
@ -955,6 +955,9 @@ export class LionCombobox extends LocalizeMixin(OverlayMixin(LionListbox)) {
|
|||
if (autoselect && !hasAutoFilled && !this.multipleChoice) {
|
||||
// This means there is no match for checkedIndex
|
||||
this.setCheckedIndex(-1);
|
||||
if (prevValue !== curValue) {
|
||||
this.activeIndex = -1;
|
||||
}
|
||||
this.modelValue = this.parser(inputValue);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1330,6 +1330,47 @@ describe('lion-combobox', () => {
|
|||
]);
|
||||
});
|
||||
|
||||
it('does not autocomplete on [Enter] when textbox content does not match options', async () => {
|
||||
const el = /** @type {LionCombobox} */ (
|
||||
await fixture(html`
|
||||
<lion-combobox name="foo">
|
||||
<lion-option .choiceValue="${'Mango'}">Mango</lion-option>
|
||||
<lion-option .choiceValue="${'Lemon'}">Lemon</lion-option>
|
||||
<lion-option .choiceValue="${'Apple'}">Apple</lion-option>
|
||||
</lion-combobox>
|
||||
`)
|
||||
);
|
||||
const { _inputNode } = getComboboxMembers(el);
|
||||
mimicUserTypingAdvanced(el, ['m', 'a', 'k']);
|
||||
await el.updateComplete;
|
||||
mimicKeyPress(_inputNode, 'Enter');
|
||||
await el.updateComplete;
|
||||
await el.updateComplete;
|
||||
expect(_inputNode.value).to.equal('Mak');
|
||||
});
|
||||
|
||||
it('does not autocomplete on [Enter] when textbox content does not match options and content was cleared via [Backspace]', async () => {
|
||||
const el = /** @type {LionCombobox} */ (
|
||||
await fixture(html`
|
||||
<lion-combobox name="foo">
|
||||
<lion-option .choiceValue="${'Mango'}">Mango</lion-option>
|
||||
<lion-option .choiceValue="${'Lemon'}">Lemon</lion-option>
|
||||
<lion-option .choiceValue="${'Apple'}">Apple</lion-option>
|
||||
</lion-combobox>
|
||||
`)
|
||||
);
|
||||
const { _inputNode } = getComboboxMembers(el);
|
||||
mimicUserTypingAdvanced(el, ['m', 'o', 'Backspace', 'Backspace', 'm', 'o']);
|
||||
await el.updateComplete;
|
||||
await el.updateComplete;
|
||||
await el.updateComplete;
|
||||
await el.updateComplete;
|
||||
mimicKeyPress(_inputNode, 'Enter');
|
||||
await el.updateComplete;
|
||||
await el.updateComplete;
|
||||
expect(_inputNode.value).to.equal('Mo');
|
||||
});
|
||||
|
||||
it('does not filter options when autocomplete is "inline"', async () => {
|
||||
const el = /** @type {LionCombobox} */ (
|
||||
await fixture(html`
|
||||
|
|
|
|||
Loading…
Reference in a new issue