import { settings } from '@utils/config'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useIntl } from 'react-intl'; import styles from './Pagination.module.scss'; const Pagination = ({ baseUrl, total }: { baseUrl: string; total: number }) => { const intl = useIntl(); const { asPath } = useRouter(); const totalPages = Math.floor(total / settings.postsPerPage); const currentPage = asPath.includes('/page/') ? Number(asPath.split(`${baseUrl}/page/`)[1]) : 1; const hasPreviousPage = currentPage !== 1; const hasNextPage = currentPage !== totalPages; const getPreviousPageItem = () => { return (
  • {intl.formatMessage( { defaultMessage: '{icon} Previous page', description: 'Pagination: previous page link', }, { icon: '←' } )}
  • ); }; const getNextPageItem = () => { return (
  • {intl.formatMessage( { defaultMessage: 'Next page {icon}', description: 'Pagination: Next page link', }, { icon: '→' } )}
  • ); }; const getPages = () => { const pages = []; for (let i = 1; i <= totalPages; i++) { if (i === currentPage) { pages.push({ id: `page-${i}`, link: ( {intl.formatMessage( { defaultMessage: 'Page {number}', description: 'Pagination: page number', }, { number: i, a11y: (chunks: string) => ( {chunks} ), } )} ), }); } else { pages.push({ id: `page-${i}`, link: ( {intl.formatMessage( { defaultMessage: 'Page {number}', description: 'Pagination: page number', }, { number: i, a11y: (chunks: string) => ( {chunks} ), } )} ), }); } } return pages; }; const getItems = () => { const pages = getPages(); return pages.map((page) => (
  • {page.link}
  • )); }; return ( ); }; export default Pagination;