react-native-ultimate-paginator
Version:
A comprehensive pagination library supporting various pagination scenarios including server-side, client-side, infinite scroll, and load-more functionality
41 lines (40 loc) • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculatePagination = calculatePagination;
exports.generatePageNumbers = generatePageNumbers;
exports.getPageItems = getPageItems;
function calculatePagination(options) {
var totalItems = options.totalItems, currentPage = options.currentPage, pageSize = options.pageSize;
var totalPages = Math.ceil(totalItems / pageSize);
var normalizedCurrentPage = Math.max(1, Math.min(currentPage, totalPages));
var startIndex = (normalizedCurrentPage - 1) * pageSize;
var endIndex = Math.min(startIndex + pageSize, totalItems);
return {
currentPage: normalizedCurrentPage,
totalPages: totalPages,
pageSize: pageSize,
totalItems: totalItems,
hasNextPage: normalizedCurrentPage < totalPages,
hasPreviousPage: normalizedCurrentPage > 1,
startIndex: startIndex,
endIndex: endIndex
};
}
function generatePageNumbers(currentPage, totalPages, maxPages) {
if (maxPages === void 0) { maxPages = 5; }
var pages = [];
var halfMaxPages = Math.floor(maxPages / 2);
var startPage = Math.max(currentPage - halfMaxPages, 1);
var endPage = Math.min(startPage + maxPages - 1, totalPages);
if (endPage - startPage + 1 < maxPages) {
startPage = Math.max(endPage - maxPages + 1, 1);
}
for (var i = startPage; i <= endPage; i++) {
pages.push(i);
}
return pages;
}
function getPageItems(items, currentPage, pageSize) {
var startIndex = (currentPage - 1) * pageSize;
return items.slice(startIndex, startIndex + pageSize);
}