import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from "@/components/ui/pagination"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { PageSize } from "@/hooks/useServicesPagination"; import { useLanguage } from "@/contexts/LanguageContext"; interface ServicesPaginationProps { currentPage: number; totalPages: number; pageSize: PageSize; totalItems: number; onPageChange: (page: number) => void; onPageSizeChange: (size: PageSize) => void; } export function ServicesPagination({ currentPage, totalPages, pageSize, totalItems, onPageChange, onPageSizeChange, }: ServicesPaginationProps) { const { t } = useLanguage(); // Generate page numbers to display 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); // Adjust start page if we don't have enough pages at the end if (endPage - startPage + 1 < maxVisiblePages) { startPage = Math.max(1, endPage - maxVisiblePages + 1); } for (let i = startPage; i <= endPage; i++) { pages.push(i); } return pages; }; const startItem = Math.min((currentPage - 1) * pageSize + 1, totalItems); const endItem = Math.min(currentPage * pageSize, totalItems); return (
{t("rowsPerPage") ?? "Rows per page"}: {totalItems > 0 ? `${startItem}-${endItem} of ${totalItems} ${t("services") || "services"}` : `0 ${t("services") || "services"}` }
{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" } /> )}
); }