UNPKG

dua

Version:
2 lines (1 loc) 4.81 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).Dua={})}(this,(function(e){"use strict";const t=(e,t)=>(e.roots||(e.roots=[]),e.childMap||(e.childMap={}),t.parentId?e.childMap[t.parentId]?e.childMap[t.parentId].push(t):e.childMap[t.parentId]=[t]:(e.childMap.hasOwnProperty(t.id)||(e.childMap[t.id]=[]),e.roots.push(t)),e),a=(e,t)=>{const r=t[e.id];return r&&r.forEach(e=>{a(e,t)}),e.children=r,e},r={normalize:(e,r)=>{const d=e&&e.reduce((e,a)=>(a&&a.id&&(e.byId[a.id]=a,e.workspace=t(e.workspace,a)),e),{byId:{},workspace:{}})||{byId:{},workspace:{}};return{byId:d.byId,allIds:d.workspace.roots.map(e=>a(e,d.workspace.childMap)),total:"number"==typeof r?r:e.length}},transform:e=>{const r=Object.keys(e||{}).reduce((a,r)=>t(a,e[r]),{});return r.workspace.roots.map(e=>a(e,r.workspace.childMap))},reduce:e=>e},d=(e,t)=>{const a=t.parentIds&&t.parentIds.length||0;return e[a]||(e[a]={}),e[a][t.id]=t,e},o=e=>{for(let t=e.length-1;t>0;--t)Object.keys(e[t]).forEach(a=>{const r=e[t][a];if(r.parentIds&&r.parentIds.length>0){const a=e[t-1][r.parentIds[0]];a&&(a.children?a.children.push(r):a.children=[r])}});return e&&e.length>0?Object.keys(e[0]).map(t=>e[0][t]):[]},l={normalize:(e,t)=>{const a=e&&e.reduce((e,t)=>(t&&t.id&&(e.byId[t.id]=t,e.workspace=d(e.workspace,t)),e),{byId:{},workspace:[]})||{byId:{},workspace:[]};return{byId:a.byId,allIds:o(a.workspace),total:"number"==typeof t?t:e.length}},transform:e=>{const t=Object.keys(e||{}).reduce((t,a)=>d(t,{...e[a],children:void 0}),{}),a=Object.keys(t).map(e=>t[e]);return o(a)},reduce:e=>e},n={};n.flat={normalize:(e,t)=>({byId:e&&e.reduce((e,t)=>(t&&t.id&&(e[t.id]=t),e),{})||{},allIds:e||[],total:"number"==typeof t?t:e.length}),transform:e=>Object.keys(e||{}).reduce((t,a)=>t.concat(e[a]),[]),reduce:e=>e},n["single-tree"]=r,n["multiple-tree"]=l;var c={get:e=>n[e],clone:(e,t)=>{const a=n[e];return a?{...a,...t}:null},list:()=>Object.keys(n),install:(e,t)=>n[e]=t};e.create=function(e,t,a){const{fetch:r,fetchPart:d,create:o,update:l,remove:n,detail:i}=t,s=a&&a.type||"flat",p=a&&a.drive||c.get(s);if(!p)throw Error(`no drive for this type [${s}]`);const{transform:y,normalize:u,mixed:_}=p,f=p.reduce;return{namespace:e,state:{byId:{},allIds:[],total:0},effects:{*fetch({payload:e},{call:t,put:a,select:d}){if(r){const o=yield t(r,e);if(o&&(200===o.code||0===o.code)){const e=o.data.list||o.data.retlist||o.data||[],t=o.data.total||e.length,r=_?yield d(e=>e):null;return yield a({type:"onFetch",payload:{list:e,total:t,__extra__:r}}),o||!0}}return!1},*fetchPart({payload:e},{call:t,put:a,select:r}){if(d){const o=yield t(d,e);if(o&&(200===o.code||0===o.code)){const e=o.data.list||o.data||[],t=o.data.total,d=_?yield r(e=>e):null;return yield a({type:"onFetchPart",payload:{list:e,total:t,__extra__:d}}),o||!0}}return!1},*create({payload:e},{call:t,put:a,select:r}){if(o){const d=yield t(o,e);if(d&&(200===d.code||0===d.code)){const t=d.data,o=_?yield r(e=>e):null;return yield a({type:"onCreate",payload:{...e,...t,__extra__:o}}),d||!0}}return!1},*update({payload:e},{call:t,put:a,select:r}){if(l){const{id:d,...o}=e||{},n=yield t(l,d||e,o);if(n&&(200===n.code||0===n.code)){const t=n.data,d=_?yield r(e=>e):null;return yield a({type:"onUpdate",payload:{...e,...t,__extra__:d}}),n||!0}}return!1},*remove({payload:e},{call:t,put:a,select:r}){if(n){const d=e&&e.id||e,o=yield t(n,d);if(o&&(200===o.code||0===o.code)){const e=_?yield r(e=>e):null;return yield a({type:"onRemove",payload:{id:d,__extra__:e},__extra__:e}),o||!0}}return!1},*detail({payload:e},{call:t,put:a,select:r}){if(i){const d=yield t(i,e);if(d&&(200===d.code||0===d.code)){const e=d.data,t=_?yield r(e=>e):null;return yield a({type:"onUpdate",payload:e,__extra__:t}),d||!0}}return!1}},reducers:{onFetch(e,{payload:t}){const{list:a,total:r,__extra__:d}=t,o=u(a,r);return f({...e,...o},d)},onFetchPart(e,{payload:t}){const{list:a,total:r,__extra__:d}=t;const o=function e(t){return t.reduce((t,a)=>(a.children&&(t=t.concat(e(a.children))),t=t.concat({...a,children:void 0})),[])}(e.allIds),l=u([].concat(o,a),r||e.total+a.length);return f({...e,...l},d)},onCreate(e,{payload:t}){if(t&&t.id){const a={...e.byId,[t.id]:t},r=y(a);return f({...e,byId:a,allIds:r,total:e.total+1},t.__extra__)}return e},onUpdate(e,{payload:t}){if(t){if(t.id){const a={...e.byId,[t.id]:{...e.byId[t.id],...t}},r=y(a);return f({...e,byId:a,allIds:r},t.__extra__)}{const a={...e.byId,__auto_id__:{...e.byId[t.id],...t}},r=y(a);return f({...e,byId:a,allIds:r},t.__extra__)}}return e},onRemove(e,{payload:t}){if(t&&t.id){const a={...e.byId};delete a[t.id];const r=y(a);return f({...e,byId:a,allIds:r,total:e.total-1},t.__extra__)}return e}}}},e.driver=c,Object.defineProperty(e,"__esModule",{value:!0})}));