From d3e5897cd54f3dc8eaf1ae68a65fc79a42a993ea Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Tue, 17 Mar 2026 00:35:49 +0100 Subject: [PATCH] completed autocomplete box in permission editor for projects Signed-off-by: Stephan Richter --- frontend/src/Components/Autocomplete.svelte | 66 ++++++++++++++----- .../src/Components/PermissionEditor.svelte | 13 ++-- frontend/src/routes/project/View.svelte | 22 +------ 3 files changed, 58 insertions(+), 43 deletions(-) diff --git a/frontend/src/Components/Autocomplete.svelte b/frontend/src/Components/Autocomplete.svelte index e5cc13a8..a3bd1f40 100644 --- a/frontend/src/Components/Autocomplete.svelte +++ b/frontend/src/Components/Autocomplete.svelte @@ -9,11 +9,11 @@ onSelect = dummyOnSelect, } = $props(); - const ignore = ['Escape','Tab','ArrowUp','ArrowLeft','ArrowRight']; + const ignore = ['ArrowLeft','ArrowRight']; let candidate = $state({ display : '' }); + let selected = $state([]); let candidates = $derived(getCandidates(candidate.display)); - async function dummyGetCandidates(text){ console.warn(`getCandidates(${text}) not overridden!`); if (!text) return []; @@ -35,7 +35,7 @@ // if Enter is pressed on the input field, this method gets called with // either the selected candidate or // an anonymous object with the entered text in the display field - console.warn('onCommit not overridden!'); + console.warn(`onCommit(${JSON.stringify(candidate)}) not overridden!`); } function dummyOnSelect(candidate){ @@ -43,31 +43,63 @@ } async function onkeyup(ev){ - const select = ev.target; - const key = ev.key; - if (ignore.includes(key)) return; + 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]; + return false; + } + if (ev.key == 'ArrowUp'){ + ev.preventDefault(); + selected = selected.length < 1 ? [-1] : [selected[0]-1] + if (selected[0] < 0) selected = [candidates.length-1]; + return false; + } + if (ev.key == 'Enter'|| ev.key == 'Tab'){ + ev.preventDefault(); + if (selected.length>0) { + candidate = candidates[selected[0]]; + candidates = []; + selected = []; + onSelect(candidate); + return false; + } + if (ev.key == 'Enter') { + candidates = []; + selected = []; + onCommit(candidate); + } + return false; + } + if (ev.key == 'Escape'){ + ev.preventDefault(); + candidates = []; + selected = []; + return false; + } + candidates = await getCandidates(candidate.display); + if (selected>candidates.length) selected = candidates.length; + return false; }
- {#if candidates && candidates.length > 1} - + {#each candidates as candidate,i} + {/each} {/if} -
-{#if candidates} -
-{JSON.stringify(candidates,null,2)}
-
-{/if} -{JSON.stringify(candidate)} + \ No newline at end of file diff --git a/frontend/src/Components/PermissionEditor.svelte b/frontend/src/Components/PermissionEditor.svelte index 22c15639..ec5b56e1 100644 --- a/frontend/src/Components/PermissionEditor.svelte +++ b/frontend/src/Components/PermissionEditor.svelte @@ -1,8 +1,9 @@