fix: Folders as presets in FilterSearchbar (#8409)

* Folder presets in filter search bar

* nit max preset height
This commit is contained in:
Diego Imbert
2026-03-17 21:14:33 +01:00
committed by GitHub
parent 8c769aebbf
commit ebf9347d3f
3 changed files with 29 additions and 15 deletions
@@ -604,7 +604,7 @@
{#if !currentTag || !schema[currentTag]}
{#if presets.length}
<div class="text-xs px-2 my-2 font-bold">Presets</div>
<div class="mb-3 px-2 flex gap-2 flex-wrap">
<div class="mb-3 px-2 flex gap-2 flex-wrap max-h-24 overflow-y-auto">
{#each presets as preset}
{@render presetTag(preset)}
{/each}
@@ -30,7 +30,7 @@
import Toggle from '$lib/components/Toggle.svelte'
import Tooltip from '$lib/components/Tooltip.svelte'
import type { ResourceType, WorkspaceDeployUISettings } from '$lib/gen'
import { OauthService, ResourceService, WorkspaceService, type ListableResource } from '$lib/gen'
import { FolderService, OauthService, ResourceService, WorkspaceService, type ListableResource } from '$lib/gen'
import {
enterpriseLicense,
userStore,
@@ -127,6 +127,7 @@
})
let showCreateButtons = $state(false)
let folders: string[] = $state([])
// FilterSearchbar setup
let userFoldersFilterType = $derived(
@@ -147,6 +148,12 @@
})
)
let filters = useUrlSyncedFilterInstance(untrack(() => resourcesFilterSchema))
let folderPresets = $derived([
...folders.map((f) => ({ name: `f/${f}`, value: `path_start:\\ f/${f}/` })),
...(resourcesFilterSchema.user_folders_only
? [{ name: resourcesFilterSchema.user_folders_only.label ?? '?', value: 'user_folders_only:\\ true' }]
: [])
])
async function loadResources(): Promise<void> {
resources = await loadResourceInternal(undefined, 'cache,state,app_theme')
@@ -538,11 +545,16 @@
})
}
})
async function loadFolders() {
folders = await FolderService.listFolderNames({ workspace: $workspaceStore! })
}
$effect(() => {
if ($workspaceStore && $userStore) {
untrack(() => {
loadResources()
loadResourceTypes()
loadFolders()
})
}
})
@@ -895,12 +907,7 @@
class="max-w-[26rem] grow"
bind:value={filters.val}
placeholder="Filter resources..."
presets={[
{
name: resourcesFilterSchema.user_folders_only?.label ?? '?',
value: 'user_folders_only:\\ true'
}
]}
presets={folderPresets}
/>
</div>
</div>
@@ -22,7 +22,7 @@
import Tooltip from '$lib/components/Tooltip.svelte'
import VariableEditor from '$lib/components/VariableEditor.svelte'
import type { ContextualVariable, ListableVariable, WorkspaceDeployUISettings } from '$lib/gen'
import { OauthService, VariableService, WorkspaceService } from '$lib/gen'
import { FolderService, OauthService, VariableService, WorkspaceService } from '$lib/gen'
import { enterpriseLicense, userStore, workspaceStore, userWorkspaces } from '$lib/stores'
import { sendUserToast } from '$lib/toast'
import { canWrite, isOwner, truncate } from '$lib/utils'
@@ -51,6 +51,7 @@
// Collect unique values for filter autocomplete
let allPaths: string[] = $state([])
let allOwners: string[] = $state([])
let folders: string[] = $state([])
// FilterSearchbar setup
let userFoldersFilterType = $derived(
@@ -70,6 +71,12 @@
})
)
let filters = useUrlSyncedFilterInstance(untrack(() => variablesFilterSchema))
let folderPresets = $derived([
...folders.map((f) => ({ name: `f/${f}`, value: `path_start:\\ f/${f}/` })),
...(variablesFilterSchema.user_folders_only
? [{ name: variablesFilterSchema.user_folders_only.label ?? '?', value: 'user_folders_only:\\ true' }]
: [])
])
let contextualVariables: ContextualVariable[] = $state([])
let shareModal: ShareModal | undefined = $state()
let variableEditor: VariableEditor | undefined = $state()
@@ -175,11 +182,16 @@
sendUserToast(`Variable ${path} was deleted`)
}
async function loadFolders() {
folders = await FolderService.listFolderNames({ workspace: $workspaceStore! })
}
$effect(() => {
if ($workspaceStore && $userStore) {
untrack(() => {
loadVariables()
loadContextualVariables()
loadFolders()
})
}
})
@@ -285,12 +297,7 @@
schema={variablesFilterSchema}
bind:value={filters.val}
placeholder="Filter variables..."
presets={[
{
name: variablesFilterSchema.user_folders_only?.label ?? '?',
value: 'user_folders_only:\\ true'
}
]}
presets={folderPresets}
/>
{/if}
</div>