2019-12-08 00:32:00 +05:30
|
|
|
import logger from 'app/services/logger';
|
2017-04-12 00:48:27 +05:30
|
|
|
|
|
|
|
let _hasStorage = false;
|
|
|
|
|
|
|
|
try {
|
2020-05-24 04:38:24 +05:30
|
|
|
const test = 'test';
|
|
|
|
window.localStorage.setItem(test, test);
|
|
|
|
window.localStorage.removeItem(test);
|
2017-04-12 00:48:27 +05:30
|
|
|
|
2020-05-24 04:38:24 +05:30
|
|
|
_hasStorage = true;
|
2017-04-12 00:48:27 +05:30
|
|
|
} catch (err) {
|
2020-05-24 04:38:24 +05:30
|
|
|
// bad luck, no storage available
|
|
|
|
logger.info('No storage available'); // log for statistic purposes
|
2017-04-12 00:48:27 +05:30
|
|
|
}
|
|
|
|
|
2020-01-18 02:07:52 +05:30
|
|
|
export function hasStorage(): boolean {
|
2020-05-24 04:38:24 +05:30
|
|
|
return _hasStorage;
|
2017-04-12 00:48:27 +05:30
|
|
|
}
|
|
|
|
|
2020-01-17 15:14:22 +05:30
|
|
|
class DummyStorage implements Storage {
|
2020-05-24 04:38:24 +05:30
|
|
|
// FIXME: we can't use this declaration because it breaks react-hot-loader/babel
|
|
|
|
// [key: string]: any;
|
|
|
|
|
|
|
|
get length() {
|
|
|
|
return Object.keys(this).length;
|
|
|
|
}
|
|
|
|
|
|
|
|
getItem(key: string): string | null {
|
|
|
|
// @ts-ignore
|
|
|
|
return this[key] || null;
|
|
|
|
}
|
|
|
|
|
|
|
|
setItem(key: string, value: string): void {
|
|
|
|
// @ts-ignore
|
|
|
|
this[key] = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
removeItem(key: string): void {
|
|
|
|
Reflect.deleteProperty(this, key);
|
|
|
|
}
|
|
|
|
|
|
|
|
clear(): void {
|
|
|
|
Object.keys(this).forEach(this.removeItem);
|
|
|
|
}
|
|
|
|
|
|
|
|
key(index: number): string | null {
|
|
|
|
return Object.keys(this)[index] || null;
|
|
|
|
}
|
2017-04-12 00:48:27 +05:30
|
|
|
}
|
|
|
|
|
2020-05-24 04:38:24 +05:30
|
|
|
export const localStorage = _hasStorage ? window.localStorage : new DummyStorage();
|
2017-04-12 00:48:27 +05:30
|
|
|
|
2020-05-24 04:38:24 +05:30
|
|
|
export const sessionStorage = _hasStorage ? window.sessionStorage : new DummyStorage();
|
2017-04-12 00:48:27 +05:30
|
|
|
|
|
|
|
export default localStorage;
|