|
import React from 'react'; |
|
|
|
type TPluginPaginationProps = { |
|
currentPage: number; |
|
maxPage: number; |
|
onChangePage: (page: number) => void; |
|
}; |
|
|
|
const PluginPagination: React.FC<TPluginPaginationProps> = ({ |
|
currentPage, |
|
maxPage, |
|
onChangePage, |
|
}) => { |
|
const pages = [...Array(maxPage).keys()].map((i) => i + 1); |
|
|
|
const handlePageChange = (page: number) => { |
|
if (page < 1 || page > maxPage) { |
|
return; |
|
} |
|
onChangePage(page); |
|
}; |
|
|
|
return ( |
|
<div className="flex gap-2 text-sm text-black/60 dark:text-white/70"> |
|
<div |
|
role="button" |
|
aria-label="Previous page" |
|
onClick={() => handlePageChange(currentPage - 1)} |
|
className={`flex cursor-default items-center text-sm ${ |
|
currentPage === 1 |
|
? 'text-black/70 opacity-50 dark:text-white/70' |
|
: 'text-black/70 hover:text-black/50 dark:text-white/70 dark:hover:text-white/50' |
|
}`} |
|
> |
|
<svg |
|
stroke="currentColor" |
|
fill="none" |
|
strokeWidth="2" |
|
viewBox="0 0 24 24" |
|
strokeLinecap="round" |
|
strokeLinejoin="round" |
|
className="h-4 w-4" |
|
height="1em" |
|
width="1em" |
|
xmlns="http://www.w3.org/2000/svg" |
|
> |
|
<polyline points="15 18 9 12 15 6"></polyline> |
|
</svg> |
|
Prev |
|
</div> |
|
{pages.map((page) => ( |
|
<div |
|
role="button" |
|
key={page} |
|
className={`flex h-5 w-5 items-center justify-center text-sm ${ |
|
currentPage === page |
|
? 'text-blue-600 hover:text-blue-600 dark:text-blue-600 dark:hover:text-blue-600' |
|
: 'text-black/70 hover:text-black/50 dark:text-white/70 dark:hover:text-white/50' |
|
}`} |
|
onClick={() => onChangePage(page)} |
|
> |
|
{page} |
|
</div> |
|
))} |
|
<div |
|
role="button" |
|
aria-label="Next page" |
|
onClick={() => handlePageChange(currentPage + 1)} |
|
className={`flex cursor-default items-center text-sm ${ |
|
currentPage === maxPage |
|
? 'text-black/70 opacity-50 dark:text-white/70' |
|
: 'text-black/70 hover:text-black/50 dark:text-white/70 dark:hover:text-white/50' |
|
}`} |
|
> |
|
Next |
|
<svg |
|
stroke="currentColor" |
|
fill="none" |
|
strokeWidth="2" |
|
viewBox="0 0 24 24" |
|
strokeLinecap="round" |
|
strokeLinejoin="round" |
|
className="h-4 w-4" |
|
height="1em" |
|
width="1em" |
|
xmlns="http://www.w3.org/2000/svg" |
|
> |
|
<polyline points="9 18 15 12 9 6"></polyline> |
|
</svg> |
|
</div> |
|
</div> |
|
); |
|
}; |
|
|
|
export default PluginPagination; |
|
|