import React from "react"; import { Button, ButtonGroup } from "react-bootstrap"; interface IPaginationProps { itemsPerPage: number; currentPage: number; totalItems: number; onChangePage: (page: number) => void; } export const Pagination: React.FC = ({ itemsPerPage, currentPage, totalItems, onChangePage }) => { const totalPages = Math.ceil(totalItems / itemsPerPage); let startPage: number; let endPage: number; if (totalPages <= 10) { // less than 10 total pages so show all startPage = 1; endPage = totalPages; } else if (currentPage <= 6) { startPage = 1; endPage = 10; } else if (currentPage + 4 >= totalPages) { startPage = totalPages - 9; endPage = totalPages; } else { startPage = currentPage - 5; endPage = currentPage + 4; } const pages = [...Array(endPage + 1 - startPage).keys()].map( i => startPage + i ); const calculatePageClass = (buttonPage: number) => { if (pages.length <= 4) return ""; if (currentPage === 1 && buttonPage <= 4) return ""; const maxPage = pages[pages.length - 1]; if (currentPage === maxPage && buttonPage > maxPage - 3) return ""; if (Math.abs(buttonPage - currentPage) <= 1) return ""; return "d-none d-sm-block"; }; const pageButtons = pages.map((page: number) => ( )); if (pages.length <= 1) return
; return ( {pageButtons} ); };