cpns / apps /web /src /components /admin /Pagination.tsx
pramudya-yb
Rename project from Labas to Pram
2b62b0c
Raw
History Blame Contribute Delete
1.39 kB
import { Button } from "@pram/ui/components/button";
interface PaginationProps {
page: number;
totalPages: number;
onChange: (p: number) => void;
}
export function Pagination({ page, totalPages, onChange }: PaginationProps) {
if (totalPages <= 1) return null;
const pages: (number | "...")[] = [];
for (let i = 1; i <= totalPages; i++) {
if (i === 1 || i === totalPages || (i >= page - 2 && i <= page + 2)) {
pages.push(i);
} else if (pages[pages.length - 1] !== "...") {
pages.push("...");
}
}
return (
<div className="flex items-center justify-center gap-1 mt-6">
<Button
variant="outline"
size="sm"
onClick={() => onChange(page - 1)}
disabled={page <= 1}
>
Previous
</Button>
{pages.map((p, i) =>
p === "..." ? (
<span key={`e-${i}`} className="px-2 text-[var(--warm-charcoal)]">
...
</span>
) : (
<Button
key={p}
variant={p === page ? "default" : "outline"}
size="sm"
onClick={() => onChange(p as number)}
>
{p}
</Button>
),
)}
<Button
variant="outline"
size="sm"
onClick={() => onChange(page + 1)}
disabled={page >= totalPages}
>
Next
</Button>
</div>
);
}