|
import React from 'react'; |
|
|
|
type TPagesProps = { |
|
pages: number; |
|
pageNumber: number; |
|
setPageNumber: (pageNumber: number) => void; |
|
nextPage: () => Promise<void>; |
|
previousPage: () => Promise<void>; |
|
}; |
|
|
|
export default function Pages({ |
|
pageNumber, |
|
pages, |
|
nextPage, |
|
previousPage, |
|
setPageNumber, |
|
}: TPagesProps) { |
|
const clickHandler = |
|
(func: () => Promise<void>) => async (e: React.MouseEvent<HTMLButtonElement>) => { |
|
e.preventDefault(); |
|
await func(); |
|
}; |
|
|
|
if (pageNumber > pages) { |
|
setPageNumber(pages); |
|
} |
|
|
|
return pageNumber == 1 && pages == 1 ? null : ( |
|
<div className="m-auto mb-2 mt-4 flex items-center justify-center gap-2"> |
|
<button |
|
onClick={clickHandler(previousPage)} |
|
className={ |
|
'btn btn-small bg-transition m-auto flex gap-2 transition hover:bg-gray-800 disabled:text-gray-300 dark:text-white dark:disabled:text-gray-400' + |
|
(pageNumber <= 1 ? ' hidden-visibility' : '') |
|
} |
|
disabled={pageNumber <= 1} |
|
> |
|
<< |
|
</button> |
|
<span className="flex-none text-gray-400"> |
|
{pageNumber} / {pages} |
|
</span> |
|
<button |
|
onClick={clickHandler(nextPage)} |
|
className={ |
|
'btn btn-small bg-transition m-auto flex gap-2 transition hover:bg-gray-800 disabled:text-gray-300 dark:text-white dark:disabled:text-gray-400' + |
|
(pageNumber >= pages ? ' hidden-visibility' : '') |
|
} |
|
disabled={pageNumber >= pages} |
|
> |
|
>> |
|
</button> |
|
</div> |
|
); |
|
} |
|
|