prisma-extension-pagination
Version:
Prisma Client extension for pagination
61 lines (60 loc) • 1.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.paginateWithPages = paginateWithPages;
const helpers_1 = require("./helpers");
async function paginateWithPages(model, query, { page, limit, includePageCount }) {
const previousPage = page > 1 ? page - 1 : null;
let results;
let nextPage;
let pageCount = null;
let totalCount = null;
if (includePageCount) {
[results, totalCount] = await Promise.all([
model.findMany({
...query,
...{
skip: (page - 1) * (limit ?? 0),
take: limit === null ? undefined : limit,
},
}),
model.count({
...query,
...helpers_1.resetSelection,
...helpers_1.resetOrdering,
}),
]);
pageCount = limit === null ? 1 : Math.ceil(totalCount / limit);
nextPage = page < pageCount ? page + 1 : null;
}
else {
results = await model.findMany({
...query,
...{
skip: (page - 1) * (limit ?? 0),
take: limit === null ? undefined : limit + 1,
},
});
nextPage = limit === null ? null : results.length > limit ? page + 1 : null;
if (nextPage) {
results.pop();
}
}
return [
results,
{
...{
isFirstPage: previousPage === null,
isLastPage: nextPage === null,
currentPage: page,
previousPage,
nextPage,
},
...(includePageCount === true
? {
pageCount,
totalCount,
}
: {}),
},
];
}