fosrl.pangolin/src/components/DataTablePagination.tsx

100 lines
3.8 KiB
TypeScript
Raw Normal View History

2024-10-14 23:05:07 -04:00
import {
ChevronLeftIcon,
ChevronRightIcon,
DoubleArrowLeftIcon,
DoubleArrowRightIcon
2024-10-14 23:05:07 -04:00
} from "@radix-ui/react-icons";
import { Table } from "@tanstack/react-table";
import { Button } from "@app/components/ui/button";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue
2024-10-14 23:05:07 -04:00
} from "@app/components/ui/select";
import { useTranslations } from "next-intl";
2024-10-14 23:05:07 -04:00
interface DataTablePaginationProps<TData> {
table: Table<TData>;
}
export function DataTablePagination<TData>({
table
2024-10-14 23:05:07 -04:00
}: DataTablePaginationProps<TData>) {
const t = useTranslations();
2024-10-14 23:05:07 -04:00
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">
2025-02-05 21:53:30 -05:00
{[10, 20, 30, 40, 50, 100].map((pageSize) => (
<SelectItem key={pageSize} value={`${pageSize}`}>
{pageSize}
</SelectItem>
))}
</SelectContent>
</Select>
</div>
2024-12-26 19:33:56 -05:00
<div className="flex items-center space-x-3 lg:space-x-8">
<div className="flex items-center justify-center text-sm font-medium">
{t('paginator', {current: table.getState().pagination.pageIndex + 1, last: table.getPageCount()})}
2024-10-14 23:05:07 -04:00
</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">{t('paginatorToFirst')}</span>
2024-10-14 23:05:07 -04:00
<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">{t('paginatorToPrevious')}</span>
2024-10-14 23:05:07 -04:00
<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">{t('paginatorToNext')}</span>
2024-10-14 23:05:07 -04:00
<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">{t('paginatorToLast')}</span>
2024-10-14 23:05:07 -04:00
<DoubleArrowRightIcon className="h-4 w-4" />
</Button>
</div>
</div>
</div>
);
}