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) } }