mirror of
https://github.com/sissbruecker/linkding
synced 2024-11-10 14:14:18 +00:00
c13b27e170
* Implement search autocomplete for recent searches * Implement search autocomplete for bookmarks * Fix URL encoding of query param * Add tag suggestions to search autocomplete Co-authored-by: Sascha Ißbrücker <sissbruecker@lyska.io>
48 lines
No EOL
1.3 KiB
JavaScript
48 lines
No EOL
1.3 KiB
JavaScript
const SEARCH_HISTORY_KEY = 'searchHistory'
|
|
const MAX_ENTRIES = 30
|
|
|
|
export class SearchHistory {
|
|
|
|
getHistory() {
|
|
const historyJson = localStorage.getItem(SEARCH_HISTORY_KEY)
|
|
return historyJson ? JSON.parse(historyJson) : {
|
|
recent: []
|
|
}
|
|
}
|
|
|
|
pushCurrent() {
|
|
// Skip if browser is not compatible
|
|
if (!window.URLSearchParams) return
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
const searchParam = urlParams.get('q');
|
|
|
|
if (!searchParam) return
|
|
|
|
this.push(searchParam)
|
|
}
|
|
|
|
push(search) {
|
|
const history = this.getHistory()
|
|
|
|
history.recent.unshift(search)
|
|
|
|
// Remove duplicates and clamp to max entries
|
|
history.recent = history.recent.reduce((acc, cur) => {
|
|
if (acc.length >= MAX_ENTRIES) return acc
|
|
if (acc.indexOf(cur) >= 0) return acc
|
|
acc.push(cur)
|
|
return acc
|
|
}, [])
|
|
|
|
const newHistoryJson = JSON.stringify(history)
|
|
localStorage.setItem(SEARCH_HISTORY_KEY, newHistoryJson)
|
|
}
|
|
|
|
getRecentSearches(query, max) {
|
|
const history = this.getHistory()
|
|
|
|
return history.recent
|
|
.filter(search => !query || search.toLowerCase().indexOf(query.toLowerCase()) >= 0)
|
|
.slice(0, max)
|
|
}
|
|
} |