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;