redux-shelf
Version:
Helper reducers and actions to take away your boilerplate code from both Data and Communication state types
2 lines (1 loc) • 3.49 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t["Redux Shelf"]={})}(this,function(t){"use strict";var e={REMOVE:"REMOVE",SET:"SET",UPDATE:"UPDATE"};var n=Object.assign||function(t){for(var e=1;arguments.length>e;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},r=function(t,e){var n={};for(var r in t)0>e.indexOf(r)&&Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n};function o(t,e){return e?this.contentOf(t,e):this.idsOf(t)}function a(t){var e=this[t];return e&&e.ids?e.ids:[]}function i(t,e){var n=this[t];if(n&&n.content)return n.content[e]}function u(t,e){return"entities/"+t+"/"+e}function c(t){return function(e,n){return{type:u(e,t),meta:{method:t,type:e},payload:n}}}var s=c(e.SET),f=c(e.UPDATE);function d(){var t,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];if(!a.type.startsWith("entities")||!a.meta||!a.meta.type)return o;var i=o[a.meta.type]||{},u=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments[1];switch(n.meta.method){case e.REMOVE:return t.includes(n.meta.selector)?t.filter(function(t){return t!==n.meta.selector}):t;case e.UPDATE:return n.payload.ids.reduce(function(t,e){return t.includes(e)?t:[].concat(t,[e])},t);case e.SET:return n.payload.ids;default:return t}}(i.ids,a),c=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=arguments[1];switch(o.meta.method){case e.REMOVE:return t[o.meta.selector]?r(t,[""+o.meta.selector]):t;case e.SET:return o.payload.content;case e.UPDATE:return n({},t,o.payload.content);default:return t}}(i.content,a);return i.content===c?o:n({},o,((t={})[a.meta.type]={ids:u,content:c},t))}function l(t,e){var n=d(t,e);return n.of=o,n.idsOf=a,n.contentOf=i,n}function v(t){return function(e,n){var r={type:"communication/"+e+"/"+t,meta:{type:e,status:t}};return n&&(r.meta.selector=n),r}}l.set=s,l.update=f,l.remove=function(t,n){return{type:u(t,e.REMOVE),meta:{method:e.REMOVE,selector:n,type:t}}};var m=v("CANCEL"),p=v("DONE");var y=v("STARTING");function h(t,e){var n=[t];e&&n.push(e);var r=this[n.join(":")]||{};return{loading:"STARTING"===r.status,error:r.error}}function E(t,e){var o=function(){var t,e,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},a=arguments[1];if(!(a.type&&a.type.startsWith("communication")&&a.meta&&a.meta.status))return o;var i=[a.meta.type];switch(a.meta.selector&&i.push(a.meta.selector),a.meta.status){case"STARTING":return n({},o,((t={})[i.join(":")]={status:a.meta.status},t));case"DONE":case"CANCEL":return i.join(":"),r(o,[i.join(":")]);case"FAIL":return n({},o,((e={})[i.join(":")]={status:a.meta.status,error:a.payload},e));default:return o}}(t,e);return o.of=h,o}E.cancel=m,E.done=p,E.fail=function(t){for(var e=void 0,n=void 0,r=arguments.length,o=Array(r>1?r-1:0),a=1;r>a;a++)o[a-1]=arguments[a];o.length>1?(e=o[0],n=o[1]):n=o[0];var i=v("FAIL")(t,e);return n&&(i.payload=n,i.error=!0),i},E.starting=y,t.communication=E,t.entities=l,t.normalize=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id";return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return Array.isArray(t)?t:[t]}(t).reduce(function(t,r){var o,a=r&&r[e];return a?{ids:[].concat(t.ids,[a]),content:n({},t.content,(o={},o[a]=r,o))}:t},{ids:[],content:{}})},Object.defineProperty(t,"__esModule",{value:!0})});