I'm trying to create a search component using Svelte
and shadcn-svelte
UI component library,
Where I'll have a dropdown visible below the search input, when the user type a text that does exist in the data
array, otherwise the dropdown should be hidden.
<script lang="ts"> import { Input } from '$lib/components/ui/input'; import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; let searchValue = ''; let filteredResults: string[] = []; let isDropdownOpen = false; const data = ['California','North Carolina','North Dakota','South Carolina','South Dakota','Michigan','Tennessee','Nevada','New Hampshire','New Jersey' ]; function handleInput() { filteredResults = data.filter((item) => item.toLowerCase().includes(searchValue.toLowerCase()) ); isDropdownOpen = (filteredResults.length > 0 && searchValue !== ''); } function handleItemSelection(item: string) { console.log(`${item} selected`); }</script><Input bind:value={searchValue} on:input={handleInput} placeholder="Search..." /><DropdownMenu.Root open={isDropdownOpen} disableFocusFirstItem={true}><DropdownMenu.Trigger asChild let:builder><Button builders={[builder]} class="h-0 m-0 p-0" variant="outline"></Button></DropdownMenu.Trigger><DropdownMenu.Content><DropdownMenu.Group> {#each filteredResults as item}<DropdownMenu.Item on:click={() => handleItemSelection(item)}>{item}</DropdownMenu.Item> {/each}</DropdownMenu.Group></DropdownMenu.Content></DropdownMenu.Root>
My issue is once I start typing, the drop-down menu will show up but, the focus will transfer to the drop-down menu and that will prevent me from typing.