braid-design-system
Version:
Themeable design system for the SEEK Group
19 lines (14 loc) • 526 B
text/typescript
export const maxPages = 7;
export const paginate = ({ page, total }: { page: number; total: number }) => {
const half = (maxPages - 1) / 2;
const smallerHalf = Math.floor(half);
const largerHalf = Math.ceil(half);
const pageCount = Math.min(maxPages, total);
let minPage = page - smallerHalf;
if (page - smallerHalf <= 1) {
minPage = 1;
} else if (page + largerHalf >= total) {
minPage = Math.max(1, total - maxPages + 1);
}
return Array.from(Array(pageCount).keys()).map((p) => p + minPage);
};