Loading pets...
}
{error && Unable to load pets, please try again later.
}
{!loading && !error && displayedPets.length === 0 && (
No pets found matching your filters.
)}
{!loading && !error && displayedPets.length > 0 && (
{ setCurrentPage((p) => Math.max(0, p - 1)); window.scrollTo(0, 0); }} disabled={currentPage === 0}>
← Prev
{(() => {
const pages = [];
const delta = 2;
const left = Math.max(0, currentPage - delta);
const right = Math.min(totalPages - 1, currentPage + delta);
if (left > 0) { pages.push(0); if (left > 1) pages.push("..."); }
for (let i = left; i <= right; i++) pages.push(i);
if (right < totalPages - 1) { if (right < totalPages - 2) pages.push("..."); pages.push(totalPages - 1); }
return pages.map((p, i) =>
p === "..." ? (
…
) : (
{ setCurrentPage(p); window.scrollTo(0, 0); }}>
{p + 1}
)
);
})()}
{ setCurrentPage((p) => Math.min(totalPages - 1, p + 1)); window.scrollTo(0, 0); }} disabled={currentPage === totalPages - 1}>
Next →
)}