@vergiss/chooks
Version:
React hooks library
65 lines (51 loc) • 1.79 kB
JavaScript
;
import "core-js/modules/es.date.now";
import "core-js/modules/es.date.to-string";
import "core-js/modules/es.object.define-property";
import "core-js/modules/es.object.to-string";
import "core-js/modules/es.parse-int";
import "core-js/modules/es.regexp.to-string";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useLocalStorage = void 0;
var react_1 = require("react");
var tools_1 = require("../../utils/tools");
var DEFAULT_OPTION = {
expireAge: 0
};
function useLocalStorage(key, defaultValue, options) {
if (options === void 0) {
options = DEFAULT_OPTION;
}
var expireAge = options.expireAge;
var storagedValue = localStorage.getItem(key);
var initialValue = storagedValue ? tools_1.parseJson(storagedValue) : defaultValue;
var _a = react_1.useState(initialValue),
memoizedStorage = _a[0],
setMemoizedStorage = _a[1];
var updater = function updater(updatedData) {
var serializedValue = JSON.stringify(updatedData);
localStorage.setItem(key, serializedValue);
setMemoizedStorage(updatedData);
if (options.expireAge && options.expireAge > 0) {
localStorage.setItem(key + "__expiration", (Date.now() + options.expireAge).toString());
}
};
if (options.expireAge && options.expireAge > 0) {
var time = localStorage.getItem(key + "__expiration");
if (time) {
var timeInNumber = parseInt(time, 10);
if (Date.now() >= timeInNumber) {
localStorage.removeItem(key + "__expiration");
localStorage.removeItem(key);
setMemoizedStorage(null);
}
}
}
react_1.useEffect(function () {
updater(initialValue);
}, [initialValue, expireAge]);
return [memoizedStorage, updater];
}
exports.useLocalStorage = useLocalStorage;