UNPKG

ts-paginate

Version:

This package provide pagination to any data records that has id attribute

1 lines 7.85 kB
!function(t,i){"object"==typeof exports&&"object"==typeof module?module.exports=i():"function"==typeof define&&define.amd?define([],i):"object"==typeof exports?exports.tsPaginate=i():t.tsPaginate=i()}(this,(function(){return(()=>{"use strict";var t={604:(t,i,a)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.Pager=void 0;const o=a(6);class e{constructor(t){this.payload=[],this.originalData=[],this.cursor=void 0,this.pagination={after:void 0,before:void 0,size:void 0},this.pageInfo={hasNextPage:!1,hasPreviousPage:!1,totalCount:0,sizePerPage:0,currentItem:0,page:{current:0,of:0},firstCursor:void 0,lastCursor:void 0},this.toRest=()=>{var t,i,a,o;const e=null===(t=this.pagination)||void 0===t?void 0:t.before,n=null===(i=this.pagination)||void 0===i?void 0:i.after;return this.originalData.length<1?{data:[],pageInfo:Object.assign(Object.assign({},this.pageInfo),{lastCursor:null!=e?e:n,firstCursor:null!=e?e:n})}:this.pageInfo.totalCount<=this.pageInfo.sizePerPage?{data:this.originalData,pageInfo:{hasNextPage:!1,hasPreviousPage:!1,page:{current:1,of:1},currentItem:1,sizePerPage:this.pageInfo.totalCount,totalCount:this.pageInfo.totalCount,firstCursor:null===(a=this.originalData[0])||void 0===a?void 0:a[this.config.cursorKey],lastCursor:null===(o=this.originalData[this.originalData.length-1])||void 0===o?void 0:o[this.config.cursorKey]}}:(e?this.backwardFlow():n?this.forwardFlow():n||e||this.defaultFlow(),this.updateNextAndPrev(),this.updatePageDetails(),{data:this.payload,pageInfo:this.pageInfo})},this.toGql=()=>(this.toRest(),{data:this.payload.map((t=>({node:t,cursor:null==t?void 0:t[this.config.cursorKey]}))),pageInfo:this.pageInfo}),this.paginate=t=>(this.setData(t),this.handleErrors(),{toGql:()=>this.toGql(),toRest:()=>this.toRest()}),this.config=null!=t?t:{cursorKey:"id",pageSize:25}}setData(t){var i,a,o,e;this.pagination={after:null===(i=null==t?void 0:t.params)||void 0===i?void 0:i.after,before:null===(a=null==t?void 0:t.params)||void 0===a?void 0:a.before,size:null!==(e=null===(o=null==t?void 0:t.params)||void 0===o?void 0:o.size)&&void 0!==e?e:this.config.pageSize},this.payload=[],this.originalData=t.data,this.pageInfo.totalCount=t.data.length}handleErrors(){var t;if(this.originalData.forEach((t=>{if(!t[this.config.cursorKey])throw new o.CustomError({message:`paginate: all records on data must have ${this.config.cursorKey} attribute`,stack:JSON.stringify(t),name:"paginate"})})),this.pagination.after&&this.pagination.before)throw new o.CustomError({message:"paginate: use after or before as cursor param",stack:JSON.stringify(this.pagination),name:"paginate"});const i=null!==(t=this.pagination.after)&&void 0!==t?t:this.pagination.before;if(i&&-1===this.originalData.findIndex((t=>(null==t?void 0:t[this.config.cursorKey])===i)))throw new o.CustomError({message:`provided cursor: ${i} does not exits on data`,name:"paginate",stack:JSON.stringify(this.pagination)});if(!(void 0===this.pagination.size||this.pagination.size>0))throw new o.CustomError({message:"paginate: size param must be a positive number",stack:JSON.stringify(this.pagination),name:"paginate"})}getCursorIndex(){var t;const i=null!==(t=this.pagination.after)&&void 0!==t?t:this.pagination.before;return this.originalData.findIndex((t=>(null==t?void 0:t[this.config.cursorKey])===i))}backwardFlow(){var t,i,a,o;const e=this.getCursorIndex(),n=null!==(t=this.pagination.size)&&void 0!==t?t:this.config.pageSize;if(this.existPrevPage(e,n)){const t=e-n<0?0:e-n;return this.cursor=null!==(a=null===(i=this.originalData[t])||void 0===i?void 0:i[this.config.cursorKey])&&void 0!==a?a:null===(o=this.originalData[0])||void 0===o?void 0:o[this.config.cursorKey],void(this.payload=this.originalData.slice(t,e))}this.payload=[]}forwardFlow(){var t,i,a,o;const e=this.getCursorIndex(),n=null!==(t=this.pagination.size)&&void 0!==t?t:this.config.pageSize;if(this.existNextPage(e))return this.cursor=null!==(a=null===(i=this.originalData[e+n])||void 0===i?void 0:i[this.config.cursorKey])&&void 0!==a?a:null===(o=this.originalData[this.pageInfo.totalCount-1])||void 0===o?void 0:o[this.config.cursorKey],void(this.payload=this.originalData.slice(e+1,e+n+1));this.payload=[]}defaultFlow(){var t,i;const a=null!==(t=this.pagination.size)&&void 0!==t?t:this.config.pageSize;this.payload=this.originalData.slice(0,a),this.cursor=null===(i=this.originalData[a])||void 0===i?void 0:i[this.config.cursorKey]}updateNextAndPrev(){var t,i,a,e,n,s,r,l,g;if(this.payload.length<1){const t=this.pagination.after?`after cursor: ${this.pagination.after}`:`before cursor: ${this.pagination.before}`;throw new o.CustomError({message:`there is not data ${t}`,name:"paginate",stack:JSON.stringify(this.pagination)})}const h=this.config.cursorKey,u=this.payload.length-1,d=this.originalData.findIndex((t=>{var i;return(null==t?void 0:t[h])===(null===(i=this.payload[0])||void 0===i?void 0:i[h])})),p=this.originalData.findIndex((t=>{var i;return(null==t?void 0:t[h])===(null===(i=this.payload[u])||void 0===i?void 0:i[h])})),f=null!==(t=this.pagination.size)&&void 0!==t?t:this.pageInfo.totalCount-1-this.payload.length;this.pageInfo.firstCursor=null!==(e=null===(a=null===(i=this.payload)||void 0===i?void 0:i[0])||void 0===a?void 0:a[h])&&void 0!==e?e:this.cursor,this.pageInfo.lastCursor=null!==(r=null===(s=null===(n=this.payload)||void 0===n?void 0:n[f-1])||void 0===s?void 0:s[h])&&void 0!==r?r:this.cursor,this.pageInfo.hasNextPage=void 0!==(null===(l=this.originalData[p+1])||void 0===l?void 0:l[h]),this.pageInfo.hasPreviousPage=void 0!==(null===(g=this.originalData[d-1])||void 0===g?void 0:g[h])}updatePageDetails(){var t;const i=this.config.cursorKey,a=this.originalData.findIndex((t=>{var a;return(null==t?void 0:t[i])===(null===(a=this.payload[0])||void 0===a?void 0:a[i])}));this.pageInfo.sizePerPage=null!==(t=this.pagination.size)&&void 0!==t?t:this.config.pageSize,this.pageInfo.currentItem=a+1;const o=this.pageInfo.currentItem/this.pageInfo.sizePerPage,e=this.pageInfo.totalCount/this.pageInfo.sizePerPage;this.pageInfo.page.current=Math.ceil(o),this.pageInfo.page.of=Math.ceil(e),this.pageInfo.hasNextPage||(this.pageInfo.page.current=this.pageInfo.page.of),this.pageInfo.hasPreviousPage&&1===this.pageInfo.page.current&&(this.pageInfo.page.current=this.pageInfo.page.current+1)}existNextPage(t){return t<this.pageInfo.totalCount-1&&t>=0}existPrevPage(t,i){return t>0||t-i>=0}}i.Pager=e,i.default=e},321:function(t,i,a){var o=this&&this.__createBinding||(Object.create?function(t,i,a,o){void 0===o&&(o=a);var e=Object.getOwnPropertyDescriptor(i,a);e&&!("get"in e?!i.__esModule:e.writable||e.configurable)||(e={enumerable:!0,get:function(){return i[a]}}),Object.defineProperty(t,o,e)}:function(t,i,a,o){void 0===o&&(o=a),t[o]=i[a]}),e=this&&this.__exportStar||function(t,i){for(var a in t)"default"===a||Object.prototype.hasOwnProperty.call(i,a)||o(i,t,a)};Object.defineProperty(i,"__esModule",{value:!0}),e(a(604),i)},402:(t,i)=>{Object.defineProperty(i,"__esModule",{value:!0}),i.CustomError=void 0;class a extends Error{constructor({message:t,stack:i,name:a}){super(t),this.stack=this.stack+"\n params: "+i,this.name=null!=a?a:this.name}}i.CustomError=a,i.default=a},6:function(t,i,a){var o=this&&this.__createBinding||(Object.create?function(t,i,a,o){void 0===o&&(o=a);var e=Object.getOwnPropertyDescriptor(i,a);e&&!("get"in e?!i.__esModule:e.writable||e.configurable)||(e={enumerable:!0,get:function(){return i[a]}}),Object.defineProperty(t,o,e)}:function(t,i,a,o){void 0===o&&(o=a),t[o]=i[a]}),e=this&&this.__exportStar||function(t,i){for(var a in t)"default"===a||Object.prototype.hasOwnProperty.call(i,a)||o(i,t,a)};Object.defineProperty(i,"__esModule",{value:!0}),e(a(402),i)}},i={};return function a(o){var e=i[o];if(void 0!==e)return e.exports;var n=i[o]={exports:{}};return t[o].call(n.exports,n,n.exports,a),n.exports}(321)})()}));