UNPKG

beautiful-react-hooks

Version:

A collection of beautiful (and hopefully useful) React hooks to speed-up your components and hooks development

60 lines (59 loc) 2.62 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var react_1 = require("react"); var safelyParseJson_1 = __importDefault(require("../shared/safelyParseJson")); var isClient_1 = __importDefault(require("../shared/isClient")); var isAPISupported_1 = __importDefault(require("../shared/isAPISupported")); var isDevelopment_1 = __importDefault(require("../shared/isDevelopment")); var noop_1 = __importDefault(require("../shared/noop")); /** * An utility to quickly create hooks to access both Session Storage and Local Storage */ var createStorageHook = function (type) { var storageName = "".concat(type, "Storage"); if (isClient_1.default && !(0, isAPISupported_1.default)(storageName)) { // eslint-disable-next-line no-console console.warn("".concat(storageName, " is not supported")); } /** * the hook */ return function useStorageCreatedHook(storageKey, defaultValue) { if (!isClient_1.default) { if (isDevelopment_1.default) { // eslint-disable-next-line no-console console.warn("Please be aware that ".concat(storageName, " could not be available during SSR")); } return [JSON.stringify(defaultValue), noop_1.default]; } var storage = (window)[storageName]; var safelySetStorage = (0, react_1.useCallback)(function (valueToStore) { try { storage.setItem(storageKey, valueToStore); // eslint-disable-next-line no-empty } catch (e) { } }, [storage, storageKey]); var _a = (0, react_1.useState)(function () { var valueToStore; try { valueToStore = storage.getItem(storageKey) || JSON.stringify(defaultValue); } catch (e) { valueToStore = JSON.stringify(defaultValue); } safelySetStorage(valueToStore); return (0, safelyParseJson_1.default)(valueToStore); }), storedValue = _a[0], setStoredValue = _a[1]; var setValue = (0, react_1.useCallback)(function (value) { var valueToStore = value instanceof Function ? value(storedValue) : value; safelySetStorage(JSON.stringify(valueToStore)); setStoredValue(valueToStore); }, [safelySetStorage, storedValue]); return [storedValue, setValue]; }; }; exports.default = createStorageHook;