import { ChangeEvent } from 'react'; import { useTextController } from '@/shared/language/hooks/use-text-controller'; import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from '../../pagination'; interface TablePaginationProps { currentPage: number; itemsPerPage: number; totalPages: number; totalOperations?: number; transactionsQuantity: number; itemsPerPageOptions: number[]; onPageChange: (page: number) => void; onItemsPerPageChange: (e: ChangeEvent) => void; } export const TransactionsTablePagination = ({ currentPage, itemsPerPage, totalPages, totalOperations = 0, itemsPerPageOptions, transactionsQuantity, onPageChange, onItemsPerPageChange, }: TablePaginationProps) => { const { t } = useTextController(); const getPageNumbers = () => { const pages = []; const maxVisiblePages = 5; // Maximum number of visible pages const halfVisible = Math.floor(maxVisiblePages / 2); let startPage = Math.max(1, currentPage - halfVisible); let endPage = Math.min(totalPages, currentPage + halfVisible); if (currentPage <= halfVisible) { endPage = Math.min(totalPages, maxVisiblePages); } else if (currentPage + halfVisible >= totalPages) { startPage = Math.max(1, totalPages - maxVisiblePages + 1); } for (let i = startPage; i <= endPage; i++) { pages.push(i); } return pages; }; return ( <> {transactionsQuantity > 0 && (
Показано {transactionsQuantity} из {totalOperations} операций
onPageChange(currentPage - 1)} className={ currentPage === 1 ? 'pointer-events-none opacity-50' : '' } /> {getPageNumbers().map((page, index) => ( onPageChange(page as number)} > {page} ))} onPageChange(currentPage + 1)} className={ currentPage === totalPages ? 'pointer-events-none opacity-50' : '' } />
{t('transactions.entries')}
)} ); };