| 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} |
| truncatableClassName="w-8 px-0.5 text-center" |
| truncatableText="..." |
| > |
| <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 |
|
|