So far it returned 0 because of those in range checks which both applied because numberOfPages is 0 if we have no record.
47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
function pageNumber (number, size, recordCount) {
|
|
let numberOfPages = Math.ceil(recordCount / size);
|
|
|
|
number = parseInt(number) || 1;
|
|
|
|
// Ensure page number is in range
|
|
number = number > numberOfPages ? numberOfPages : number;
|
|
number = number < 1 ? 1 : number;
|
|
|
|
return number;
|
|
}
|
|
|
|
function buildIds (order, number, size, recordCount) {
|
|
let offset = size * (number - 1);
|
|
|
|
let start;
|
|
let mapFunction;
|
|
|
|
if (order === 'asc') {
|
|
start = 1 + offset;
|
|
mapFunction = (_, i) => start + i;
|
|
} else {
|
|
start = recordCount - offset;
|
|
mapFunction = (_, i) => start - i;
|
|
}
|
|
|
|
// Ensure size is in range
|
|
let end = offset + size;
|
|
if (end > recordCount) {
|
|
let diff = end - recordCount;
|
|
size = size - diff;
|
|
}
|
|
|
|
return Array.from({ length: size }, mapFunction);
|
|
}
|
|
|
|
module.exports = function paged (recordCount, options = {}) {
|
|
let { order, page } = options;
|
|
order = order || 'desc';
|
|
page = page || {};
|
|
|
|
let size = parseInt(page.size) || 25;
|
|
let number = pageNumber(page.number, size, recordCount);
|
|
|
|
return buildIds(order, number, size, recordCount);
|
|
};
|