diff --git a/src/lib/components/workspace/Prompts.svelte b/src/lib/components/workspace/Prompts.svelte index 3381757742..0ca16f6ecc 100644 --- a/src/lib/components/workspace/Prompts.svelte +++ b/src/lib/components/workspace/Prompts.svelte @@ -4,7 +4,7 @@ const { saveAs } = fileSaver; import { goto } from '$app/navigation'; - import { onMount, getContext } from 'svelte'; + import { onMount, getContext, tick } from 'svelte'; import { WEBUI_NAME, config, prompts as _prompts, user } from '$lib/stores'; import { @@ -13,6 +13,7 @@ getPrompts, getPromptList } from '$lib/apis/prompts'; + import { capitalizeFirstLetter, slugify } from '$lib/utils'; import PromptMenu from './Prompts/PromptMenu.svelte'; import EllipsisHorizontal from '../icons/EllipsisHorizontal.svelte'; @@ -22,9 +23,9 @@ import ChevronRight from '../icons/ChevronRight.svelte'; import Spinner from '../common/Spinner.svelte'; import Tooltip from '../common/Tooltip.svelte'; - import { capitalizeFirstLetter, slugify } from '$lib/utils'; import XMark from '../icons/XMark.svelte'; import GarbageBin from '../icons/GarbageBin.svelte'; + import ViewSelector from './common/ViewSelector.svelte'; let shiftKey = false; @@ -40,17 +41,30 @@ let showDeleteConfirm = false; let deletePrompt = null; + let tagsContainerElement: HTMLDivElement; + let viewOption = ''; + let filteredItems = []; - $: 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) - ); - }); + + $: if (prompts && query !== undefined && viewOption !== undefined) { + setFilteredItems(); + } + + const setFilteredItems = () => { + filteredItems = prompts.filter((p) => { + if (query === '' && viewOption === '') 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)) && + (viewOption === '' || + (viewOption === 'created' && p.user_id === $user?.id) || + (viewOption === 'shared' && p.user_id !== $user?.id)) + ); + }); + }; const shareHandler = async (prompt) => { toast.success($i18n.t('Redirecting you to Open WebUI Community')); @@ -111,6 +125,7 @@ }; onMount(async () => { + viewOption = localStorage?.workspaceViewOption || ''; await init(); loaded = true; @@ -161,18 +176,99 @@ -