mui-extended
Version:
Extended UI Components built on Material UI
36 lines (35 loc) • 1.56 kB
JavaScript
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);
};