UNPKG

refun

Version:

A collection of React Hook-enabled functions that compose harmoniously with each other. Similar to `recompose`, but:

66 lines (53 loc) 2.1 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.onUpdateAsync = void 0; var _react = require("react"); var _tsfn = require("tsfn"); var _utils = require("./utils"); var onUpdateAsync = function onUpdateAsync(onUpdateFn, watchKeys) { return function (props) { var useEffectFnRef = (0, _react.useRef)(_tsfn.NOOP); var onUnmountRef = (0, _react.useRef)(_tsfn.NOOP); var propsRef = (0, _react.useRef)(_tsfn.EMPTY_OBJECT); var watchValuesRef = (0, _react.useRef)(_tsfn.EMPTY_ARRAY); var isMountedRef = (0, _react.useRef)(true); var createGeneratorRef = (0, _react.useRef)(_tsfn.NOOP); var idsRef = (0, _react.useRef)(_tsfn.EMPTY_OBJECT); if (watchValuesRef.current === _tsfn.EMPTY_ARRAY || !(0, _utils.shallowEqualByKeys)(propsRef.current, props, watchKeys)) { watchValuesRef.current = watchKeys.map(function (k) { return props[k]; }); } propsRef.current = props; if (useEffectFnRef.current === _tsfn.NOOP) { useEffectFnRef.current = function () { if (createGeneratorRef.current === _tsfn.NOOP) { createGeneratorRef.current = onUpdateFn(propsRef); } if (idsRef.current === _tsfn.EMPTY_OBJECT) { idsRef.current = (0, _utils.generatorIdFactory)(); } var generatorId = idsRef.current.newId(); (0, _utils.unwindGenerator)(createGeneratorRef.current({ cancelOthers: idsRef.current.switchToGenerator(generatorId), index: generatorId }), function () { return isMountedRef.current && idsRef.current.isGeneratorRunning(generatorId); }); }; } (0, _react.useEffect)(useEffectFnRef.current, watchValuesRef.current); if (onUnmountRef.current === _tsfn.NOOP) { onUnmountRef.current = function () { return function () { isMountedRef.current = false; }; }; } (0, _react.useEffect)(onUnmountRef.current, _tsfn.EMPTY_ARRAY); return props; }; }; exports.onUpdateAsync = onUpdateAsync; //# sourceMappingURL=on-update-async.js.map