"use client" import { useState, useEffect, useCallback } from "react" import { useSearchParams, useRouter } from "next/navigation" import { PromptCard } from "@/components/explore/prompt-card" import { SearchBar, SearchFilters } from "@/components/explore/search-bar" import { Button } from "@/components/ui/button" import { Loader2, Sparkles } from "lucide-react" interface Prompt { id: string slug: string title: string description: string | null category: string | null totalRuns: number starsCount: number remixesCount: number badges: string[] creator: { name: string | null username: string | null image: string | null } | null } interface ExploreClientProps { initialPrompts: Prompt[] } export function ExploreClient({ initialPrompts }: ExploreClientProps) { const router = useRouter() const searchParams = useSearchParams() const [prompts, setPrompts] = useState(initialPrompts) const [isLoading, setIsLoading] = useState(false) const [hasMore, setHasMore] = useState(true) const [offset, setOffset] = useState(initialPrompts.length) // Fetch prompts with current filters const fetchPrompts = useCallback(async (query: string, filters: SearchFilters, reset = false) => { setIsLoading(true) try { const params = new URLSearchParams() if (query) params.set("search", query) if (filters.category) params.set("category", filters.category) if (filters.sortBy) params.set("sort", filters.sortBy) if (filters.dateRange && filters.dateRange !== 'all') params.set("dateRange", filters.dateRange) params.set("limit", "12") params.set("offset", reset ? "0" : offset.toString()) const res = await fetch(`/api/prompts?${params.toString()}`) const data = await res.json() if (reset) { setPrompts(data) setOffset(data.length) } else { setPrompts((prev) => { const existingIds = new Set(prev.map(p => p.id)) const newPrompts = data.filter((p: Prompt) => !existingIds.has(p.id)) return [...prev, ...newPrompts] }) setOffset((prev) => prev + data.length) } setHasMore(data.length === 12) } catch (error) { console.error("Failed to fetch prompts:", error) } finally { setIsLoading(false) } }, [offset]) const handleSearch = (query: string, filters: SearchFilters) => { // Update URL with search params const params = new URLSearchParams() if (query) params.set("q", query) if (filters.category) params.set("category", filters.category) if (filters.sortBy && filters.sortBy !== 'trending') params.set("sort", filters.sortBy) if (filters.dateRange && filters.dateRange !== 'all') params.set("date", filters.dateRange) const queryString = params.toString() router.push(queryString ? `/explore?${queryString}` : "/explore", { scroll: false }) // Fetch with new filters fetchPrompts(query, filters, true) } return (
{/* Advanced Search Bar */} {/* Results Count */}
{prompts.length} prompt{prompts.length !== 1 ? "s" : ""} found
{/* Prompts Grid */} {prompts.length > 0 ? (
{prompts.map((prompt) => ( ))}
) : (

No prompts found

Try adjusting your search or filters

)} {/* Load More */} {hasMore && prompts.length > 0 && (
)}
) }