import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from '@/components/ui/pagination'; interface QueuePaginationProps { currentPage: number; totalPages: number; pageSize: number; totalCount: number; isMobile: boolean; onPageChange: (page: number) => void; onPageSizeChange: (size: number) => void; } export const QueuePagination = ({ currentPage, totalPages, pageSize, totalCount, isMobile, onPageChange, onPageSizeChange }: QueuePaginationProps) => { if (totalPages <= 1) return null; const handlePageChange = (page: number) => { onPageChange(page); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handlePageSizeChange = (size: number) => { onPageSizeChange(size); window.scrollTo({ top: 0, behavior: 'smooth' }); }; const startItem = ((currentPage - 1) * pageSize) + 1; const endItem = Math.min(currentPage * pageSize, totalCount); return (
{/* Item Count & Page Size Selector */}
Showing {startItem} - {endItem} of {totalCount} items {!isMobile && ( <> )}
{/* Pagination Controls */} {isMobile ? (
Page {currentPage} of {totalPages}
) : ( handlePageChange(Math.max(1, currentPage - 1))} className={currentPage === 1 ? 'pointer-events-none opacity-50' : 'cursor-pointer'} /> {currentPage > 3 && ( <> handlePageChange(1)} isActive={currentPage === 1} > 1 {currentPage > 4 && } )} {Array.from({ length: totalPages }, (_, i) => i + 1) .filter(page => page >= currentPage - 2 && page <= currentPage + 2) .map(page => ( handlePageChange(page)} isActive={currentPage === page} > {page} )) } {currentPage < totalPages - 2 && ( <> {currentPage < totalPages - 3 && } handlePageChange(totalPages)} isActive={currentPage === totalPages} > {totalPages} )} handlePageChange(Math.min(totalPages, currentPage + 1))} className={currentPage === totalPages ? 'pointer-events-none opacity-50' : 'cursor-pointer'} /> )}
); }; QueuePagination.displayName = 'QueuePagination';