UNPKG

mui-extended

Version:

Extended UI Components built on Material UI

36 lines (35 loc) 1.56 kB
import { useState, useEffect } from "react"; export var useStateWithWebStorage = function (webStorage, webStorageKey, initialValue) { var _a = useState({ checked: false, value: initialValue }), value = _a[0], setValue = _a[1]; useEffect(function () { if (!value.checked && typeof webStorage !== "undefined") { // update value from storage to state during mount var value_1 = webStorage.getItem(webStorageKey); if (typeof value_1 === "string") { value_1 = JSON.parse(value_1); } setValue({ checked: true, value: value_1 !== null ? value_1 : initialValue }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); var decoratedSetValue = function (newValue) { if (typeof webStorage !== "undefined") { // update storage when value changes webStorage.setItem(webStorageKey, JSON.stringify(newValue)); } return setValue({ checked: value.checked, value: newValue }); }; return [value.value, decoratedSetValue, value.checked]; }; export var useStateWithSessionStorage = function (key, initialValue) { return useStateWithWebStorage(typeof sessionStorage !== "undefined" ? sessionStorage : undefined, key, initialValue); }; export var useStateWithLocalStorage = function (key, initialValue) { return useStateWithWebStorage(typeof localStorage !== "undefined" ? localStorage : undefined, key, initialValue); };