Limit search input to first character matching when only one character is typed

pull/2615/head
Bogdan 2 years ago
parent 3da00f75dc
commit 08a3682b89

@ -26,6 +26,7 @@ function createCleanAuthorSelector() {
sortName, sortName,
titleSlug, titleSlug,
images, images,
firstCharacter: authorName.charAt(0).toLowerCase(),
tags: tags.reduce((acc, id) => { tags: tags.reduce((acc, id) => {
const matchingTag = allTags.find((tag) => tag.id === id); const matchingTag = allTags.find((tag) => tag.id === id);
@ -58,6 +59,7 @@ function createCleanBookSelector() {
sortName: title, sortName: title,
titleSlug, titleSlug,
images, images,
firstCharacter: title.charAt(0).toLowerCase(),
tags: [] tags: []
}; };
}); });

@ -15,9 +15,36 @@ const fuseOptions = {
function getSuggestions(items, value) { function getSuggestions(items, value) {
const limit = 10; const limit = 10;
let suggestions = [];
const fuse = new Fuse(items, fuseOptions); if (value.length === 1) {
return fuse.search(value, { limit }); for (let i = 0; i < items.length; i++) {
const s = items[i];
if (s.firstCharacter === value.toLowerCase()) {
suggestions.push({
item: items[i],
indices: [
[0, 0]
],
matches: [
{
value: s.title,
key: 'title'
}
],
arrayIndex: 0
});
if (suggestions.length > limit) {
break;
}
}
}
} else {
const fuse = new Fuse(items, fuseOptions);
suggestions = fuse.search(value, { limit });
}
return suggestions;
} }
onmessage = function(e) { onmessage = function(e) {

Loading…
Cancel
Save