"use client"; import { useState, useEffect } from "react"; import PetCard from "@/components/PetCard"; import { fetchAllPages } from "@/lib/fetchAllPages"; const API_BASE = ""; export default function AdoptPage() { const [pets, setPets] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [health, setHealth] = useState(null); const [search, setSearch] = useState(""); const [query, setQuery] = useState(""); const PAGE_SIZE = 100; useEffect(() => { fetch(`${API_BASE}/api/v1/health`) .then((res) => (res.ok ? setHealth("online") : setHealth("error"))) .catch(() => setHealth("offline")); }, []); useEffect(() => { setLoading(true); setError(null); fetchAllPages((page) => { const params = new URLSearchParams({ page: String(page), size: String(PAGE_SIZE), sort: "petId,asc", status: "Available", }); if (query) { params.set("q", query); } return `${API_BASE}/api/v1/pets?${params}`; }) .then((allPets) => { setPets(allPets); }) .catch((err) => setError(err.message)) .finally(() => setLoading(false)); }, [query]); function handleSearch(e) { e.preventDefault(); setLoading(true); setError(null); setQuery(search.trim()); } return (

Find Your Perfect Companion

Give a loving pet their forever home

setSearch(e.target.value)} /> {query && ( )}
{loading &&

Loading pets...

} {error && (

Failed to load pets

{error}

{health === "offline" ? "The Spring Boot backend is not reachable. Make sure it is running in IntelliJ on port 8080." : health === "error" ? "The backend responded with an error. Check the IntelliJ Run console for stack traces." : "The backend is reachable but the /pets endpoint failed. Check the IntelliJ Run console."}

)} {!loading && !error && pets.length === 0 && (

No pets found.

)} {!loading && !error && pets.length > 0 && (
{pets.map((pet) => ( ))}
)}
); }