'use client'; import { useState, useEffect, useMemo } from 'react'; import { PawPrint, SlidersHorizontal } from 'lucide-react'; import AnimalCard from '@/components/animals/AnimalCard'; import FilterChips, { FILTER_OPTIONS } from '@/components/animals/FilterChips'; import { MOCK_ANIMALS, Animal } from '@/lib/mock-data'; // TODO: substituir por query Prisma quando DATABASE_URL estiver configurada function filterAnimals(animals: Animal[], filter: string): Animal[] { switch (filter) { case 'dog': return animals.filter(a => a.species === 'DOG'); case 'cat': return animals.filter(a => a.species === 'CAT'); case 'urgent': return animals.filter(a => a.urgent); case 'lisboa': return animals.filter(a => a.shelter.district.toLowerCase() === 'lisboa'); case 'porto': return animals.filter(a => a.shelter.district.toLowerCase() === 'porto'); case 'braga': return animals.filter(a => a.shelter.district.toLowerCase() === 'braga'); case 'sintra': return animals.filter(a => a.shelter.district.toLowerCase() === 'sintra'); case 'male': return animals.filter(a => a.sex === 'MALE'); case 'female': return animals.filter(a => a.sex === 'FEMALE'); case 'sterilized': return animals.filter(a => a.sterilized); default: return animals; } } function SkeletonCard() { return (
); } export default function AnimalsPage() { const [activeFilter, setActiveFilter] = useState('all'); const [loading, setLoading] = useState(true); // Simulate async load useEffect(() => { const t = setTimeout(() => setLoading(false), 700); return () => clearTimeout(t); }, []); // Re-show skeleton briefly when filter changes const handleFilterChange = (id: string) => { setLoading(true); setActiveFilter(id); setTimeout(() => setLoading(false), 350); }; const animals = useMemo(() => filterAnimals(MOCK_ANIMALS, activeFilter), [activeFilter]); const urgentCount = MOCK_ANIMALS.filter(a => a.urgent).length; return (
{/* Page header */}
{/* Breadcrumb */}

PetLink · Adopção

Animais disponíveis

{MOCK_ANIMALS.length.toLocaleString('pt-PT')} animais à espera {urgentCount > 0 && ( {urgentCount} urgentes )}

{/* Filter chips */}
{/* Grid */}
{loading ? (
{Array.from({ length: 6 }).map((_, i) => ( ))}
) : animals.length > 0 ? ( <>
{animals.map((animal, index) => ( ))}

{animals.length} de {MOCK_ANIMALS.length} animais • Dados de demonstração

) : (
)}
); }