UNPKG

refun

Version:

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

49 lines (40 loc) 1.46 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.mapSafeTimeout = exports.mapSafeTimeoutFactory = void 0; var _react = require("react"); var _tsfn = require("tsfn"); const mapSafeTimeoutFactory = (setTimeoutFn, clearTimeoutFn) => propName => props => { const timerIdsRef = (0, _react.useRef)(_tsfn.EMPTY_OBJECT); const setSafeTimeoutRef = (0, _react.useRef)(); const useEffectFnRef = (0, _react.useRef)(); if (setSafeTimeoutRef.current === _tsfn.UNDEFINED) { timerIdsRef.current = new Set(); setSafeTimeoutRef.current = (cb, delay) => { if (timerIdsRef.current === _tsfn.EMPTY_OBJECT) { return _tsfn.NOOP; } const timerId = setTimeoutFn(() => { timerIdsRef.current.delete(timerId); cb(); }, delay); timerIdsRef.current.add(timerId); return () => { clearTimeoutFn(timerId); timerIdsRef.current.delete(timerId); }; }; useEffectFnRef.current = () => () => { timerIdsRef.current.forEach(id => clearTimeoutFn(id)); timerIdsRef.current.clear(); timerIdsRef.current = _tsfn.EMPTY_OBJECT; }; } (0, _react.useEffect)(useEffectFnRef.current, _tsfn.EMPTY_ARRAY); return { ...props, [propName]: setSafeTimeoutRef.current }; }; exports.mapSafeTimeoutFactory = mapSafeTimeoutFactory; const mapSafeTimeout = mapSafeTimeoutFactory(setTimeout, clearTimeout); exports.mapSafeTimeout = mapSafeTimeout;