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/')}