12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- 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";
- interface DataTablePaginationProps<TData> {
- table: Table<TData>;
- }
- export function DataTablePagination<TData>({
- table
- }: DataTablePaginationProps<TData>) {
- return (
- <div className="flex items-center justify-between text-muted-foreground">
- <div className="flex items-center space-x-2">
- <Select
- value={`${table.getState().pagination.pageSize}`}
- onValueChange={(value) => {
- table.setPageSize(Number(value));
- }}
- >
- <SelectTrigger className="h-8 w-[70px]">
- <SelectValue
- placeholder={table.getState().pagination.pageSize}
- />
- </SelectTrigger>
- <SelectContent side="top">
- {[10, 20, 30, 40, 50, 100].map((pageSize) => (
- <SelectItem key={pageSize} value={`${pageSize}`}>
- {pageSize}
- </SelectItem>
- ))}
- </SelectContent>
- </Select>
- </div>
- <div className="flex items-center space-x-3 lg:space-x-8">
- <div className="flex items-center justify-center text-sm font-medium">
- Page {table.getState().pagination.pageIndex + 1} of{" "}
- {table.getPageCount()}
- </div>
- <div className="flex items-center space-x-2">
- <Button
- variant="outline"
- className="hidden h-8 w-8 p-0 lg:flex"
- onClick={() => table.setPageIndex(0)}
- disabled={!table.getCanPreviousPage()}
- >
- <span className="sr-only">Go to first page</span>
- <DoubleArrowLeftIcon className="h-4 w-4" />
- </Button>
- <Button
- variant="outline"
- className="h-8 w-8 p-0"
- onClick={() => table.previousPage()}
- disabled={!table.getCanPreviousPage()}
- >
- <span className="sr-only">Go to previous page</span>
- <ChevronLeftIcon className="h-4 w-4" />
- </Button>
- <Button
- variant="outline"
- className="h-8 w-8 p-0"
- onClick={() => table.nextPage()}
- disabled={!table.getCanNextPage()}
- >
- <span className="sr-only">Go to next page</span>
- <ChevronRightIcon className="h-4 w-4" />
- </Button>
- <Button
- variant="outline"
- className="hidden h-8 w-8 p-0 lg:flex"
- onClick={() =>
- table.setPageIndex(table.getPageCount() - 1)
- }
- disabled={!table.getCanNextPage()}
- >
- <span className="sr-only">Go to last page</span>
- <DoubleArrowRightIcon className="h-4 w-4" />
- </Button>
- </div>
- </div>
- </div>
- );
- }
|