I have written a function to get the actual page range to display that page range in pagination.
My function is working properly. But I think that I have written bad code. Can someone review my code and give me some feedback to improve my code?
Here is the code:
const pageRange = (() => {
let startPage = activePage < pageNeighbours + 1 ? 1 : activePage - pageNeighbours;
const endPage = totalPages < (pageNeighbours * 2) + startPage
? totalPages : (pageNeighbours * 2) + startPage;
const diff = (startPage - endPage) + (pageNeighbours * 2);
startPage -= (startPage - diff > 0 ? diff : 0);
let actualPageRange = new Array((endPage - startPage) + 1)
.fill().map((_, i) => i + startPage);
if (actualPageRange[0] !== 1) actualPageRange = [1, ...actualPageRange];
if (actualPageRange[1] !== 2) actualPageRange = [1, '...', ...actualPageRange.slice(1)];
if (actualPageRange[actualPageRange.length - 1] !== totalPages) {
actualPageRange = [...actualPageRange, totalPages];
}
if (actualPageRange[actualPageRange.length - 2] !== totalPages - 1) {
actualPageRange = [...actualPageRange.slice(0, actualPageRange.length - 1), '...', totalPages];
}
return actualPageRange;
})();
In the above code:
activePage
refers to the current page number.
pageNeighbours
refers to the number of pages that should be shown besides active page
totalPages
is self-explanatory
Update
After this function execution, I will use pageRange to create output like: