UNPKG

ra-core

Version:

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

33 lines 1.54 kB
import { useState, useEffect } from 'react'; import isEqual from 'lodash/isEqual'; import { useEvent } from '../util'; import { useStoreContext } from './useStoreContext'; function useStore(key, defaultValue) { var _a = useStoreContext(), getItem = _a.getItem, setItem = _a.setItem, subscribe = _a.subscribe; var _b = useState(function () { return getItem(key, defaultValue); }), value = _b[0], setValue = _b[1]; // subscribe to changes on this key, and change the state when they happen useEffect(function () { var storedValue = getItem(key, defaultValue); if (!isEqual(value, storedValue)) { setValue(storedValue); } var unsubscribe = subscribe(key, function (newValue) { setValue(typeof newValue === 'undefined' ? defaultValue : newValue); }); return function () { return unsubscribe(); }; }, [key, subscribe, defaultValue, getItem, value]); var set = useEvent(function (valueParam, runtimeDefaultValue) { var 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]; } export { useStore }; //# sourceMappingURL=useStore.js.map