diff --git a/frontend/src/Components/Autocomplete.svelte b/frontend/src/Components/Autocomplete.svelte
index 7c2be8fc..df37a557 100644
--- a/frontend/src/Components/Autocomplete.svelte
+++ b/frontend/src/Components/Autocomplete.svelte
@@ -14,8 +14,9 @@
const ignore = ['ArrowLeft','ArrowRight'];
//let candidate = $state({ display : '' });
- let selected = $state([]);
- let candidates = $derived(getCandidates(candidate.display));
+ let selected = $state(null);
+ let candidates = $state([]);
+ let timer = null;
async function dummyGetCandidates(text){
console.warn(`getCandidates(${text}) not overridden!`);
@@ -52,36 +53,42 @@
const idx = select.value;
candidate = candidates[idx];
candidates = [];
- selected = [];
+ selected = null;
onSelect(candidate);
}
+ async function fetchCandidates(){
+ candidates = await getCandidates(candidate.display);
+ selected = null;
+ if (selected>candidates.length) selected = candidates.length;
+ }
+
async function onkeyup(ev){
if (ignore.includes(ev.key)) return;
if (ev.key == 'ArrowDown'){
ev.preventDefault();
- selected = selected.length < 1 ? [0] : [selected[0]+1]
- if (selected[0] >= candidates.length) selected = [0];
+ selected = selected == null ? 0: selected +1;
+ if (selected >= candidates.length) selected = 0;
return false;
}
if (ev.key == 'ArrowUp'){
ev.preventDefault();
- selected = selected.length < 1 ? [-1] : [selected[0]-1]
- if (selected[0] < 0) selected = [candidates.length-1];
+ selected = selected == null ? candidates.length -1 : selected -1;
+ if (selected < 0) selected = candidates.length -1;
return false;
}
if (ev.key == 'Enter'|| ev.key == 'Tab'){
ev.preventDefault();
- if (selected.length>0) {
- candidate = candidates[selected[0]];
+ if (selected != null && selected < candidates.length) {
+ candidate = candidates[selected];
candidates = [];
- selected = [];
+ selected = null;
onSelect(candidate);
return false;
}
if (ev.key == 'Enter') {
candidates = [];
- selected = [];
+ selected = null;
if (onCommit(candidate)) candidate = { display : '' };
}
return false;
@@ -89,32 +96,51 @@
if (ev.key == 'Escape'){
ev.preventDefault();
candidates = [];
- selected = [];
+ selected = null;
return false;
}
candidate = { display : candidate.display };
- candidates = await getCandidates(candidate.display);
- if (selected>candidates.length) selected = candidates.length;
+ if (timer) clearTimeout(timer);
+ timer = setTimeout(fetchCandidates,400);
return false;
}
+
+ function select(index){
+ candidate = candidates[index];
+ selected = null;
+ candidates = [];
+ onSelect(candidate);
+
+ }
{#if candidates && candidates.length > 0}
-
+
{/if}
-
\ No newline at end of file
+