diff --git a/src/services/webStorage.service.ts b/src/services/webStorage.service.ts index 271f2ff926..0fff0c49cc 100644 --- a/src/services/webStorage.service.ts +++ b/src/services/webStorage.service.ts @@ -1,27 +1,60 @@ import { StorageService } from 'jslib/abstractions/storage.service'; +import { ConstantsService } from 'jslib/services'; export class WebStorageService implements StorageService { + private memoryStore = new Map(); + private memoryKeys = new Set(['key']); + private localStorageKeys = new Set(['appId', 'anonymousAppId', 'rememberedEmail', + ConstantsService.disableFaviconKey, ConstantsService.lockOptionKey, ConstantsService.localeKey, + ConstantsService.lockOptionKey]); + get(key: string): Promise { - const json = window.sessionStorage.getItem(key); - if (json == null) { - return Promise.resolve(null); + if (this.memoryKeys.has(key)) { + if (this.memoryStore.has(key)) { + const obj = this.memoryStore.get(key); + return Promise.resolve(obj as T); + } + } else { + let json: string = null; + if (this.localStorageKeys.has(key)) { + json = window.localStorage.getItem(key); + } else { + json = window.sessionStorage.getItem(key); + } + if (json != null) { + const obj = JSON.parse(json); + return Promise.resolve(obj as T); + } } - const obj = JSON.parse(json); - return Promise.resolve(obj as T); + return Promise.resolve(null); } save(key: string, obj: any): Promise { if (obj == null) { - this.remove(key); - return; + return this.remove(key); + } + + if (this.memoryKeys.has(key)) { + this.memoryStore.set(key, obj); + } else { + const json = JSON.stringify(obj); + if (this.localStorageKeys.has(key)) { + window.localStorage.setItem(key, json); + } else { + window.sessionStorage.setItem(key, json); + } } - const json = JSON.stringify(obj); - window.sessionStorage.setItem(key, json); return Promise.resolve(); } remove(key: string): Promise { - window.sessionStorage.removeItem(key); + if (this.memoryKeys.has(key)) { + this.memoryStore.delete(key); + } else if (this.localStorageKeys.has(key)) { + window.localStorage.removeItem(key); + } else { + window.sessionStorage.removeItem(key); + } return Promise.resolve(); } }