Если у меня есть 10 страниц, а текущая страница - 4, то она должна вернуть 2,3,4,5,6 в качестве номера страницы. как текущая страница должна быть между. и предел страницы должен быть 5.
{pager.pages.map((page, index) => (
<PaginationLink
className="pagination__link"
type="button"
onClick={() => this.setPage(page)}
>
{page}
</PaginationLink>
))}
Output: 1 2 3 4 5 6 7 8 9 10
В настоящее время я использую эту функцию pager ():
getPager = (totalItems, currentPage, pageSize) => {
// default to first page
currentPage = currentPage || 1;
// default page size is 10
pageSize = pageSize || 10;
// calculate total pages
const totalPages = Math.ceil(totalItems / pageSize);
let startPage, endPage;
if (totalPages <= 10) {
// less than 10 total pages so show all
startPage = 1;
endPage = totalPages;
} else {
// more than 10 total pages so calculate start and end pages
if (currentPage <= 6) {
startPage = 1;
endPage = 10;
} else if (currentPage + 4 >= totalPages) {
startPage = totalPages - 9;
endPage = totalPages;
} else {
startPage = currentPage - 5;
endPage = currentPage + 4;
}
}
// calculate start and end item indexes
const startIndex = (currentPage - 1) * pageSize;
const endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);
// create an array of pages to ng-repeat in the pager control
const pages = range(startPage, endPage + 1);
// return object with all pager properties required by the view
return {
totalItems,
currentPage,
pageSize,
totalPages,
startPage,
endPage,
startIndex,
endIndex,
pages,
};
};
Эта функция используется для получения массива пагинации со всеми необходимыми значениями.