paginate-arrays-js
Version:
A library to paginate arrays in javascript
100 lines (99 loc) • 2.79 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
cursorPaginate: () => cursorPaginate,
paginate: () => paginate
});
module.exports = __toCommonJS(src_exports);
function paginate({
data,
page,
perPage,
url
}) {
const offset = (page - 1) * perPage;
const paginatedItems = data.slice(offset, page * perPage);
const totalPage = Math.ceil(data.length / perPage);
const nextPage = page < totalPage ? page + 1 : null;
const prevPage = page > 1 ? page - 1 : null;
const firstPage = 1;
const lastPage = totalPage;
const from = offset + 1;
const to = offset + paginatedItems.length;
const urlWithPage = (page2) => `${url}?page=${page2}`;
const pagination = {
totalPage,
nextPage,
prevPage,
firstPage,
lastPage,
from,
to,
perPage,
total: data.length,
currentPage: page,
hasPrevPage: page > 1,
hasNextPage: page < totalPage,
url: urlWithPage(page)
};
return {
data: paginatedItems,
pagination
};
}
function cursorPaginate({
data,
perPage,
identifier,
after,
before
}) {
var _a, _b;
let offset = 0;
if (after) {
offset = data.findIndex((item) => item[identifier] === after) + 1;
}
if (before) {
offset = data.findIndex((item) => item[identifier] === before);
}
const paginatedItems = data.slice(offset, offset + perPage);
const totalPages = Math.ceil(data.length / perPage);
const hasNextPage = offset + perPage < data.length;
const hasPrevPage = offset > 0;
const startCursor = (_a = paginatedItems[0]) == null ? void 0 : _a[identifier];
const endCursor = (_b = paginatedItems[paginatedItems.length - 1]) == null ? void 0 : _b[identifier];
const pagination = {
hasNextPage,
hasPrevPage,
startCursor,
endCursor,
totalPages
};
return {
data: paginatedItems,
pagination
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
cursorPaginate,
paginate
});
//# sourceMappingURL=index.cjs.map