UNPKG

rooks

Version:

Essential React custom hooks ⚓ to super charge your components!

42 lines (41 loc) 1.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useIntervalWhen = void 0; var react_1 = require("react"); var noop_1 = require("../utils/noop"); /** * A setInterval hook that calls a callback after a interval duration * when a condition is true * * @param callback The callback to be invoked after interval * @param intervalDurationMs Amount of time in ms after which to invoke * @param when The condition which when true, sets the interval * @param startImmediate If the callback should be invoked immediately * @see https://react-hooks.org/docs/useIntervalWhen */ function useIntervalWhen(callback, intervalDurationMs, when, startImmediate) { if (intervalDurationMs === void 0) { intervalDurationMs = 0; } if (when === void 0) { when = true; } if (startImmediate === void 0) { startImmediate = false; } var savedRefCallback = (0, react_1.useRef)(); (0, react_1.useEffect)(function () { savedRefCallback.current = callback; }); function internalCallback() { var _a; (_a = savedRefCallback.current) === null || _a === void 0 ? void 0 : _a.call(savedRefCallback); } (0, react_1.useEffect)(function () { if (when) { if (startImmediate) { internalCallback(); } var interval_1 = window.setInterval(internalCallback, intervalDurationMs); return function () { window.clearInterval(interval_1); }; } return noop_1.noop; }, [when, intervalDurationMs, startImmediate]); } exports.useIntervalWhen = useIntervalWhen;