From 202d8ce81314e8e98e013009d66e4d8c354e41f2 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Tue, 25 Apr 2023 10:02:09 -0700 Subject: [PATCH 1/2] allow null result for selection when autoselect is false and the enter key is hit without making a selection --- src/Typeahead.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Typeahead.svelte b/src/Typeahead.svelte index 3b30532..2ceca7f 100644 --- a/src/Typeahead.svelte +++ b/src/Typeahead.svelte @@ -73,9 +73,9 @@ async function select() { const result = results[selectedIndex]; - if (result.disabled) return; + if (result?.disabled) return; - const selectedValue = extract(result.original); + const selectedValue = result ? extract(result.original) : null; const searchedValue = value; if (inputAfterSelect == "clear") value = ""; @@ -85,7 +85,7 @@ selectedIndex, searched: searchedValue, selected: selectedValue, - original: result.original, + original: result?.original, originalIndex: result.index, }); From 6a950c0de6dcfc78d6d71de9d5d3686624313262 Mon Sep 17 00:00:00 2001 From: Adam Sparks Date: Tue, 25 Apr 2023 23:03:13 -0700 Subject: [PATCH 2/2] fire selected with null when there are no options --- src/Typeahead.svelte | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Typeahead.svelte b/src/Typeahead.svelte index 2ceca7f..3989b19 100644 --- a/src/Typeahead.svelte +++ b/src/Typeahead.svelte @@ -74,8 +74,9 @@ const result = results[selectedIndex]; if (result?.disabled) return; - - const selectedValue = result ? extract(result.original) : null; + + const original = result ? result.original : null; + const selectedValue = original ? extract(original) : null; const searchedValue = value; if (inputAfterSelect == "clear") value = ""; @@ -85,9 +86,10 @@ selectedIndex, searched: searchedValue, selected: selectedValue, - original: result?.original, - originalIndex: result.index, + original: original, + originalIndex: result?.index ?? null, }); + selectedIndex = -1; await tick(); @@ -215,7 +217,7 @@ on:blur on:keydown on:keydown={(e) => { - if (results.length === 0) return; + if (results.length === 0 && e.key !== 'Enter') return; switch (e.key) { case "Enter":