/**
* Paginates a collection of results for staging environments with fallback logic.
*
* @param {Array} data - The array of data to paginate.
* @param {number} pageSize - The number of items per page.
* @param {number} currentPage - The current page number (1-based).
* @param {function} fallback - A function to handle cases where pagination fails.
* @returns {{data: Array, page: number, totalPages: number}} - An object containing the paginated data, current page, and total number of pages. Returns null on error.
*/
function paginate(data, pageSize, currentPage, fallback) {
if (!Array.isArray(data)) {
console.error("Data must be an array.");
fallback?.("Invalid data input: Data must be an array."); // Execute fallback if provided
return null;
}
if (typeof pageSize !== 'number' || pageSize <= 0) {
console.error("Page size must be a positive number.");
fallback?.("Invalid page size: Page size must be a positive number.");
return null;
}
if (typeof currentPage !== 'number' || currentPage <= 0) {
console.error("Current page must be a positive number.");
fallback?.("Invalid current page: Current page must be a positive number.");
return null;
}
const startIndex = (currentPage - 1) * pageSize;
const endIndex = startIndex + pageSize;
if (startIndex >= data.length) {
// Handle cases where the current page exceeds the total number of items.
return { data: [], page: currentPage, totalPages: 1 }; // Or handle as needed.
}
const paginatedData = data.slice(startIndex, endIndex);
const totalItems = data.length;
const totalPages = Math.ceil(totalItems / pageSize);
return {
data: paginatedData,
page: currentPage,
totalPages: totalPages,
};
}
Add your comment