UNPKG

@tanem/react-nprogress

Version:

A React primitive for building slim progress bars.

3 lines (2 loc) 3.9 kB
"use strict";var _objectWithoutPropertiesLoose=require("@babel/runtime/helpers/objectWithoutPropertiesLoose"),_extends=require("@babel/runtime/helpers/extends"),React=require("react"),hoistNonReactStatics=require("hoist-non-react-statics");function _interopNamespaceDefault(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var React__namespace=_interopNamespaceDefault(React),clamp=function(e,t,n){return e=(e=e<=n?e:n)>=t?e:t},createQueue=function(){var e=!1,t=[],n=function(){e=!0;var r=t.shift();if(r)return r(n);e=!1};return{clear:function(){e=!1,t=[]},enqueue:function(r){t.push(r),e||1!==t.length||n()}}},createTimeout=function(){var e;return{cancel:function(){e&&window.cancelAnimationFrame(e)},schedule:function(t,n){var r,u=function(c){c-(r=r||c)>n?t():e=window.requestAnimationFrame(u)};e=window.requestAnimationFrame(u)}}},increment=function(e){var t=0;return e>=0&&e<.2?t=.1:e>=.2&&e<.5?t=.04:e>=.5&&e<.8?t=.02:e>=.8&&e<.99&&(t=.005),clamp(e+t,0,.994)},useEffectOnce=function(e){React.useEffect(e,[])},incrementParameter=function(e){return++e%1e6},useUpdate=function(){var e=React.useState(0)[1];return React.useCallback((function(){return e(incrementParameter)}),[])},useGetSetState=function(e){void 0===e&&(e={});var t=useUpdate(),n=React.useRef(_extends({},e));return[React.useCallback((function(){return n.current}),[]),React.useCallback((function(e){e&&(Object.assign(n.current,e),t())}),[])]},useFirstMountState=function(){var e=React.useRef(!0);return e.current?(e.current=!1,!0):e.current},useUpdateEffect=function(e,t){var n=useFirstMountState();React.useEffect((function(){if(!n)return e()}),t)},noop=function(){},initialState={isFinished:!0,progress:0,sideEffect:noop},useNProgress=function(e){var t=void 0===e?{}:e,n=t.animationDuration,r=void 0===n?200:n,u=t.incrementDuration,c=void 0===u?800:u,i=t.isAnimating,a=void 0!==i&&i,s=t.minimum,o=void 0===s?.08:s,f=useGetSetState(initialState),l=f[0],d=f[1],p=React.useRef(null),v=React.useRef(null);useEffectOnce((function(){p.current=createQueue(),v.current=createTimeout()}));var m=React.useCallback((function(){var e,t;null==(e=v.current)||e.cancel(),null==(t=p.current)||t.clear()}),[]),R=React.useCallback((function(e){var t,n,u;if(1===(e=clamp(e,o,1)))return m(),null==(n=p.current)||n.enqueue((function(t){d({progress:e,sideEffect:function(){var e;return null==(e=v.current)?void 0:e.schedule(t,r)}})})),void(null==(u=p.current)||u.enqueue((function(){d({isFinished:!0,sideEffect:m})})));null==(t=p.current)||t.enqueue((function(t){d({isFinished:!1,progress:e,sideEffect:function(){var e;return null==(e=v.current)?void 0:e.schedule(t,r)}})}))}),[r,m,o,p,d,v]),h=React.useCallback((function(){R(increment(l().progress))}),[l,R]),g=React.useCallback((function(){var e=function(){var t;h(),null==(t=p.current)||t.enqueue((function(t){var n;null==(n=v.current)||n.schedule((function(){e(),t()}),c)}))};e()}),[c,p,v,h]),b=React.useRef(noop),E=l().sideEffect;return React.useEffect((function(){b.current=h})),useEffectOnce((function(){return a&&g(),m})),useUpdateEffect((function(){l().sideEffect()}),[l,E]),useUpdateEffect((function(){a?d(_extends({},initialState,{sideEffect:g})):R(1)}),[a,R,d,g]),{animationDuration:r,isFinished:l().isFinished,progress:l().progress}},_excluded=["children"],NProgress=function(e){var t=e.children,n=_objectWithoutPropertiesLoose(e,_excluded);return t(useNProgress(n))};function withNProgress(e){var t=function(t){var n=useNProgress(t);return React__namespace.createElement(e,_extends({},t,n))};return hoistNonReactStatics(t,e),t}exports.NProgress=NProgress,exports.useNProgress=useNProgress,exports.withNProgress=withNProgress; //# sourceMappingURL=react-nprogress.cjs.production.js.map