function getPaginationPageItems(dataArray, itemsPerPage: number, pageNumber: number){ let p = pageNumber - 1, offset = p * itemsPerPage, limit = itemsPerPage ; return dataArray.slice(offset, offset + limit); } function getPaginationPageNumber(itemsPerPage: number, totalPageCount: number, pageNumber: number, pageOperation?: string){ let p = pageNumber; if(pageOperation){ switch(pageOperation){ case "first": p = 1; break; case "prev": if(pageNumber > 1){ p = pageNumber - 1; } break; case "next": if(pageNumber < totalPageCount){ p = pageNumber + 1; } break; case "last": p = totalPageCount; break; default: break; } } return p; } export function getPaginationPage(dataArray, itemsPerPage=100, pageNumber = 1, pageOperation?: string){ let totalPageCount = Math.ceil(dataArray.length / itemsPerPage), p = getPaginationPageNumber(itemsPerPage, totalPageCount, pageNumber, pageOperation) ; return getPaginationPageItems(dataArray, itemsPerPage, p); } export function getPaginationRange(totalPages, rangeSize = 7, pageNumber = 1){ let p = pageNumber, n = pageNumber, rangeArray = [pageNumber] ; if(totalPages < rangeSize) rangeSize = totalPages; while(rangeArray.length < rangeSize){ if (p > 1){ p = p - 1; rangeArray.unshift(p); } if(n < totalPages){ n = n + 1; rangeArray.push(n); } } return rangeArray; } export function getPaginationRangeSize(totalPages: number) : number { let rangeSize = 7; if(rangeSize > totalPages){ rangeSize = totalPages; } return rangeSize; } export function copyPaginatedPayload(payload, pagination){ let rows, payloadCopy = { data: undefined, hasError: payload.hasError, isInvalidated: payload.isInvalidated, updatedAt: new Date() }; if(payload.data){ rows = getPaginationPage(payload.data.rows, pagination.itemsPerPage, pagination.pageNumber); payloadCopy.data = { columns: payload.data.columns, rows: rows, query: payload.data.query }; } return payloadCopy }