diff --git a/src/app/(app)/explore/page.tsx b/src/app/(app)/explore/page.tsx index c445894..145c1eb 100644 --- a/src/app/(app)/explore/page.tsx +++ b/src/app/(app)/explore/page.tsx @@ -1,12 +1,18 @@ "use client"; import { useState } from "react"; +import Link from "next/link"; import { useInfiniteQuery, useQuery } from "@tanstack/react-query"; -import { Loader2 } from "lucide-react"; +import { Loader2, TrendingUp } from "lucide-react"; import { useTRPC } from "@/trpc/client"; import { useActivePet } from "@/context/ActivePetContext"; import { ExploreCard } from "@/components/explore/ExploreCard"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Badge } from "@/components/ui/badge"; +import { Dialog, DialogContent } from "@/components/ui/dialog"; +import { PostCard } from "@/components/feed/PostCard"; +import { getMediaUrl } from "@/lib/media-url"; +import type { PostCardPost } from "@/components/feed/PostCard"; import { Select, SelectContent, @@ -20,8 +26,13 @@ export default function ExplorePage() { const trpc = useTRPC(); const { activePetId } = useActivePet(); - const [activeSpeciesId, setActiveSpeciesId] = useState(null); + const [activeTab, setActiveTab] = useState("trending"); const [activeBreedId, setActiveBreedId] = useState(null); + const [selectedPost, setSelectedPost] = useState(null); + + const isTrending = activeTab === "trending"; + const activeSpeciesId = + activeTab === "trending" || activeTab === "all" ? null : activeTab; const { data: speciesList, isLoading: loadingSpecies } = useQuery( trpc.pets.listSpecies.queryOptions() @@ -35,12 +46,16 @@ export default function ExplorePage() { ); const breeds = breedData ?? []; + const { data: trendingData, isLoading: loadingTrending } = useQuery( + trpc.explore.getTrending.queryOptions(undefined, { enabled: isTrending }) + ); + const { data, fetchNextPage, hasNextPage, isFetchingNextPage, - isLoading, + isLoading: loadingPets, } = useInfiniteQuery( trpc.explore.listPets.infiniteQueryOptions( { @@ -51,15 +66,16 @@ export default function ExplorePage() { { getNextPageParam: (lastPage) => lastPage.nextCursor, initialCursor: undefined, + enabled: !isTrending, } ) ); const pets = data?.pages.flatMap((p) => p.pets) ?? []; - function handleSpeciesChange(speciesId: string | null) { - setActiveSpeciesId(speciesId); - setActiveBreedId(null); // reset breed when switching species + function handleTabChange(tab: string) { + setActiveTab(tab); + setActiveBreedId(null); } if (loadingSpecies) { @@ -74,13 +90,12 @@ export default function ExplorePage() {

Explore

- {/* Species tabs */} - handleSpeciesChange(v === "all" ? null : v)} - className="mb-4" - > + + + + Trending + All {(speciesList ?? []).map((s) => ( @@ -90,7 +105,7 @@ export default function ExplorePage() { - {/* Breed filter — only visible when a species is selected */} + {/* Breed filter — only when a species tab is active */} {activeSpeciesId && breeds.length > 0 && (