UNPKG

@processor/react

Version:
3 lines (2 loc) 2.34 kB
var n=require("react");function e(n){return n instanceof Array?n:[n]}exports.useProcessor=function(r){var t=n.useMemo(function(){return function(n){var r={filter:{cache:[],handler:function(n){return n},update:function(){r.filter.cache=r.filter.handler(t)}},search:{cache:[],handler:function(n){return n},update:function(){r.search.cache=r.search.handler(r.filter.cache)}},sort:{cache:[],handler:function(n){return n},update:function(){r.sort.cache=r.sort.handler(r.search.cache)}},page:{cache:{current:[],page:1,pageCount:1,total:0},handler:function(n){return{current:n,page:1,pageCount:1,total:n.length}},update:function(){r.page.cache=r.page.handler(r.sort.cache)}}},t=n||[],c=null;function a(n){n.forEach(function(n){r[n].update()}),c&&c(r.page.cache)}var u={load:function(n){return t=n.concat(),a(["filter","search","sort","page"]),u},filter:function(n){return r.filter.handler=function(r){return r.filter(function(r){return Object.keys(n).every(function(t){var c=r[t];return e(n[t]).some(function(n){return!function(n){return void 0!==n}(n)||function(n,e){return"function"==typeof e?e(n):e===n}(c,n)})})})},a(["filter","search","sort","page"]),u},search:function(n,e){return r.search.handler=function(r){return n?"function"==typeof n?n(r.concat()):r.filter(function(r){var t=e||Object.keys(r),c=new RegExp(n,"i");return t.some(function(n){return function(n){return n.toString?n.toString():""}(r[n]).search(c)>-1})}):r.concat()},a(["search","sort","page"]),u},sort:function(n,t){return r.sort.handler=function(r){if(r=r.concat(),"function"==typeof n)return r.sort(n);var c=e(n),a=e(t);return r.sort(function(n,e){return c.map(function(r,t){var c=["acs","ascing",void 0].includes(a[t])?1:-1;return n[r]>e[r]?c:n[r]<e[r]?-c:0}).reduce(function(n,e){return n||e},0)}),r},a(["sort","page"]),u},page:function(n,e){return void 0===e&&(e=1),r.page.handler=function(r){var t=r.length;if(!n||n<=0)return{current:r.concat(),page:1,pageCount:1,total:t};e<1&&(e=1);var c=Math.ceil(t/n);return e=Math.min(e,c),{current:r.slice((e-1)*n,e*n),page:e,total:t,pageCount:c}},a(["page"]),u},onUpdate:function(n){return c=n,u},exec:function(){return a(["filter","search","sort","page"]),r.page.cache}};return u}(r)},[r]),c=n.useState(t.exec()),a=c[0],u=c[1];return t.onUpdate(function(n){u(n)}),{processor:t,result:a}}; //# sourceMappingURL=index.js.map