From d2ac5a64caa79efa8b5ff610b42978f1fcc7cabf Mon Sep 17 00:00:00 2001 From: Diego Imbert <70353967+diegoimbert@users.noreply.github.com> Date: Tue, 9 Sep 2025 19:01:12 +0200 Subject: [PATCH] Fix u/* filter and refactored TreeView (#6563) * fix only f/* filter * migrate treeview to svelte 5 --- .../src/lib/components/home/ItemsList.svelte | 31 +++++---- .../src/lib/components/home/TreeView.svelte | 66 +++++++++---------- .../lib/components/home/TreeViewRoot.svelte | 48 +++++++------- 3 files changed, 77 insertions(+), 68 deletions(-) diff --git a/frontend/src/lib/components/home/ItemsList.svelte b/frontend/src/lib/components/home/ItemsList.svelte index 4ef2a57ed0..94ace3e2b4 100644 --- a/frontend/src/lib/components/home/ItemsList.svelte +++ b/frontend/src/lib/components/home/ItemsList.svelte @@ -146,14 +146,14 @@ function filterItemsPathsBaseOnUserFilters( item: TableScript | TableFlow | TableApp | TableRawApp, - filterUserFolders: boolean + filterUserFolders: boolean, + filterUserFoldersType: 'only f/*' | 'u/username and f/*' | undefined ) { - if ($workspaceStore == 'admins') return true - if (filterUserFolders) { - return !item.path.startsWith('u/') || item.path.startsWith('u/' + $userStore?.username + '/') - } else { - return true - } + if (!filterUserFoldersType || !filterUserFolders) return true + if (filterUserFoldersType === 'only f/*') return item.path.startsWith('f/') + if (filterUserFoldersType === 'u/username and f/*') + return item.path.startsWith('f/') || item.path.startsWith(`u/${$userStore?.username}/`) + return true // should not happen } let ownerFilter: string | undefined = $state(undefined) @@ -217,6 +217,13 @@ const FILTER_USER_FOLDER_SETTING_NAME = 'filterUserFolders' const INCLUDE_WITHOUT_MAIN_SETTING_NAME = 'includeWithoutMain' let treeView = $state(getLocalSetting(TREE_VIEW_SETTING_NAME) == 'true') + let filterUserFoldersType: 'only f/*' | 'u/username and f/*' | undefined = $derived( + $userStore?.is_super_admin && $userStore.username.includes('@') + ? 'only f/*' + : $userStore?.is_admin || $userStore?.is_super_admin + ? 'u/username and f/*' + : undefined + ) let filterUserFolders = $state(getLocalSetting(FILTER_USER_FOLDER_SETTING_NAME) == 'true') let includeWithoutMain = $state( getLocalSetting(INCLUDE_WITHOUT_MAIN_SETTING_NAME) @@ -302,12 +309,12 @@ (x) => x.path.startsWith(ownerFilter + '/') && (x.type == itemKind || itemKind == 'all') && - filterItemsPathsBaseOnUserFilters(x, filterUserFolders) + filterItemsPathsBaseOnUserFilters(x, filterUserFolders, filterUserFoldersType) ) : combinedItems?.filter( (x) => (x.type == itemKind || itemKind == 'all') && - filterItemsPathsBaseOnUserFilters(x, filterUserFolders) + filterItemsPathsBaseOnUserFilters(x, filterUserFolders, filterUserFoldersType) ) ) let items = $derived(filter !== '' ? filteredItems : preFilteredItems) @@ -486,13 +493,13 @@ {/snippet} - {#if $userStore?.is_super_admin && $userStore.username.includes('@')} + {#if filterUserFoldersType === 'only f/*'} - {:else if $userStore?.is_admin || $userStore?.is_super_admin} + {:else if filterUserFoldersType === 'u/username and f/*'} {/if} diff --git a/frontend/src/lib/components/home/TreeView.svelte b/frontend/src/lib/components/home/TreeView.svelte index 0c31d66f86..d455a1ce16 100644 --- a/frontend/src/lib/components/home/TreeView.svelte +++ b/frontend/src/lib/components/home/TreeView.svelte @@ -1,39 +1,39 @@ - - {#if isFolder(item)}
- - + +
(opened = !opened)} + onclick={() => (opened = !opened)} class="px-4 py-2 border-b w-full flex flex-row items-center justify-between cursor-pointer" >
{#each item.items.slice(0, showMax) as subItem ((subItem['path'] ? subItem['type'] + '__' + subItem['path'] : undefined) ?? 'folder__' + subItem['folderName'])} - {/each} {#if showMax < item.items.length} - - + +
{ + onclick={() => { if (isFolder(item)) { showMax += Math.min(30, item.items.length - showMax) showMax = showMax @@ -103,10 +103,10 @@
{:else if isUser(item)}
- - + +
(opened = !opened)} + onclick={() => (opened = !opened)} class="px-4 py-2 border-b w-full flex flex-row items-center justify-between cursor-pointer" >
{#each item.items.slice(0, showMax) as subItem ((subItem['path'] ? subItem['type'] + '__' + subItem['path'] : undefined) ?? 'folder__' + subItem['folderName'])} - {/each} {#if showMax < item.items.length} - - + +
{ + onclick={() => { if (isUser(item)) { showMax += Math.min(30, item.items.length - showMax) } diff --git a/frontend/src/lib/components/home/TreeViewRoot.svelte b/frontend/src/lib/components/home/TreeViewRoot.svelte index 665eb3da48..e9f8f797fd 100644 --- a/frontend/src/lib/components/home/TreeViewRoot.svelte +++ b/frontend/src/lib/components/home/TreeViewRoot.svelte @@ -1,32 +1,34 @@ -{#if treeLoading} +{#if groupedItems === 'loading'}
-
{:else if groupedItems.length === 0} @@ -54,7 +56,7 @@ {#if groupedItems.length > 15 && nbDisplayed < groupedItems.length} {nbDisplayed} root nodes out of {groupedItems.length} - (nbDisplayed += 30)}>load 30 more {/if} {/if}