UNPKG

@vergiss/chooks

Version:
65 lines (51 loc) 1.79 kB
"use strict"; 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;