UNPKG

@byndyusoft-ui/use-throttled-callback

Version:
33 lines (32 loc) 1.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const react_1 = require("react"); const use_timeout_1 = __importDefault(require("@byndyusoft-ui/use-timeout")); function useThrottledCallback(callback, delay, { leading = true, trailing = true } = {}) { const argsRef = (0, react_1.useRef)(null); const isThrottling = (0, react_1.useRef)(false); const execute = (0, react_1.useCallback)(() => { if (trailing && argsRef.current) { callback(...argsRef.current); argsRef.current = null; } isThrottling.current = false; }, [callback, trailing]); const { start } = (0, use_timeout_1.default)(execute, delay); return (0, react_1.useCallback)((...args) => { if (!isThrottling.current && leading) { callback(...args); } else { argsRef.current = args; } if (!isThrottling.current) { isThrottling.current = true; start(); } }, [callback, delay, leading, trailing]); } exports.default = useThrottledCallback;