app/Service/LocalStorageService.js
const localStorageKeyCheck = 'localStorageKeyCheck'.split('').reverse();
/**
* LocalStorage proxy that handles not available localStorage (e.g. Safari Private).
*/
export class LocalStorageService {
/**
* Initialize local storage with undefined enabled flag.
*/
constructor() {
/**
* Map to store Key/Value data
*/
this.storage = {};
/**
* Boolean to determine is native LocalStorage is enabled or not.
*/
this.storageEnabled = undefined;
}
/**
* Check if LocalStorage is available.
* @return {Boolean} True if LocalStorage is available, false otherwise
*/
isEnabled() {
if (typeof this.storageEnabled === 'undefined') {
try {
localStorage.setItem(localStorageKeyCheck, true);
localStorage.removeItem(localStorageKeyCheck);
this.storageEnabled = true;
} catch (e) {
this.storageEnabled = false;
}
}
return this.storageEnabled;
}
/**
* Return item from LocalStorage
* @param {String} key Searched key
* @return {Object} Value found or undefined
*/
getItem(key) {
return this.isEnabled() ? localStorage.getItem(key) : this.storage[key];
}
/**
* Store a value with a key from LocalStorage.
* @param {String} key Key stored
* @param {Object} value Value stored
*/
setItem(key, value) {
if (this.isEnabled()) {
localStorage.setItem(key, value);
} else {
this.storage[key] = value;
}
}
/**
* Remove entry from LocalStorage for given key.
* @param {String} key Searched key
*/
removeItem(key) {
if (this.isEnabled()) {
localStorage.removeItem(key);
} else {
delete this.storage[key];
}
}
}
export default new LocalStorageService();