From 0fd062fc0faa72d027a9922b635b9015d2be9b71 Mon Sep 17 00:00:00 2001 From: Marco Crapts Date: Sat, 29 Apr 2023 19:37:20 +0200 Subject: [PATCH] keyboard shortcuts for search --- src/components/SearchBar.vue | 44 ++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/components/SearchBar.vue b/src/components/SearchBar.vue index 445283a..d496b45 100644 --- a/src/components/SearchBar.vue +++ b/src/components/SearchBar.vue @@ -5,7 +5,10 @@ import { formatDate } from '@/utils/helpers' const active = ref(false) watch(active, () => { - if (!active.value) query.value = '' + if (!active.value) { + query.value = '' + activeResult.value = undefined + } }) const query = ref('') @@ -19,6 +22,29 @@ const goToNote = (note: Note) => { if (queryElem.value) queryElem.value.blur() } const queryElem = ref(null) + +const activeResult = ref() + +const handleKeydown = (event: KeyboardEvent) => { + const code = event.code + if (['ArrowUp', 'ArrowDown', 'Tab'].includes(code)) { + let index = results.value.findIndex( + (note) => note.id === activeResult.value?.id + ) + if (['ArrowDown', 'Tab'].includes(code)) { + index++ + } else if (['ArrowUp'].includes(code)) { + index-- + } + if (index + 1 > results.value.length) index = index - results.value.length + if (index < 0) index = results.value.length - 1 + activeResult.value = results.value[index] + } else if (code === 'Enter' && activeResult.value) { + goToNote(activeResult.value) + } else if (code === 'Escape' && queryElem.value) { + queryElem.value.blur() + } +}