mirror of
https://github.com/sissbruecker/linkding
synced 2024-11-10 06:04:15 +00:00
53 lines
1.2 KiB
JavaScript
53 lines
1.2 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);
|
||
|
}
|
||
|
}
|