import type { OnChangeFn } from "@tanstack/react-table"; import type { PaginationState } from "@tanstack/react-table"; import { cn } from "@/lib/utils"; import { Button } from "@/components/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; /** * Shared pagination footer for table-style views. * * Renders the rows count, page-size select, page indicator, and prev/next * buttons. Works off the raw {@link PaginationState} primitives so it can back * both a TanStack `Table` instance (via a thin adapter) and standalone card * layouts that drive pagination directly (e.g. MediaMobilePagination). * * The Desktop DataTable and the Media mobile card list both consume this to * avoid the duplication flagged in * `openspec/changes/mobile-responsive-parity/verify-report.md` residual risk #5. */ export interface TablePaginationProps { pageIndex: number; pageSize: number; pageSizeOptions: number[]; totalRows: number; pageCount: number; onPaginationChange: OnChangeFn; /** Optional extra className on the outer container (e.g. "p-4"). */ className?: string; } export function TablePagination({ pageIndex, pageSize, pageSizeOptions, totalRows, pageCount, onPaginationChange, className, }: TablePaginationProps) { return (
{`${totalRows} row${totalRows === 1 ? "" : "s"}`}
Rows per page
Page {pageIndex + 1} of {pageCount}
); }