general-eval-card / components /list-pagination.tsx
evijit's picture
evijit HF Staff
redesigned
3a12290
Raw
History Blame
1.41 kB
"use client"
import { Button } from "@/components/ui/button"
interface ListPaginationProps {
page: number
pageSize: number
totalItems: number
itemLabel: string
onPageChange: (page: number) => void
}
export function ListPagination({
page,
pageSize,
totalItems,
itemLabel,
onPageChange,
}: ListPaginationProps) {
const totalPages = Math.max(1, Math.ceil(totalItems / pageSize))
const start = totalItems === 0 ? 0 : (page - 1) * pageSize + 1
const end = Math.min(page * pageSize, totalItems)
if (totalItems <= pageSize) {
return null
}
return (
<div className="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
<p className="text-sm text-muted-foreground">
Showing {start}-{end} of {totalItems} {itemLabel}
</p>
<div className="flex items-center gap-2">
<Button
variant="outline"
size="sm"
onClick={() => onPageChange(Math.max(1, page - 1))}
disabled={page === 1}
>
Previous
</Button>
<span className="text-sm text-muted-foreground">
Page {page} of {totalPages}
</span>
<Button
variant="outline"
size="sm"
onClick={() => onPageChange(Math.min(totalPages, page + 1))}
disabled={page === totalPages}
>
Next
</Button>
</div>
</div>
)
}