use parsed query for history suggestions

This commit is contained in:
Cade Scroggins
2022-02-20 14:04:57 -08:00
parent f516bcebfa
commit 18548a3a8d
+28 -27
View File
@@ -91,7 +91,7 @@
* To disable suggestions, remove all influencers. * To disable suggestions, remove all influencers.
*/ */
suggestionInfluencers: [ suggestionInfluencers: [
{ name: 'Default', limit: 4, minChars: 1 }, { name: 'Default', limit: 4 },
{ name: 'History', limit: 4, minChars: 2 }, { name: 'History', limit: 4, minChars: 2 },
{ name: 'DuckDuckGo', limit: 4, minChars: 2 }, { name: 'DuckDuckGo', limit: 4, minChars: 2 },
], ],
@@ -828,8 +828,6 @@
} }
getSuggestions({ raw }) { getSuggestions({ raw }) {
if (this._isTooShort(raw)) return Promise.resolve([]);
return new Promise((resolve) => return new Promise((resolve) =>
resolve((this._suggestionDefaults[raw] || []).slice(0, this._limit)) resolve((this._suggestionDefaults[raw] || []).slice(0, this._limit))
); );
@@ -843,7 +841,7 @@
getSuggestions(parsedQuery) { getSuggestions(parsedQuery) {
const { query } = parsedQuery; const { query } = parsedQuery;
if (this._isTooShort(query) || !query) return Promise.resolve([]); if (this._isTooShort(query)) return Promise.resolve([]);
return new Promise((resolve) => { return new Promise((resolve) => {
window.autocompleteCallback = (res) => window.autocompleteCallback = (res) =>
@@ -874,8 +872,8 @@
localStorage.clear(); localStorage.clear();
} }
addItem(query) { addItem({ query }) {
if (query.length < 2) return; if (query.length < this._minChars) return;
let exists; let exists;
const history = this._getHistory().map(([item, count]) => { const history = this._getHistory().map(([item, count]) => {
@@ -893,20 +891,24 @@
this._setHistory(sorted); this._setHistory(sorted);
} }
getSuggestions({ raw }) { getSuggestions(parsedQuery) {
if (this._isTooShort(raw)) return Promise.resolve([]); const { query } = parsedQuery;
if (this._isTooShort(query)) return Promise.resolve([]);
return new Promise((resolve) => return new Promise((resolve) =>
resolve( resolve(
this._getHistory() this._addSearchPrefix(
.map(([item]) => item) this._getHistory()
.filter( .map(([item]) => item)
(item) => .filter(
raw && (item) =>
item.toLowerCase() !== raw.toLowerCase() && query &&
item.toLowerCase().indexOf(raw.toLowerCase()) !== -1 item.toLowerCase() !== query.toLowerCase() &&
) item.toLowerCase().includes(query.toLowerCase())
.slice(0, this._limit) )
.slice(0, this._limit),
parsedQuery
)
) )
); );
} }
@@ -955,8 +957,8 @@
this._onUnhighlight = callback; this._onUnhighlight = callback;
} }
success(query) { success(parsedQuery) {
this._influencers.forEach((i) => i.addItem(query)); this._influencers.forEach((i) => i.addItem(parsedQuery));
this._clearSuggestions(); this._clearSuggestions();
} }
@@ -1357,17 +1359,16 @@
_submitForm(e) { _submitForm(e) {
if (e) e.preventDefault(); if (e) e.preventDefault();
const query = this._inputEl.value; const parsedQuery = this._parseQuery(this._inputEl.value);
if (this._suggester) this._suggester.success(query);
this.hide();
const res = this._parseQuery(query);
if (res.length) { if (parsedQuery.length) {
res.forEach((r) => this._redirect(r.redirect, true)); parsedQuery.forEach((r) => this._redirect(r.redirect, true));
return; } else {
this._redirect(parsedQuery.redirect);
} }
this._redirect(res.redirect); this._suggester.success(parsedQuery);
this.hide();
} }
_submitWithValue(value) { _submitWithValue(value) {