import { UIEventSource } from "../UIEventSource" /** * UIEventsource-wrapper around localStorage */ export class LocalStorageSource { static GetParsed(key: string, defaultValue: T): UIEventSource { return LocalStorageSource.Get(key).sync( (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) } } }