Dieser Commit ist enthalten in:
Chaoscaot 2023-07-25 17:06:28 +02:00
Ursprung b869933c5e
Commit 5ba5a642e4
Signiert von: Chaoscaot
GPG-Schlüssel-ID: BDF8FADD7D5EDB7A
2 geänderte Dateien mit 18 neuen und 19 gelöschten Zeilen

Datei anzeigen

@ -17,7 +17,7 @@
$: selectPlayers = $players.map(player => { $: selectPlayers = $players.map(player => {
return { return {
name: player.name, name: player.name,
value: player.id value: player.id.toString()
} }
}).sort((a, b) => a.name.localeCompare(b.name)); }).sort((a, b) => a.name.localeCompare(b.name));

Datei anzeigen

@ -1,31 +1,30 @@
<script lang="ts"> <script lang="ts">
import {Dropdown, DropdownItem, Search} from 'flowbite-svelte' import {Button, Dropdown, DropdownItem, Search} from 'flowbite-svelte'
export let selected: string = '' export let selected: string = ''
export let items: {name: string, value: string}[] = [] export let items: {name: string, value: string}[] = []
export let all = false
export let searchValue = items.find(item => item.value === selected)?.name || '' export let searchValue = items.find(item => item.value === selected)?.name || ''
let focus = false let open = false
$: filteredItems = items.filter(item => item.name.toLowerCase().includes(searchValue.toLowerCase())) $: filteredItems = items.filter(item => item.name.toLowerCase().includes(searchValue.toLowerCase())).filter((value, index) => index < 5)
$: openDropdown = filteredItems.length > 0 && searchValue.length >= 3 && focus || all && focus $: console.log(selected)
function selectItem(item) { function selectItem(item: {name: string, value: string}) {
selected = item.value selected = item.value
searchValue = item.name searchValue = item.name
focus = false open = false
} }
</script> </script>
<Search bind:value={searchValue} on:focus={() => focus = true} on:keydown={() => focus = true}/> <Button color="alternative" on:click={() => open = true}>{selected === null ? 'Auswählen' : items.find(value => value.value === selected)?.name}</Button>
{#if (openDropdown)} <Dropdown bind:open class="w-60">
<Dropdown open class="z-10 py-1 w-44"> <div class="overflow-y-auto p-3 text-sm" slot="header">
{#each filteredItems as item} <Search bind:value={searchValue} on:focus={() => open = true} on:keydown={() => open = true}/>
<DropdownItem on:click={() => selectItem(item)}> </div>
{item.name} {#each filteredItems as item}
</DropdownItem> <button on:click={() => selectItem(item)} class="rounded p-2 hover:bg-gray-100 dark:hover:bg-gray-600 w-full cursor-pointer border-b border-b-gray-600">
{/each} {item.name}
</Dropdown> </button>
<div class="z-10"></div> {/each}
{/if} </Dropdown>