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';