import React from "react"; import { ChevronLeftIcon, ChevronRightIcon } from "@sanity/icons"; interface PaginationProps { page: number; total: number; pageSize: number; onPage: (p: number) => void; onPageSizeChange: (size: number) => void; } export default function Pagination({ page, total, pageSize, onPage, onPageSizeChange, }: PaginationProps) { const totalPages = Math.ceil(total / pageSize); const isFirst = page === 0; const isLast = page >= totalPages - 1; if (total === 0) return null; const navStyle = (disabled: boolean): React.CSSProperties => ({ display: "flex", alignItems: "center", justifyContent: "center", width: 34, height: 34, borderRadius: 8, border: "1px solid var(--card-border-color)", background: "var(--card-bg-color)", color: "var(--card-link-color)", cursor: disabled ? "not-allowed" : "pointer", transition: "all 0.15s cubic-bezier(0.4, 0, 0.2, 1)", flexShrink: 0, opacity: disabled ? 0.4 : 1, outline: "none", }); return (
Show per page
Showing{" "} {page * pageSize + 1}–{Math.min((page + 1) * pageSize, total)} {" "} of {total} items
{totalPages > 1 && (
{Array.from({ length: totalPages }).map((_, i) => { if (totalPages > 6 && i !== 0 && i !== totalPages - 1 && Math.abs(page - i) > 1) { if (i === 1 && page > 2) { return ( ... ); } if (i === totalPages - 2 && page < totalPages - 3) { return ( ... ); } return null; } const isCurrent = page === i; return ( ); })}
)}
); }