import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from "@/components/ui/pagination"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { PageSize } from "./types"; import {useLanguage} from "@/contexts/LanguageContext.tsx"; interface TablePaginationProps { currentPage: number; totalPages: number; pageSize: PageSize; totalItems: number; itemsPerPage: number; onPageChange: (page: number) => void; onPageSizeChange: (size: PageSize) => void; } export function TablePagination({ currentPage, totalPages, pageSize, totalItems, itemsPerPage, onPageChange, onPageSizeChange, }: TablePaginationProps) { const {t} = useLanguage() // Generate page numbers const getPageNumbers = () => { const pages = []; const maxVisiblePages = 5; const halfVisible = Math.floor(maxVisiblePages / 2); let startPage = Math.max(1, currentPage - halfVisible); let endPage = Math.min(totalPages, startPage + maxVisiblePages - 1); if (endPage - startPage + 1 < maxVisiblePages) { startPage = Math.max(1, endPage - maxVisiblePages + 1); } for (let i = startPage; i <= endPage; i++) { pages.push(i); } return pages; }; return (
{t("rowsPerPage")}: {pageSize === 'all' ? `Showing all ${totalItems} items` : `Showing ${Math.min((currentPage - 1) * itemsPerPage + 1, totalItems)}-${Math.min(currentPage * itemsPerPage, totalItems)} of ${totalItems} items`}
{totalPages > 1 && ( onPageChange(Math.max(1, currentPage - 1))} className={currentPage === 1 ? "pointer-events-none opacity-50" : "cursor-pointer"} /> {getPageNumbers().map((page) => ( onPageChange(page)} className="cursor-pointer" > {page} ))} onPageChange(Math.min(totalPages, currentPage + 1))} className={currentPage === totalPages ? "pointer-events-none opacity-50" : "cursor-pointer"} /> )}
); }