import { Button } from "./Button"; import { Select } from "./Select"; import { clampPage, DEFAULT_PAGE_SIZES, pageCount, pageRangeLabel, } from "../../lib/pagination"; import { useI18n } from "../../i18n/I18nContext"; type Props = { /** 總筆數 */ total: number; /** 目前頁(從 1 起) */ page: number; pageSize: number; onPageChange: (page: number) => void; /** 有傳才顯示每頁筆數 */ onPageSizeChange?: (size: number) => void; pageSizeOptions?: readonly number[]; /** 僅一頁時是否仍顯示(預設否) */ showWhenSingle?: boolean; className?: string; }; /** * 統一分頁列:上一頁/下一頁、目前頁、可選每頁筆數。 * 只有一頁且無調整 pageSize 時隱藏,避免噪音。 */ export function Pager({ total, page, pageSize, onPageChange, onPageSizeChange, pageSizeOptions = DEFAULT_PAGE_SIZES, showWhenSingle = false, className = "", }: Props) { const { t } = useI18n(); const totalPages = pageCount(total, pageSize); const safePage = clampPage(page, totalPages); const single = totalPages <= 1; const hide = total <= 0 || (single && !showWhenSingle && !onPageSizeChange); if (hide) return null; return (
); }