mirror of
https://github.com/apricote/Listory.git
synced 2026-01-13 13:11:02 +00:00
29 lines
723 B
TypeScript
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;
|
|
};
|