import {UIEventSource} from "../UIEventSource"; /** * UIEventsource-wrapper around localStorage */ export class LocalStorageSource { static GetParsed(key: string, defaultValue : T) : UIEventSource{ return LocalStorageSource.Get(key).map( str => { if(str === undefined){ return defaultValue } try{ return JSON.parse(str) }catch{ return defaultValue } }, [], value => JSON.stringify(value) ) } static Get(key: string, defaultValue: string = undefined): UIEventSource { try { const saved = localStorage.getItem(key); const source = new UIEventSource(saved ?? defaultValue, "localstorage:"+key); source.addCallback((data) => { try{ localStorage.setItem(key, data); }catch(e){ // Probably exceeded the quota with this item! // Lets nuke everything localStorage.clear() } }); return source; } catch (e) { return new UIEventSource(defaultValue); } } }