import React from 'react'; import { PaginationContainer } from '../../styles/components/shared/PaginationContainer.style'; import { Link } from '../../i18n'; export interface PaginationProps { href: string; as: string; currentPage: number; totalPages: number; } const Pagination: React.FC = ({ href, as, currentPage, totalPages }) => { const nextPage: number = currentPage + 1; const previousPage: number = currentPage - 1; const item = (index: number | string, disabled: boolean, page: number, content: string | JSX.Element): JSX.Element => (
  • {disabled ? content : {content} }
  • ); const renderPreviousPage = (): JSX.Element => item( 'first', currentPage === 1, previousPage, ); const renderNextPage = (): JSX.Element => item( 'last', currentPage >= totalPages, nextPage, ); const renderPaginator = (): JSX.Element[] => { const numberPage = totalPages; const maxShow = numberPage - 1; const result = []; let jump: boolean; for (let i = 1; i <= Math.ceil(numberPage); i += 1) { const isCurrentPage = i === currentPage; if (isCurrentPage || i < 2 || i > maxShow || i === nextPage || i === previousPage) { jump = false; result.push( item(i, isCurrentPage, i, i.toString()) ); } else { if (!jump) { jump = true; result.push( item(i, true, 0, '...') ); } } } return result; }; return (
      {renderPreviousPage()} {renderPaginator()} {renderNextPage()}
    ); }; export default Pagination;