react-countdown-hook
Version:
Dead simple yet powerful countdown hook for React.
3 lines (2 loc) • 1.49 kB
JavaScript
var e,t=(e=require("react"))&&"object"==typeof e&&"default"in e?e.default:e;module.exports=function(e,r){void 0===e&&(e=6e4),void 0===r&&(r=1e3);var n=t.useState(0),u=n[0],c=n[1],a=t.useRef({}),i=function e(t){a.current.started||(a.current.started=t,a.current.lastInterval=t);var n=Math.min(r,a.current.timeLeft||Infinity);t-a.current.lastInterval>=n&&(a.current.lastInterval+=n,c(function(e){return a.current.timeLeft=e-n,a.current.timeLeft})),t-a.current.started<a.current.timeToCount?a.current.requestId=window.requestAnimationFrame(e):(a.current={},c(0))},o=t.useCallback(function(t){window.cancelAnimationFrame(a.current.requestId);var r=void 0!==t?t:e;a.current.started=null,a.current.lastInterval=null,a.current.timeToCount=r,a.current.requestId=window.requestAnimationFrame(i),c(r)},[]),s=t.useCallback(function(){window.cancelAnimationFrame(a.current.requestId),a.current.started=null,a.current.lastInterval=null,a.current.timeToCount=a.current.timeLeft},[]),l=t.useCallback(function(){!a.current.started&&a.current.timeLeft>0&&(window.cancelAnimationFrame(a.current.requestId),a.current.requestId=window.requestAnimationFrame(i))},[]),m=t.useCallback(function(){a.current.timeLeft&&(window.cancelAnimationFrame(a.current.requestId),a.current={},c(0))},[]),d=t.useMemo(function(){return{start:o,pause:s,resume:l,reset:m}},[]);return t.useEffect(function(){return function(){return window.cancelAnimationFrame(a.current.requestId)}},[]),[u,d]};
//# sourceMappingURL=index.js.map