From 71309011a0e587e7e32b125dc0b1a4c441b7cd5c Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Fri, 24 Apr 2026 11:45:34 +0200 Subject: [PATCH] improving autocomplete Signed-off-by: Stephan Richter --- frontend/src/Components/Autocomplete.svelte | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/frontend/src/Components/Autocomplete.svelte b/frontend/src/Components/Autocomplete.svelte index df37a557..1bbe2741 100644 --- a/frontend/src/Components/Autocomplete.svelte +++ b/frontend/src/Components/Autocomplete.svelte @@ -17,6 +17,7 @@ let selected = $state(null); let candidates = $state([]); let timer = null; + let list_elem; async function dummyGetCandidates(text){ console.warn(`getCandidates(${text}) not overridden!`); @@ -58,9 +59,8 @@ } async function fetchCandidates(){ - candidates = await getCandidates(candidate.display); + candidates = candidate.display ? await getCandidates(candidate.display) : []; selected = null; - if (selected>candidates.length) selected = candidates.length; } async function onkeyup(ev){ @@ -69,12 +69,14 @@ ev.preventDefault(); selected = selected == null ? 0: selected +1; if (selected >= candidates.length) selected = 0; + scrollTo(selected); return false; } if (ev.key == 'ArrowUp'){ ev.preventDefault(); selected = selected == null ? candidates.length -1 : selected -1; if (selected < 0) selected = candidates.length -1; + scrollTo(selected); return false; } if (ev.key == 'Enter'|| ev.key == 'Tab'){ @@ -113,6 +115,11 @@ onSelect(candidate); } + + function scrollTo(index){ + let list_elements = list_elem.children; + if (list_elements) list_elements[index].scrollIntoView({block:'center'}); + }