import { ChevronLeftIcon, ChevronRightIcon, DoubleArrowLeftIcon, DoubleArrowRightIcon } from "@radix-ui/react-icons"; import { Table } from "@tanstack/react-table"; import { Button } from "@app/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@app/components/ui/select"; import { useTranslations } from "next-intl"; interface DataTablePaginationProps { table: Table; onPageSizeChange?: (pageSize: number) => void; onPageChange?: (pageIndex: number) => void; totalCount?: number; isServerPagination?: boolean; isLoading?: boolean; disabled?: boolean; } export function DataTablePagination({ table, onPageSizeChange, onPageChange, totalCount, isServerPagination = false, isLoading = false, disabled = false }: DataTablePaginationProps) { const t = useTranslations(); const handlePageSizeChange = (value: string) => { const newPageSize = Number(value); table.setPageSize(newPageSize); // Call the callback if provided (for persistence) if (onPageSizeChange) { onPageSizeChange(newPageSize); } }; const handlePageNavigation = (action: 'first' | 'previous' | 'next' | 'last') => { if (isServerPagination && onPageChange) { const currentPage = table.getState().pagination.pageIndex; const pageCount = table.getPageCount(); let newPage: number; switch (action) { case 'first': newPage = 0; break; case 'previous': newPage = Math.max(0, currentPage - 1); break; case 'next': newPage = Math.min(pageCount - 1, currentPage + 1); break; case 'last': newPage = pageCount - 1; break; default: return; } if (newPage !== currentPage) { onPageChange(newPage); } } else { // Use table's built-in navigation for client-side pagination switch (action) { case 'first': table.setPageIndex(0); break; case 'previous': table.previousPage(); break; case 'next': table.nextPage(); break; case 'last': table.setPageIndex(table.getPageCount() - 1); break; } } }; return (
{isServerPagination && totalCount !== undefined ? ( t('paginator', { current: table.getState().pagination.pageIndex + 1, last: Math.ceil(totalCount / table.getState().pagination.pageSize) }) ) : ( t('paginator', {current: table.getState().pagination.pageIndex + 1, last: table.getPageCount()}) )}
); }