UNPKG

@tolokoban/ui

Version:

React components with theme

31 lines 2.4 kB
import * as React from "react"; /** * State variable that can be stored in local storage. * @param defaultValue Default value for initialization. * @param storageKey Key where to store it in local storage. * @param ensureType If defined, it is used to transform the value read from storage. */ export function useLocalStorageState(defaultValue, storageKey, ensureType = (value) => value) { const [value, setValue] = React.useState(get(storageKey, defaultValue, ensureType)); return [ value, (newValue) => { setValue(newValue); window.localStorage.setItem(storageKey, JSON.stringify(newValue)); }, ]; } function get(key, defaultValue, ensureType) { const text = window.localStorage.getItem(key); if (text === null) return defaultValue; try { const value = JSON.parse(text); return ensureType(value); } catch (ex) { console.error(`Unexpected value in local storage "${key}":`, ex); return defaultValue; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy9sb2NhbC1zdG9yYWdlLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBRTlCOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxZQUFlLEVBQ2YsVUFBa0IsRUFDbEIsYUFBb0MsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUFDLEtBQVU7SUFFbEUsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUNwQyxHQUFHLENBQUksVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FDL0MsQ0FBQTtJQUNELE9BQU87UUFDSCxLQUFLO1FBQ0wsQ0FBQyxRQUFXLEVBQUUsRUFBRTtZQUNaLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNsQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQ3JFLENBQUM7S0FDSixDQUFBO0FBQ0wsQ0FBQztBQUVELFNBQVMsR0FBRyxDQUNSLEdBQVcsRUFDWCxZQUFlLEVBQ2YsVUFBaUM7SUFFakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0MsSUFBSSxJQUFJLEtBQUssSUFBSTtRQUFFLE9BQU8sWUFBWSxDQUFBO0lBRXRDLElBQUksQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxPQUFPLFlBQVksQ0FBQTtJQUN2QixDQUFDO0FBQ0wsQ0FBQyJ9