From 95badda1c27fa5fea3d8b4b5891a73a7e76e8036 Mon Sep 17 00:00:00 2001 From: Silentoplayz <50341825+Silentoplayz@users.noreply.github.com> Date: Sun, 18 May 2025 03:23:38 -0400 Subject: [PATCH] feat: username and email search in workspace pages --- src/lib/components/workspace/Knowledge.svelte | 14 ++++++++++++-- src/lib/components/workspace/Models.svelte | 12 +++++++++--- src/lib/components/workspace/Prompts.svelte | 11 ++++++++++- src/lib/components/workspace/Tools.svelte | 16 ++++++++++------ 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/src/lib/components/workspace/Knowledge.svelte b/src/lib/components/workspace/Knowledge.svelte index 48fef678e..5b94e8214 100644 --- a/src/lib/components/workspace/Knowledge.svelte +++ b/src/lib/components/workspace/Knowledge.svelte @@ -38,10 +38,20 @@ let knowledgeBases = []; let filteredItems = []; - $: if (knowledgeBases) { + $: if (knowledgeBases.length > 0) { + // Added a check for non-empty array, good practice fuse = new Fuse(knowledgeBases, { - keys: ['name', 'description'] + keys: [ + 'name', + 'description', + 'user.name', // Ensures Fuse looks into item.user.name + 'user.email' // Ensures Fuse looks into item.user.email + ], + threshold: 0.0 // You might want to adjust this. Lower is more strict. Default is 0.6. + // 0.0 is exact match. }); + } else { + fuse = null; // Reset fuse if knowledgeBases is empty } $: if (fuse) { diff --git a/src/lib/components/workspace/Models.svelte b/src/lib/components/workspace/Models.svelte index ae378af1a..e504f31ba 100644 --- a/src/lib/components/workspace/Models.svelte +++ b/src/lib/components/workspace/Models.svelte @@ -51,9 +51,15 @@ let group_ids = []; $: if (models) { - filteredModels = models.filter( - (m) => searchValue === '' || m.name.toLowerCase().includes(searchValue.toLowerCase()) - ); + filteredModels = models.filter((m) => { + if (searchValue === '') return true; + const lowerSearchValue = searchValue.toLowerCase(); + return ( + (m.name || '').toLowerCase().includes(lowerSearchValue) || + (m.user?.name || '').toLowerCase().includes(lowerSearchValue) || // Search by user name + (m.user?.email || '').toLowerCase().includes(lowerSearchValue) // Search by user email + ); + }); } let searchValue = ''; diff --git a/src/lib/components/workspace/Prompts.svelte b/src/lib/components/workspace/Prompts.svelte index bc3f04073..c5a54358f 100644 --- a/src/lib/components/workspace/Prompts.svelte +++ b/src/lib/components/workspace/Prompts.svelte @@ -37,7 +37,16 @@ let deletePrompt = null; let filteredItems = []; - $: filteredItems = prompts.filter((p) => query === '' || p.command.includes(query)); + $: filteredItems = prompts.filter((p) => { + if (query === '') return true; + const lowerQuery = query.toLowerCase(); + return ( + (p.title || '').toLowerCase().includes(lowerQuery) || + (p.command || '').toLowerCase().includes(lowerQuery) || + (p.user?.name || '').toLowerCase().includes(lowerQuery) || + (p.user?.email || '').toLowerCase().includes(lowerQuery) + ); + }); const shareHandler = async (prompt) => { toast.success($i18n.t('Redirecting you to Open WebUI Community')); diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index a604b5e79..4ad39de58 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -52,12 +52,16 @@ let tools = []; let filteredItems = []; - $: filteredItems = tools.filter( - (t) => - query === '' || - t.name.toLowerCase().includes(query.toLowerCase()) || - t.id.toLowerCase().includes(query.toLowerCase()) - ); + $: filteredItems = tools.filter((t) => { + if (query === '') return true; + const lowerQuery = query.toLowerCase(); + return ( + (t.name || '').toLowerCase().includes(lowerQuery) || + (t.id || '').toLowerCase().includes(lowerQuery) || + (t.user?.name || '').toLowerCase().includes(lowerQuery) || // Search by user name + (t.user?.email || '').toLowerCase().includes(lowerQuery) // Search by user email + ); + }); const shareHandler = async (tool) => { const item = await getToolById(localStorage.token, tool.id).catch((error) => {