UNPKG

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
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