accounts-frontend/packages/app/services/localStorage.ts

56 lines
1.3 KiB
TypeScript
Raw Normal View History

import logger from 'app/services/logger';
let _hasStorage = false;
try {
2020-05-24 04:38:24 +05:30
const test = 'test';
window.localStorage.setItem(test, test);
window.localStorage.removeItem(test);
2020-05-24 04:38:24 +05:30
_hasStorage = true;
} catch (err) {
2020-05-24 04:38:24 +05:30
// bad luck, no storage available
logger.info('No storage available'); // log for statistic purposes
}
export function hasStorage(): boolean {
2020-05-24 04:38:24 +05:30
return _hasStorage;
}
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;
}
}
2020-05-24 04:38:24 +05:30
export const localStorage = _hasStorage ? window.localStorage : new DummyStorage();
2020-05-24 04:38:24 +05:30
export const sessionStorage = _hasStorage ? window.sessionStorage : new DummyStorage();
export default localStorage;