40 lines
1,013 B
JavaScript
40 lines
1,013 B
JavaScript
import AccessorUtilities from '../../lib/utils/accessor';
|
|
import RecentSearchesServiceError from './recent_searches_service_error';
|
|
|
|
class RecentSearchesService {
|
|
constructor(localStorageKey = 'issuable-recent-searches') {
|
|
this.localStorageKey = localStorageKey;
|
|
}
|
|
|
|
fetch() {
|
|
if (!RecentSearchesService.isAvailable()) {
|
|
const error = new RecentSearchesServiceError();
|
|
return Promise.reject(error);
|
|
}
|
|
|
|
const input = window.localStorage.getItem(this.localStorageKey);
|
|
|
|
let searches = [];
|
|
if (input && input.length > 0) {
|
|
try {
|
|
searches = JSON.parse(input);
|
|
} catch (err) {
|
|
return Promise.reject(err);
|
|
}
|
|
}
|
|
|
|
return Promise.resolve(searches);
|
|
}
|
|
|
|
save(searches = []) {
|
|
if (!RecentSearchesService.isAvailable()) return;
|
|
|
|
window.localStorage.setItem(this.localStorageKey, JSON.stringify(searches));
|
|
}
|
|
|
|
static isAvailable() {
|
|
return AccessorUtilities.canUseLocalStorage();
|
|
}
|
|
}
|
|
|
|
export default RecentSearchesService;
|