import { useEffect, useState } from "react"; import { useI18n } from "../i18n"; export type ListPagerProps = { page: number; pages: number; total: number; pageSize: number; pageSizeOptions?: number[]; onPageChange: (page: number) => void; onPageSizeChange?: (size: number) => void; disabled?: boolean; className?: string; }; /** Shared denser pager: meta + prev/next + jump + optional page size. */ export function ListPager({ page, pages, total, pageSize, pageSizeOptions = [20, 50, 100, 200], onPageChange, onPageSizeChange, disabled = false, className = "", }: ListPagerProps) { const { t } = useI18n(); const safePages = Math.max(1, pages || 1); const [jumpDraft, setJumpDraft] = useState(String(page)); useEffect(() => { setJumpDraft(String(page)); }, [page]); const commitJump = () => { const n = Math.floor(Number(jumpDraft)); if (!Number.isFinite(n)) { setJumpDraft(String(page)); return; } const next = Math.min(safePages, Math.max(1, n)); setJumpDraft(String(next)); if (next !== page) onPageChange(next); }; return (
{t("common.pagerMeta", { total: String(total), page: String(page), pages: String(safePages), })}
{onPageSizeChange ? ( ) : null}
); }