@tolokoban/ui
Version:
React components with theme
31 lines • 2.4 kB
JavaScript
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