import * as hi from "jsr:@preact-icons/hi2";
export function PaginationControl({
paginatedData,
currentUrl,
authorId,
}: {
paginatedData: PaginatedPosts;
currentUrl: URL;
authorId: number;
}) {
const buildUrl = (page: number, limit?: number) => {
const params = new URLSearchParams(currentUrl.searchParams);
params.set("page", page.toString());
if (limit) params.set("limit", limit.toString());
return `${currentUrl.pathname}?${params.toString()}`;
};
if (paginatedData.totalPages <= 1) return null;
return (
{/* Pagination info and controls */}
{paginatedData.hasPrevPage && (
Previous
)}
{/* Page numbers */}
{Array.from(
{ length: Math.min(paginatedData.totalPages, 7) },
(_, i) => {
let pageNum;
if (paginatedData.totalPages <= 7) {
pageNum = i + 1;
} else {
const start = Math.max(1, paginatedData.currentPage - 3);
const end = Math.min(paginatedData.totalPages, start + 6);
pageNum = start + i;
if (pageNum > end) return null;
}
const isCurrentPage = pageNum === paginatedData.currentPage;
return (
{pageNum}
);
},
)}
{paginatedData.hasNextPage && (
Next
)}
{/* Quick jump to page */}
);
}