violet-paginator
Version:
Display, paginate, sort, filter, and update items from the server. violet-paginator is a complete list management library for react/redux applications.
45 lines (34 loc) • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = pageData;
var _range = require('./lib/range');
var _range2 = _interopRequireDefault(_range);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
function pageData(currentPage, totalPages) {
var maxPages = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 7;
var hasRightSeparator = totalPages - currentPage >= maxPages;
var hasLeftSeparator = totalPages > maxPages && currentPage > 2;
var minPage = hasLeftSeparator ? Math.min(currentPage, totalPages - (maxPages - 1)) : 2;
var rangeSize = maxPages - [hasRightSeparator, hasLeftSeparator].filter(function (h) {
return h;
}).length;
var maxPage = Math.max(minPage + 1, Math.min(totalPages - 1, minPage + (rangeSize - 1)));
var firstPage = {
page: 1,
current: currentPage === 1
};
var lastPage = totalPages > 1 && {
page: totalPages,
current: currentPage === totalPages
};
var middlePages = totalPages <= 2 ? [] : [].concat(_toConsumableArray((0, _range2.default)(minPage, maxPage))).map(function (page) {
return {
page: page,
current: page === currentPage
};
});
return { firstPage: firstPage, hasLeftSeparator: hasLeftSeparator, middlePages: middlePages, hasRightSeparator: hasRightSeparator, lastPage: lastPage };
}