From 83e6d1b4e10d0a362096b79660cceff8212dd5fa Mon Sep 17 00:00:00 2001 From: Boris Diakur Date: Thu, 28 Jul 2022 11:23:09 +0200 Subject: [PATCH] fix(ld-select): filter by option text content instead of option value Resolves: #393 --- src/liquid/components/ld-select/ld-select.tsx | 2 +- .../test/__snapshots__/ld-select.spec.ts.snap | 2 +- .../ld-select/test/ld-select.spec.ts | 47 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/liquid/components/ld-select/ld-select.tsx b/src/liquid/components/ld-select/ld-select.tsx index ccedb2535d..94316cce7c 100644 --- a/src/liquid/components/ld-select/ld-select.tsx +++ b/src/liquid/components/ld-select/ld-select.tsx @@ -633,7 +633,7 @@ export class LdSelect implements InnerFocusable { const query = this.getFilterInput().value.trim().toLowerCase() options.forEach((ldOption) => { ldOption.hidden = - Boolean(query) && !ldOption.value.toLowerCase().includes(query) + Boolean(query) && !ldOption.textContent.toLowerCase().includes(query) }) // Re-position popper after new height has been applied. diff --git a/src/liquid/components/ld-select/test/__snapshots__/ld-select.spec.ts.snap b/src/liquid/components/ld-select/test/__snapshots__/ld-select.spec.ts.snap index f37f9a7a9f..f34371730b 100644 --- a/src/liquid/components/ld-select/test/__snapshots__/ld-select.spec.ts.snap +++ b/src/liquid/components/ld-select/test/__snapshots__/ld-select.spec.ts.snap @@ -1167,7 +1167,7 @@ exports[`ld-select places the popper inside a given element 1`] = ` -
+
diff --git a/src/liquid/components/ld-select/test/ld-select.spec.ts b/src/liquid/components/ld-select/test/ld-select.spec.ts index aff41fbe34..6d21c1266a 100644 --- a/src/liquid/components/ld-select/test/ld-select.spec.ts +++ b/src/liquid/components/ld-select/test/ld-select.spec.ts @@ -2658,6 +2658,53 @@ describe('ld-select', () => { expect(spyFocusBana).toHaveBeenCalledTimes(0) expect(spyFocusPlum).toHaveBeenCalledTimes(1) }) + + it('filters using option text content (not option value)', async () => { + const page = await newSpecPage({ + components, + html: ` + + Apple + Banana + Orange + Cherry + + `, + }) + + const ldSelect = page.root + const btnTrigger = ldSelect.shadowRoot.querySelector( + '.ld-select__btn-trigger' + ) + btnTrigger['focus'] = jest.fn() + + const filterInput = ldSelect.shadowRoot.querySelector( + '.ld-select__btn-trigger-input' + ) + filterInput.focus = jest.fn() + + await triggerPopperWithClick(page) + expect(btnTrigger.getAttribute('aria-expanded')).toEqual('true') + + const { ldInternalOptions, internalOptions } = await getInternalOptions( + page + ) + expect(ldInternalOptions.length).toEqual(4) + + internalOptions.forEach((internalOption) => { + internalOption.focus = jest.fn() + }) + + filterInput.value = 'e' + filterInput.dispatchEvent(new InputEvent('input')) + + await page.waitForChanges() + + expect(ldInternalOptions[0]).not.toHaveAttribute('hidden') + expect(ldInternalOptions[1]).toHaveAttribute('hidden') + expect(ldInternalOptions[2]).not.toHaveAttribute('hidden') + expect(ldInternalOptions[3]).not.toHaveAttribute('hidden') + }) }) it('displays more indicator with maxRows prop set in multiple mode', async () => {