UNPKG

use-debounce

Version:
3 lines (2 loc) 2.54 kB
import{useRef as r,useMemo as n,useEffect as t,useState as e,useCallback as u}from"react";function c(e,u,c,i){const l=r(null),a=r(0),o=r(0),s=r(null),f=r([]),d=r(),m=r(),v=r(e),g=r(!0),h=r(),x=r();v.current=e;const E="undefined"!=typeof window,b=!u&&0!==u&&E;if("function"!=typeof e)throw new TypeError("Expected a function");u=+u||0;const p=!!(c=c||{}).leading,y=!("trailing"in c)||!!c.trailing,w=!!c.flushOnExit&&y,O="maxWait"in c,F="debounceOnServer"in c&&!!c.debounceOnServer,L=O?Math.max(+c.maxWait||0,u):null,A=n(()=>{const r=r=>{const n=f.current,t=d.current;return f.current=d.current=null,a.current=r,o.current=o.current||r,m.current=v.current.apply(t,n)},n=(r,n)=>{b&&cancelAnimationFrame(s.current),s.current=b?requestAnimationFrame(r):setTimeout(r,n)},t=r=>{if(!g.current)return!1;const n=r-l.current;return!l.current||n>=u||n<0||O&&r-a.current>=L},e=n=>(s.current=null,y&&f.current?r(n):(f.current=d.current=null,m.current)),c=()=>{const r=Date.now();if(p&&o.current===a.current&&A(),t(r))return e(r);if(!g.current)return;const i=u-(r-l.current),s=O?Math.min(i,L-(r-a.current)):i;n(c,s)},A=()=>{i&&i({})},D=(...e)=>{if(!E&&!F)return;const i=Date.now(),o=t(i);var v;if(f.current=e,d.current=this,l.current=i,w&&!h.current&&(h.current=()=>{var r;"hidden"===(null==(r=global.document)?void 0:r.visibilityState)&&x.current.flush()},null==(v=global.document)||null==v.addEventListener||v.addEventListener("visibilitychange",h.current)),o){if(!s.current&&g.current)return a.current=l.current,n(c,u),p?r(l.current):m.current;if(O)return n(c,u),r(l.current)}return s.current||n(c,u),m.current};return D.cancel=()=>{const r=s.current;r&&(b?cancelAnimationFrame(s.current):clearTimeout(s.current)),a.current=0,f.current=l.current=d.current=s.current=null,r&&i&&i({})},D.isPending=()=>!!s.current,D.flush=()=>s.current?e(Date.now()):m.current,D},[p,O,u,L,y,w,b,E,F,i]);return x.current=A,t(()=>(g.current=!0,()=>{var r;w&&x.current.flush(),h.current&&(null==(r=global.document)||null==r.removeEventListener||r.removeEventListener("visibilitychange",h.current),h.current=null),g.current=!1}),[w]),A}function i(r,n){return r===n}function l(n,t,l){const a=l&&l.equalityFn||i,o=r(n),[,s]=e({}),f=c(u(r=>{o.current=r,s({})},[s]),t,l,s),d=r(n);return a(d.current,n)||(f(n),d.current=n),[o.current,f]}function a(r,n,{leading:t=!0,trailing:e=!0,flushOnExit:u=!1}={}){return c(r,n,{maxWait:n,leading:t,trailing:e,flushOnExit:u})}export{l as useDebounce,c as useDebouncedCallback,a as useThrottledCallback}; //# sourceMappingURL=index.mjs.map