UNPKG

useforceupdatefromanywhere

Version:

[![npm version](https://img.shields.io/npm/v/react-forceupdate.svg?style=flat-square)](https://www.npmjs.com/package/force2update?activeTab=versions) [![npm downloads](https://img.shields.io/npm/dm/react-forceupdate.svg?style=flat-square)](https://www.npm

61 lines (49 loc) 2.15 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var useForceUpdate = function useForceUpdate() { var _useState = React.useState(Object.create(null)), force2Update = _useState[1]; var forceUpdate = React.useCallback(function () { force2Update(Object.create(null)); }, [force2Update]); return forceUpdate; }; var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React__default.useLayoutEffect : React__default.useEffect; var useForceUpdateFromAnywhere = function useForceUpdateFromAnywhere(mainFactory, componentName, cleaningCallBack) { var _useState2 = React.useState(Object.create(null)), force2Update = _useState2[1]; var forceUpdate = React.useCallback(function () { force2Update(Object.create(null)); }, [force2Update]); useEvents(mainFactory, componentName, forceUpdate); useIsomorphicLayoutEffect(function () { return function () { cleaningCallBack && cleaningCallBack(); delete mainFactory.eventsForForceUpdate; }; }, [mainFactory, componentName]); }; var useEvents = function useEvents(mainFactory, componentName, forceUpdate) { if (typeof mainFactory.eventsForForceUpdate === 'undefined') { mainFactory.eventsForForceUpdate = {}; var trigger = function trigger(cp) { var handlers = mainFactory.eventsForForceUpdate["on" + cp + "Change"]; if (handlers && typeof handlers === 'function') { handlers.apply(null, null); } }; mainFactory.forceToUpdate = function (cp) { return trigger(cp); }; } if (!Object.prototype.hasOwnProperty.call(mainFactory.eventsForForceUpdate, componentName)) { mainFactory.eventsForForceUpdate["on" + componentName + "Change"] = forceUpdate; } }; exports.useEvents = useEvents; exports.useForceUpdate = useForceUpdate; exports.useForceUpdateFromAnywhere = useForceUpdateFromAnywhere; //# sourceMappingURL=useforceupdatefromanywhere.cjs.development.js.map