@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
66 lines • 2 kB
JavaScript
import "core-js/modules/es.string.replace.js";
export const calculatePagination = (pageCount, currentPage, isSmallScreen) => {
if (pageCount === 1) return [[1]];
const MIDDLE_WIDTH = isSmallScreen ? 1 : 3;
const EDGE_WIDTH = isSmallScreen ? 4 : 9;
const FIRST_BUTTON = 1;
const LAST_BUTTON = pageCount;
const currentAtStart = currentPage - EDGE_WIDTH + 1 < FIRST_BUTTON;
const currentAtEnd = currentPage + EDGE_WIDTH > LAST_BUTTON;
let middleStart;
let middleEnd;
if (currentAtStart) {
middleStart = 2;
middleEnd = EDGE_WIDTH;
} else if (currentAtEnd) {
middleStart = LAST_BUTTON + 1 - EDGE_WIDTH;
middleEnd = LAST_BUTTON - 1;
} else {
middleStart = isSmallScreen ? currentPage : currentPage - MIDDLE_WIDTH;
middleEnd = currentPage + MIDDLE_WIDTH;
}
if (middleEnd > LAST_BUTTON - 1) {
middleEnd = LAST_BUTTON - 1;
}
if (middleStart < FIRST_BUTTON + 1) {
middleStart = FIRST_BUTTON + 1;
}
const middleArray = [];
if (middleStart === 2) {
middleArray.push(FIRST_BUTTON);
}
for (let i = middleStart; i <= middleEnd; i++) {
middleArray.push(i);
}
if (middleEnd === LAST_BUTTON - 1) {
middleArray.push(LAST_BUTTON);
}
const pages = [];
if (middleStart !== 2) {
pages.push([FIRST_BUTTON]);
}
if (typeof LAST_BUTTON !== 'undefined') {
pages.push(middleArray);
if (middleEnd !== LAST_BUTTON - 1) {
pages.push([LAST_BUTTON]);
}
}
return pages;
};
export const getDotsAriaLabel = _ref => {
let {
more_pages,
numbersList: nList,
pageNumberGroups: pGroups
} = _ref;
let count = 0;
try {
if (nList.length === 1) {
count = nList[0] - (pGroups.length === 2 ? pGroups[0][pGroups[0].length - 1] : pGroups[1][pGroups[1].length - 1]);
} else if (nList.length > 1) {
count = nList[0] - pGroups[0][0] - 1;
}
} catch (e) {}
return count > 0 ? more_pages.replace('%s', count.toString()) : null;
};
//# sourceMappingURL=PaginationCalculation.js.map