diff --git a/src/lib/components/layout/SearchModal.svelte b/src/lib/components/layout/SearchModal.svelte index eb0fc8ffe..d6d8a2745 100644 --- a/src/lib/components/layout/SearchModal.svelte +++ b/src/lib/components/layout/SearchModal.svelte @@ -26,6 +26,8 @@ let searchDebounceTimeout; + let selectedIdx = 0; + const searchHandler = async () => { console.log('search', query); @@ -89,25 +91,47 @@ on:input={searchHandler} placeholder={$i18n.t('Search')} showClearButton={true} + onKeydown={(e) => { + console.log('e', e); + + if (e.code === 'Enter' && (chatList ?? []).length > 0) { + const item = document.querySelector(`[data-arrow-selected="true"]`); + if (item) { + item?.click(); + } + + show = false; + return; + } else if (e.code === 'ArrowDown') { + selectedIdx = Math.min(selectedIdx + 1, (chatList ?? []).length - 1); + } else if (e.code === 'ArrowUp') { + selectedIdx = Math.max(selectedIdx - 1, 0); + } else { + selectedIdx = 0; + } + + const item = document.querySelector(`[data-arrow-selected="true"]`); + item?.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'instant' }); + }} /> -
+
{#if chatList} {#if chatList.length === 0} -
+
{$i18n.t('No results found')}
{/if} - {#each chatList as chat, idx} + {#each chatList as chat, idx (chat.id)} {#if idx === 0 || (idx > 0 && chat.time_range !== chatList[idx - 1].time_range)}
{$i18n.t(chat.time_range)}
{ selectedIdx = null;