UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

38 lines 1.78 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useStore = useStore; const react_1 = require("react"); const isEqual_js_1 = __importDefault(require("lodash/isEqual.js")); const util_1 = require("../util/index.cjs"); const useStoreContext_1 = require("./useStoreContext.cjs"); function useStore(key, defaultValue) { const { getItem, setItem, subscribe } = (0, useStoreContext_1.useStoreContext)(); const [value, setValue] = (0, react_1.useState)(() => getItem(key, defaultValue)); // subscribe to changes on this key, and change the state when they happen (0, react_1.useEffect)(() => { const storedValue = getItem(key, defaultValue); if (!(0, isEqual_js_1.default)(value, storedValue)) { setValue(storedValue); } const unsubscribe = subscribe(key, newValue => { setValue(typeof newValue === 'undefined' ? defaultValue : newValue); }); return () => unsubscribe(); }, [key, subscribe, defaultValue, getItem, value]); const set = (0, util_1.useEvent)((valueParam, runtimeDefaultValue) => { const newValue = typeof valueParam === 'function' ? valueParam(value) : valueParam; // we only set the value in the Store; // the value in the local state will be updated // by the useEffect during the next render setItem(key, typeof newValue === 'undefined' ? typeof runtimeDefaultValue === 'undefined' ? defaultValue : runtimeDefaultValue : newValue); }); return [value, set]; } //# sourceMappingURL=useStore.js.map