|
import type { FC } from 'react'
|
|
import React from 'react'
|
|
import { Pagination } from 'react-headless-pagination'
|
|
import { ArrowLeftIcon, ArrowRightIcon } from '@heroicons/react/24/outline'
|
|
import { useTranslation } from 'react-i18next'
|
|
import s from './style.module.css'
|
|
|
|
type Props = {
|
|
current: number
|
|
onChange: (cur: number) => void
|
|
total: number
|
|
limit?: number
|
|
}
|
|
|
|
const CustomizedPagination: FC<Props> = ({ current, onChange, total, limit = 10 }) => {
|
|
const { t } = useTranslation()
|
|
const totalPages = Math.ceil(total / limit)
|
|
return (
|
|
<Pagination
|
|
className="flex items-center w-full h-10 text-sm select-none mt-8"
|
|
currentPage={current}
|
|
edgePageCount={2}
|
|
middlePagesSiblingCount={1}
|
|
setCurrentPage={onChange}
|
|
totalPages={totalPages}
|
|
truncableClassName="w-8 px-0.5 text-center"
|
|
truncableText="..."
|
|
>
|
|
<Pagination.PrevButton
|
|
disabled={current === 0}
|
|
className={`flex items-center mr-2 text-gray-500 focus:outline-none ${current === 0 ? 'cursor-not-allowed opacity-50' : 'cursor-pointer hover:text-gray-600'}`} >
|
|
<ArrowLeftIcon className="mr-3 h-3 w-3" />
|
|
{t('appLog.table.pagination.previous')}
|
|
</Pagination.PrevButton>
|
|
<div className={`flex items-center justify-center flex-grow ${s.pagination}`}>
|
|
<Pagination.PageButton
|
|
activeClassName="bg-primary-50 text-primary-600"
|
|
className="flex items-center justify-center h-8 w-8 rounded-lg cursor-pointer"
|
|
inactiveClassName="text-gray-500"
|
|
/>
|
|
</div>
|
|
<Pagination.NextButton
|
|
disabled={current === totalPages - 1}
|
|
className={`flex items-center mr-2 text-gray-500 focus:outline-none ${current === totalPages - 1 ? 'cursor-not-allowed opacity-50' : 'cursor-pointer hover:text-gray-600'}`} >
|
|
{t('appLog.table.pagination.next')}
|
|
<ArrowRightIcon className="ml-3 h-3 w-3" />
|
|
</Pagination.NextButton>
|
|
</Pagination>
|
|
)
|
|
}
|
|
|
|
export default CustomizedPagination
|
|
|