home page filter sync

This commit is contained in:
Ruben Fiszel
2025-07-08 06:47:08 +00:00
parent 90ed92a73c
commit 16e58bdcf9
4 changed files with 32 additions and 16 deletions

View File

@@ -39,7 +39,7 @@
}
let plaintextItems = $derived(items?.map((item) => f(item)) ?? [])
$effect(() => {
$effect.pre(() => {
plaintextItems && filter != undefined && setTimeout(() => untrack(() => filterItems()), 0)
})
</script>

View File

@@ -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
}

View File

@@ -361,11 +361,11 @@
<div class="flex justify-start">
<ToggleButtonGroup
bind:selected={itemKind}
on:selected={() => {
onSelected={(v) => {
if (itemKind != 'all') {
subtab = itemKind
subtab = v
}
setQuery($page.url, 'kind', itemKind)
setQuery($page.url, 'kind', v)
}}
class="h-10"
>

View File

@@ -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
)
</script>
{#if Array.isArray(filtersAndSelected) && filtersAndSelected.length > 0}
@@ -82,7 +94,8 @@
>
<span style="height: 12px" class="-mt-0.5">
{#if resourceType}
<svelte:component this={getIconComponent(filter)} height="14px" width="14px" />
{@const SvelteComponent = getIconComponent(filter)}
<SvelteComponent height="14px" width="14px" />
{:else if filter.startsWith('u/')}
<User class="mr-0.5" size={14} />
{:else if filter.startsWith('f/')}