UNPKG

async-action-creator

Version:

Async actions with steroids creator for Redux or whatever you want

2 lines (1 loc) 3.86 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t["async-action-creator"]={})}(this,function(t){"use strict";var p="@@actionCreator";function D(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var d=function(t){return t.slice(t.lastIndexOf("_")+1)};t.createAction=function(n){return{run:function(t){return{type:n,payload:t}},fetch:function(t){return{type:"".concat(n,"_FETCH"),payload:t}},update:function(t){return{type:"".concat(n,"_UPDATE"),payload:t}},create:function(t){return{type:"".concat(n,"_CREATE"),payload:t}},remove:function(t){return{type:"".concat(n,"_REMOVE"),payload:t}},start:function(t){return{type:"".concat(n,"_STARTED"),payload:t}},resolve:function(t){return{type:"".concat(n,"_RESOLVED"),payload:t}},reject:function(t){return{type:"".concat(n,"_REJECTED"),payload:t}},getStatus:function(t){var e=t[p];return e[n]?e[n].status:"init"},getError:function(t){var e=t[p];return e[n]?e[n].error:void 0},getResponse:function(t){var e=t[p];return e[n]?e[n].response:void 0},clearStatus:function(){return{type:"".concat(p,"/CLEAR_STATUS"),namespace:n}},TYPE:n,FETCH:"".concat(n,"_FETCH"),UPDATE:"".concat(n,"_UPDATE"),CREATE:"".concat(n,"_CREATE"),REMOVE:"".concat(n,"_REMOVE"),STARTED:"".concat(n,"_STARTED"),RESOLVED:"".concat(n,"_RESOLVED"),REJECTED:"".concat(n,"_REJECTED")}},t.reducer=function(){var t,e,n,r,o,c,a,i=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{},u=1<arguments.length?arguments[1]:void 0;if(a=u.type,0<=["STARTED","RESOLVED","REJECTED"].indexOf(d(a))){var s=(c=u.type,{type:(o=c,o.slice(0,o.lastIndexOf("_"))),status:d(c)}),f=s.type,E=s.status;return Object.assign({},i,D({},f,{status:function(t){switch(t){case"STARTED":return"pending";case"RESOLVED":return"resolved";case"REJECTED":return"rejected";default:return"init"}}(E),error:"REJECTED"===E?(n=u,r=n.payload,r||void 0):void 0,response:"RESOLVED"===E?(t=u,e=t.payload,e||void 0):void 0}))}return u.type==="".concat(p,"/CLEAR_STATUS")?Object.assign({},i,D({},u.namespace,void 0)):i},t.middleware=function(h){var O=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};return function(R){return function(T){return function(t){if(!h)throw new Error("No services were passed to the async-action-creator middleware, you have to pass an object like:\n {\n [string]: {\n uri: string|Function,\n method: string,\n selector?: Function,\n options?: Object|Function\n }\n }\n ");if(!R||!T||!t)throw new Error("Redux data (store, next or action) is missing, it looks like a configuration problem, take a look and try again");var e=t.type,n=t.payload,r=h[e],o=O.httpClient||fetch;if(T(t),r){var c=r.method,a=r.action,i=r.onResolve,u=r.onReject,s=r.uri,f=r.options,E=void 0===f?{}:f,p=r.start,d=void 0===p||p,l=R.getState(),y="function"==typeof s?s(n,l):s,v="function"==typeof E?E(n,l):E;if(!a)throw new Error("The matched service doesn't receive an 'action' property");return d&&R.dispatch(a.start()),o(y,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),r.forEach(function(t){D(e,t,n[t])})}return e}({},v,{method:c})).then(function(t){if(200<=t.status&&t.status<300)return t;var e=new Error(t.statusText);throw e.response=t,e}).then(function(t){return t.json()}).then(function(t){return i?i(t,l):t}).then(function(t){return R.dispatch(a.resolve(t))}).catch(function(t){return Promise.resolve(u?u(t,l):t).then(function(t){return R.dispatch(a.reject(t))})})}}}}},t.REDUCER_NAME=p,Object.defineProperty(t,"__esModule",{value:!0})});