react-countdown-hook
Version:
Dead simple yet powerful countdown hook for React.
3 lines (2 loc) • 1.7 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("react")):"function"==typeof define&&define.amd?define(["react"],t):(e=e||self).reactCountdownHook=t(e.react)}(this,function(e){return e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,function(t,r){void 0===t&&(t=6e4),void 0===r&&(r=1e3);var n=e.useState(0),u=n[0],c=n[1],a=e.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=e.useCallback(function(e){window.cancelAnimationFrame(a.current.requestId);var r=void 0!==e?e:t;a.current.started=null,a.current.lastInterval=null,a.current.timeToCount=r,a.current.requestId=window.requestAnimationFrame(i),c(r)},[]),s=e.useCallback(function(){window.cancelAnimationFrame(a.current.requestId),a.current.started=null,a.current.lastInterval=null,a.current.timeToCount=a.current.timeLeft},[]),l=e.useCallback(function(){!a.current.started&&a.current.timeLeft>0&&(window.cancelAnimationFrame(a.current.requestId),a.current.requestId=window.requestAnimationFrame(i))},[]),d=e.useCallback(function(){a.current.timeLeft&&(window.cancelAnimationFrame(a.current.requestId),a.current={},c(0))},[]),f=e.useMemo(function(){return{start:o,pause:s,resume:l,reset:d}},[]);return e.useEffect(function(){return function(){return window.cancelAnimationFrame(a.current.requestId)}},[]),[u,f]}});
//# sourceMappingURL=index.umd.js.map