Listory/frontend/src/util/getPaginationItems.ts

29 lines
723 B
TypeScript

export const getPaginationItems = (
currentPage: number,
totalPages: number,
delta: number = 1,
): (number | null)[] => {
const left = currentPage - delta;
const right = currentPage + delta;
const range = Array.from(Array(totalPages))
.map((e, i) => i + 1)
.filter((i) => i === 1 || i === totalPages || (i >= left && i <= right))
.reduce((pages: (number | null)[], page, i) => {
if (pages.length !== 0) {
const prevPage = pages[pages.length - 1];
if (prevPage !== null) {
const diff = page - prevPage;
if (diff > 1) {
pages.push(null);
}
}
}
pages.push(page);
return pages;
}, []);
return range;
};