From 0d6907abbdcda155db2fc2619adc7cb54dbe162b Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 13 May 2023 22:04:37 +0200 Subject: [PATCH] Cancelable search query --- pnpm-lock.yaml | 6 +++--- src/components/InputSearch.svelte | 3 +-- src/components/ModalVault.svelte | 14 +++++++++++++- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4558293..640b074 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,7 +58,7 @@ devDependencies: esbuild-plugin-copy: 1.3.0_esbuild@0.14.0 esbuild-svelte: 0.7.1_wvi5wuag3veo5vm52k3h7pgaae jest: 27.5.1 - obsidian: 1.1.1 + obsidian: 1.2.8 prettier: 2.8.1 prettier-plugin-svelte: 2.8.1_sro2v6ld777payjtkjtiuogcxi svelte: 3.54.0 @@ -4119,8 +4119,8 @@ packages: object-keys: 1.1.1 dev: true - /obsidian/1.1.1: - resolution: {integrity: sha512-GcxhsHNkPEkwHEjeyitfYNBcQuYGeAHFs1pEpZIv0CnzSfui8p8bPLm2YKLgcg20B764770B1sYGtxCvk9ptxg==} + /obsidian/1.2.8: + resolution: {integrity: sha512-HrC+feA8o0tXspj4lEAqxb1btwLwHD2oHXSwbbN+CdRHURqbCkuIDLld+nkuyJ1w1c9uvVDRVk8BoeOnWheOrQ==} peerDependencies: '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 diff --git a/src/components/InputSearch.svelte b/src/components/InputSearch.svelte index a7ede1f..15b4df2 100644 --- a/src/components/InputSearch.svelte +++ b/src/components/InputSearch.svelte @@ -12,7 +12,6 @@ const dispatch = createEventDispatcher() export function setInputValue(v: string): void { - console.log('setinput') value = v } @@ -42,7 +41,7 @@ // the next time we open the modal, the search field will be empty cacheManager.addToSearchHistory('') dispatch('input', value) - }, 250) + }, 300)
diff --git a/src/components/ModalVault.svelte b/src/components/ModalVault.svelte index d509a2f..a1063cb 100644 --- a/src/components/ModalVault.svelte +++ b/src/components/ModalVault.svelte @@ -27,6 +27,7 @@ import * as NotesIndex from '../notes-index' import { cacheManager } from '../cache-manager' import { searchEngine } from 'src/search/omnisearch' + import { cancelable, CancelablePromise } from 'cancelable-promise' export let modal: OmnisearchVaultModal let previousQuery: string | undefined @@ -112,9 +113,20 @@ refInput?.setInputValue(searchQuery) } + let cancelableQuery: CancelablePromise | null = null async function updateResults() { + // If search is already in progress, cancel it and start a new one + if (cancelableQuery) { + cancelableQuery.cancel() + cancelableQuery = null + } query = new Query(searchQuery) - resultNotes = await searchEngine.getSuggestions(query) + cancelableQuery = cancelable( + new Promise(resolve => { + resolve(searchEngine.getSuggestions(query)) + }) + ) + resultNotes = await cancelableQuery selectedIndex = 0 await scrollIntoView() }