react-async-effect
Version:
A component to help manage work outside render cycle
3 lines (2 loc) • 4.94 kB
JavaScript
!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r(require("react")):"function"==typeof define&&define.amd?define(["react"],r):e.ReactAsyncEffect=r(e.React)}(this,function(e){"use strict";var r=function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,r){for(var n=0;n<r.length;n++){var t=r[n];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,t.key,t)}}return function(r,n,t){return n&&e(r.prototype,n),t&&e(r,t),r}}(),t=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},o=function(e,r){var n={};for(var t in e)r.indexOf(t)>=0||Object.prototype.hasOwnProperty.call(e,t)&&(n[t]=e[t]);return n},i=function(e,r){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!r||"object"!=typeof r&&"function"!=typeof r?e:r},u={run:require("prop-types").func.isRequired,stop:require("prop-types").func.isRequired};"undefined"!=typeof exports&&Object.defineProperty(exports,"babelPluginFlowReactPropTypes_proptype_Worker",{value:u,configurable:!0,enumerable:!0});var p={isRunning:require("prop-types").bool.isRequired,result:require("prop-types").any,error:require("prop-types").any};"undefined"!=typeof exports&&Object.defineProperty(exports,"babelPluginFlowReactPropTypes_proptype_AsyncState",{value:p,configurable:!0,enumerable:!0});var s={isRunning:require("prop-types").bool,result:require("prop-types").any,error:require("prop-types").any,run:require("prop-types").func.isRequired,stop:require("prop-types").func.isRequired,reset:require("prop-types").func.isRequired};"undefined"!=typeof exports&&Object.defineProperty(exports,"babelPluginFlowReactPropTypes_proptype_AsyncEffectRendererProps",{value:s,configurable:!0,enumerable:!0});var c=require("prop-types").func;"undefined"!=typeof exports&&Object.defineProperty(exports,"babelPluginFlowReactPropTypes_proptype_workerFactory",{value:c,configurable:!0,enumerable:!0});var a={isRunning:!1,result:void 0,error:void 0},f=function(o){function u(){var e,n,t,o;r(this,u);for(var p=arguments.length,s=Array(p),c=0;c<p;c++)s[c]=arguments[c];return n=t=i(this,(e=u.__proto__||Object.getPrototypeOf(u)).call.apply(e,[this].concat(s))),l.call(t),o=n,i(t,o)}return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function, not "+typeof r);e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),r&&(Object.setPrototypeOf?Object.setPrototypeOf(e,r):e.__proto__=r)}(u,e.Component),n(u,[{key:"componentWillMount",value:function(){this.bindWorker(this.props.createWorker)}},{key:"componentWillReceiveProps",value:function(e){e.createWorker!==this.props.createWorker&&(e.concurrentWorkers||(e.concurrentRuns||this.stop(),this.unbindWorker()),this.bindWorker(e.createWorker))}},{key:"componentWillUnmount",value:function(){this.props.stopOnUnmount&&this.worker.stop(),this.unbindWorker()}},{key:"render",value:function(){var e=t({},this.state,{run:this.run,stop:this.stop,reset:this.reset});return"function"==typeof this.props.render?this.props.render(e):this.props.children(e)}}]),u}();f.defaultProps={concurrentWorkers:!1,concurrentRuns:!1,stopOnUnmount:!0};var l=function(){var e=this;this.state=a,this.didChange=function(){e.props.onChange&&e.props.onChange(e.state)},this.resolve=function(){var r=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];e.setState({isRunning:!1,result:r,error:void 0},e.didChange)},this.reject=function(){var r=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];e.setState({isRunning:!1,error:r},e.didChange)},this.run=function(){for(var r=arguments.length,n=Array(r),i=0;i<r;i++)n[i]=arguments[i];e.setState(function(r,i){var u,p=i.concurrentRuns,s=r.isRunning,c=o(r,["isRunning"]);return s&&!p&&e.worker.stop(),(u=e.worker).run.apply(u,n),t({},c,{isRunning:!0})},e.didChange)},this.stop=function(){e.setState(function(r){var n=r.isRunning,i=o(r,["isRunning"]);return n&&e.worker.stop(),t({},i,{isRunning:!1})},e.didChange)},this.reset=function(){e.setState(function(r){return r.isRunning&&e.worker.stop(),a},e.didChange)},this.bindWorker=function(r){var n=e.resolve,t=e.reject;e.unbindWorker=function(){n=function(){},t=function(){}},e.worker=r(function(){return n.apply(void 0,arguments)},function(){return t.apply(void 0,arguments)})}};return f.propTypes={concurrentWorkers:require("prop-types").bool.isRequired,concurrentRuns:require("prop-types").bool.isRequired,stopOnUnmount:require("prop-types").bool.isRequired,createWorker:require("prop-types").func.isRequired,onChange:require("prop-types").func,render:require("prop-types").func,children:require("prop-types").func},f});
//# sourceMappingURL=react-async-effect.umd.min.js.map