refun
Version:
A collection of React Hook-enabled functions that compose harmoniously with each other. Similar to `recompose`, but:
62 lines (50 loc) • 2.11 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.mapSafeTimeout = exports.mapSafeTimeoutFactory = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _react = require("react");
var _tsfn = require("tsfn");
var mapSafeTimeoutFactory = function mapSafeTimeoutFactory(setTimeoutFn, clearTimeoutFn) {
return function (propName) {
return function (props) {
var timerIdsRef = (0, _react.useRef)(_tsfn.EMPTY_OBJECT);
var setSafeTimeoutRef = (0, _react.useRef)();
var useEffectFnRef = (0, _react.useRef)();
if (setSafeTimeoutRef.current === _tsfn.UNDEFINED) {
timerIdsRef.current = new Set();
setSafeTimeoutRef.current = function (cb, delay) {
if (timerIdsRef.current === _tsfn.EMPTY_OBJECT) {
return _tsfn.NOOP;
}
var timerId = setTimeoutFn(function () {
timerIdsRef.current.delete(timerId);
cb();
}, delay);
timerIdsRef.current.add(timerId);
return function () {
clearTimeoutFn(timerId);
timerIdsRef.current.delete(timerId);
};
};
useEffectFnRef.current = function () {
return function () {
timerIdsRef.current.forEach(function (id) {
return clearTimeoutFn(id);
});
timerIdsRef.current.clear();
timerIdsRef.current = _tsfn.EMPTY_OBJECT;
};
};
}
(0, _react.useEffect)(useEffectFnRef.current, _tsfn.EMPTY_ARRAY);
return (0, _extends3.default)({}, props, (0, _defineProperty2.default)({}, propName, setSafeTimeoutRef.current));
};
};
};
exports.mapSafeTimeoutFactory = mapSafeTimeoutFactory;
var mapSafeTimeout = mapSafeTimeoutFactory(setTimeout, clearTimeout);
exports.mapSafeTimeout = mapSafeTimeout;
//# sourceMappingURL=map-safe-timeout.js.map