Pagination.tsx
⎇
Raw
1export interface PaginationInfo {
2 page: number;
3 totalPages: number;
4 /** URL template — use `{page}` as placeholder, e.g. "/repo/issues?status=open&page={page}" */
5 pageUrlTemplate: string;
6}
7
8export function Pagination({
9 page,
10 totalPages,
11 pageUrlTemplate,
12}: PaginationInfo) {
13 if (totalPages <= 1) return null;
14
15 const url = (p: number) => pageUrlTemplate.replace("{page}", String(p));
16
17 return (
18 <nav class="pagination" aria-label="Pagination">
19 <div class="pagination-prev">
20 {page > 1 && (
21 <a href={url(page - 1)} class="pagination-btn">
22 ← Previous
23 </a>
24 )}
25 </div>
26 <span class="pagination-info">
27 Page {page} of {totalPages}
28 </span>
29 <div class="pagination-next">
30 {page < totalPages && (
31 <a href={url(page + 1)} class="pagination-btn">
32 Next →
33 </a>
34 )}
35 </div>
36 </nav>
37 );
38}
39