diff --git a/frontend/src/lib/components/SearchItems.svelte b/frontend/src/lib/components/SearchItems.svelte index aedf17c12c..b96d7814e3 100644 --- a/frontend/src/lib/components/SearchItems.svelte +++ b/frontend/src/lib/components/SearchItems.svelte @@ -39,7 +39,7 @@ } let plaintextItems = $derived(items?.map((item) => f(item)) ?? []) - $effect(() => { + $effect.pre(() => { plaintextItems && filter != undefined && setTimeout(() => untrack(() => filterItems()), 0) }) diff --git a/frontend/src/lib/components/common/toggleButton-v2/ToggleButtonGroup.svelte b/frontend/src/lib/components/common/toggleButton-v2/ToggleButtonGroup.svelte index c807108a74..93e26c9321 100644 --- a/frontend/src/lib/components/common/toggleButton-v2/ToggleButtonGroup.svelte +++ b/frontend/src/lib/components/common/toggleButton-v2/ToggleButtonGroup.svelte @@ -15,6 +15,7 @@ allowEmpty?: boolean class?: string children?: import('svelte').Snippet<[any]> + onSelected?: (value: any) => void } let { @@ -25,6 +26,7 @@ tabListClass = '', allowEmpty = false, class: className = '', + onSelected, children }: Props = $props() @@ -40,6 +42,7 @@ } if (curr !== next && curr !== undefined) { dispatch('selected', next) + onSelected?.(next) } return next } diff --git a/frontend/src/lib/components/home/ItemsList.svelte b/frontend/src/lib/components/home/ItemsList.svelte index 0306b38499..3329ea163f 100644 --- a/frontend/src/lib/components/home/ItemsList.svelte +++ b/frontend/src/lib/components/home/ItemsList.svelte @@ -361,11 +361,11 @@
{ + onSelected={(v) => { if (itemKind != 'all') { - subtab = itemKind + subtab = v } - setQuery($page.url, 'kind', itemKind) + setQuery($page.url, 'kind', v) }} class="h-10" > diff --git a/frontend/src/lib/components/home/ListFilters.svelte b/frontend/src/lib/components/home/ListFilters.svelte index b603c0247c..9efe2a4eb5 100644 --- a/frontend/src/lib/components/home/ListFilters.svelte +++ b/frontend/src/lib/components/home/ListFilters.svelte @@ -5,13 +5,23 @@ import { APP_TO_ICON_COMPONENT } from '../icons' import { onDestroy, onMount } from 'svelte' - export let filters: string[] - export let selectedFilter: string | undefined = undefined - export let resourceType = false - export let queryName = 'filter' - export let syncQuery = false + interface Props { + filters: string[] + selectedFilter?: string | undefined + resourceType?: boolean + queryName?: string + syncQuery?: boolean + bottomMargin?: boolean + } - export let bottomMargin: boolean = true + let { + filters, + selectedFilter = $bindable(undefined), + resourceType = false, + queryName = 'filter', + syncQuery = false, + bottomMargin = true + }: Props = $props() const queryChange: (value: URL) => void = (url: URL) => { if (syncQuery) { @@ -53,11 +63,13 @@ queryChange(url) } - $: filtersAndSelected = selectedFilter - ? filters.includes(selectedFilter) - ? filters - : [selectedFilter, ...filters] - : filters + let filtersAndSelected = $derived( + selectedFilter + ? filters.includes(selectedFilter) + ? filters + : [selectedFilter, ...filters] + : filters + ) {#if Array.isArray(filtersAndSelected) && filtersAndSelected.length > 0} @@ -82,7 +94,8 @@ > {#if resourceType} - + {@const SvelteComponent = getIconComponent(filter)} + {:else if filter.startsWith('u/')} {:else if filter.startsWith('f/')}