From aa6f63a335e172fec1dc94b2056541f52c1167a6 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 24 Sep 2025 16:29:02 -0500 Subject: [PATCH] enh: search modal actions --- src/lib/components/layout/SearchModal.svelte | 83 +++++++++++++++++--- 1 file changed, 72 insertions(+), 11 deletions(-) diff --git a/src/lib/components/layout/SearchModal.svelte b/src/lib/components/layout/SearchModal.svelte index 70312bd590..e53e73358c 100644 --- a/src/lib/components/layout/SearchModal.svelte +++ b/src/lib/components/layout/SearchModal.svelte @@ -15,11 +15,34 @@ import { user } from '$lib/stores'; import Messages from '../chat/Messages.svelte'; import { goto } from '$app/navigation'; + import PencilSquare from '../icons/PencilSquare.svelte'; + import Note from '../icons/Note.svelte'; dayjs.extend(calendar); export let show = false; export let onClose = () => {}; + let actions = [ + { + label: 'Start a new conversation', + onClick: async () => { + await goto(`/${query ? `?q=${query}` : ''}`); + show = false; + onClose(); + }, + icon: PencilSquare + }, + { + label: 'Create a new note', + onClick: async () => { + await goto('/notes'); + show = false; + onClose(); + }, + icon: Note + } + ]; + let query = ''; let page = 1; @@ -55,7 +78,13 @@ return; } - const chatId = chatList[selectedIdx].id; + const selectedChatIdx = selectedIdx - actions.length; + if (selectedChatIdx < 0) { + selectedChat = null; + return; + } + + const chatId = chatList[selectedChatIdx].id; const chat = await getChatById(localStorage.token, chatId).catch(async (error) => { return null; @@ -162,13 +191,13 @@ if (e.code === 'Escape') { show = false; onClose(); - } else if (e.code === 'Enter' && (chatList ?? []).length > 0) { + } else if (e.code === 'Enter') { const item = document.querySelector(`[data-arrow-selected="true"]`); if (item) { item?.click(); + show = false; } - show = false; return; } else if (e.code === 'ArrowDown') { const searchInput = document.getElementById('search-input'); @@ -182,7 +211,7 @@ } } - selectedIdx = Math.min(selectedIdx + 1, (chatList ?? []).length - 1); + selectedIdx = Math.min(selectedIdx + 1, (chatList ?? []).length - 1 + actions.length); } else if (e.code === 'ArrowUp') { if (selectedIdx === 0) { const searchInput = document.getElementById('search-input'); @@ -240,7 +269,7 @@ show = false; return; } else if (e.code === 'ArrowDown') { - selectedIdx = Math.min(selectedIdx + 1, (chatList ?? []).length - 1); + selectedIdx = Math.min(selectedIdx + 1, (chatList ?? []).length - 1 + actions.length); } else if (e.code === 'ArrowUp') { selectedIdx = Math.max(selectedIdx - 1, 0); } else { @@ -257,11 +286,43 @@
+
+ {$i18n.t('Actions')} +
+ + {#each actions as action, idx (action.label)} + + {/each} + {#if chatList} +
+ {#if chatList.length === 0} -