import React from 'react'; export default (function (callback, buffer) { var calledRef = React.useRef(false); var timeoutRef = React.useRef(null); function cancelTrigger() { window.clearTimeout(timeoutRef.current); } function trigger(force) { cancelTrigger(); if (!calledRef.current || force === true) { if (callback(force) === false) { // Not delay since callback cancelled self return; } calledRef.current = true; timeoutRef.current = window.setTimeout(function () { calledRef.current = false; }, buffer); } else { timeoutRef.current = window.setTimeout(function () { calledRef.current = false; trigger(); }, buffer); } } return [trigger, function () { calledRef.current = false; cancelTrigger(); }]; });