compact-pagination
Advanced tools
Comparing version 1.0.2 to 2.0.0
'use strict'; | ||
module.exports = function compactPagination(_ref) { | ||
var _ref$totalSize = _ref.totalSize; | ||
var totalSize = _ref$totalSize === undefined ? 3 : _ref$totalSize; | ||
var _ref$currentIndex = _ref.currentIndex; | ||
var currentIndex = _ref$currentIndex === undefined ? 1 : _ref$currentIndex; | ||
var _ref$bufferSize = _ref.bufferSize; | ||
var bufferSize = _ref$bufferSize === undefined ? 1 : _ref$bufferSize; | ||
var _ref$totalSize = _ref.totalSize, | ||
totalSize = _ref$totalSize === undefined ? 3 : _ref$totalSize, | ||
_ref$currentIndex = _ref.currentIndex, | ||
currentIndex = _ref$currentIndex === undefined ? 1 : _ref$currentIndex, | ||
_ref$bufferSize = _ref.bufferSize, | ||
bufferSize = _ref$bufferSize === undefined ? 1 : _ref$bufferSize; | ||
if (currentIndex < 1 || currentIndex > totalSize) throw 'Invalid config'; | ||
var pages = [{ page: currentIndex, isCurrent: true }]; | ||
for (var page = currentIndex - 1; page >= Math.max(1, currentIndex - bufferSize); page--) { | ||
pages.unshift({ page: page }); | ||
var size = Math.min(totalSize, 5 + bufferSize * 2); | ||
var pageNumbers = new Set([1, totalSize]); | ||
var lowestBound = Math.max(1, currentIndex - bufferSize); | ||
var highestBound = Math.min(totalSize, currentIndex + bufferSize); | ||
for (var i = lowestBound; i <= highestBound; i++) { | ||
pageNumbers.add(i); | ||
} | ||
for (var page = currentIndex + 1; page <= Math.min(totalSize, currentIndex + bufferSize); page++) { | ||
pages.push({ page: page }); | ||
var edges = {}; | ||
if (lowestBound > 2) edges.left = true; | ||
if (highestBound < totalSize - 1) edges.right = true; | ||
if (Object.keys(edges).length === 1) { | ||
for (var _i = edges.left ? lowestBound : highestBound; pageNumbers.size < size - 1; edges.left ? _i-- : _i++) { | ||
pageNumbers.add(_i); | ||
if (edges.left) { | ||
lowestBound = _i; | ||
} else { | ||
highestBound = _i; | ||
} | ||
} | ||
} | ||
if (pages[0].page > 3) { | ||
pages = [{ page: 1 }, { isSeparator: true }].concat(pages); | ||
} else if (pages[0].page === 3) { | ||
pages = [{ page: 1 }, { page: 2 }].concat(pages); | ||
} else if (pages[0].page === 2) { | ||
pages = [{ page: 1 }].concat(pages); | ||
var pages = Array.from(pageNumbers).sort(function (x, y) { | ||
return x - y; | ||
}).map(function (i) { | ||
return { page: i, isCurrent: i === currentIndex }; | ||
}); | ||
if (edges.left) { | ||
var left = lowestBound === 3 ? { page: 2 } : { isSeparator: true }; | ||
pages.splice(1, 0, left); | ||
} | ||
var lastPage = pages[pages.length - 1].page; | ||
if (lastPage === totalSize - 1) { | ||
pages = pages.concat([{ page: totalSize }]); | ||
} else if (lastPage === totalSize - 2) { | ||
pages = pages.concat([{ page: totalSize - 1 }, { page: totalSize }]); | ||
} else if (lastPage !== totalSize) { | ||
pages = pages.concat([{ isSeparator: true }, { page: totalSize }]); | ||
if (edges.right) { | ||
var right = highestBound === totalSize - 2 ? { page: highestBound + 1 } : { isSeparator: true }; | ||
pages.splice(pages.length - 1, 0, right); | ||
} | ||
return pages; | ||
}; |
{ | ||
"name": "compact-pagination", | ||
"version": "1.0.2", | ||
"version": "2.0.0", | ||
"description": "no fuss pagination helper", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
2602
43
3