@botonic/react
Version:
Build Chatbots using React
42 lines • 1.92 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useStorageState = void 0;
const react_1 = require("react");
// Code taken from https://github.com/leny/react-use-storage/blob/master/src/index.js
const IS_BROWSER = typeof window !== 'undefined' &&
typeof navigator !== 'undefined' &&
typeof document !== 'undefined';
function useStorageState(storage, key, defaultValue) {
var _a, _b;
let evtTarget;
try {
evtTarget = new EventTarget();
}
catch (_c) {
evtTarget = (_b = (_a = (IS_BROWSER ? document : {})) === null || _a === void 0 ? void 0 : _a.createElement) === null || _b === void 0 ? void 0 : _b.call(_a, 'phony');
}
const raw = storage === null || storage === void 0 ? void 0 : storage.getItem(key);
const [value, setValue] = (0, react_1.useState)(raw ? JSON.parse(raw) : defaultValue);
const updater = (0, react_1.useCallback)((updatedValue, remove = false) => {
setValue(updatedValue);
storage[remove ? 'removeItem' : 'setItem'](key, JSON.stringify(updatedValue));
evtTarget.dispatchEvent(new CustomEvent('storage_change', { detail: { key } }));
}, [key]);
defaultValue != null && !raw && updater(defaultValue);
(0, react_1.useEffect)(() => {
const listener = ({ detail }) => {
if (detail.key === key) {
const lraw = storage === null || storage === void 0 ? void 0 : storage.getItem(key);
lraw !== raw && setValue(JSON.parse(lraw));
}
};
evtTarget.addEventListener('storage_change', listener);
return () => evtTarget.removeEventListener('storage_change', listener);
});
if (storage === null) {
return [undefined, undefined];
}
return [value, updater, () => updater(null, true)];
}
exports.useStorageState = useStorageState;
//# sourceMappingURL=use-storage-state-hook.js.map
;