import { Search } from "lucide-react"; import { Button } from "../components/ui/button"; import { Input } from "../components/ui/input"; import { ServerCard } from "../components/server-card"; import { useState, useEffect } from "react"; import type { MCPServer } from "../types/server"; import { fetchMCPServers, searchMCPServers } from "../mcp-servers"; import { motion, AnimatePresence } from "framer-motion"; export default function HomePage() { const [servers, setServers] = useState([]); const [searchQuery, setSearchQuery] = useState(""); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); // Combined effect for initial load and search useEffect(() => { const loadServers = async () => { try { setIsLoading(true); setError(null); const trimmedQuery = searchQuery.trim(); const results = trimmedQuery ? await searchMCPServers(trimmedQuery) : await fetchMCPServers(); setServers(results); } catch (err) { const errorMessage = err instanceof Error ? err.message : "Unknown error"; setError(`Failed to load servers: ${errorMessage}`); console.error("Error loading servers:", err); } finally { setIsLoading(false); } }; // Debounce all server loads const timeoutId = setTimeout(loadServers, 300); return () => clearTimeout(timeoutId); }, [searchQuery]); return (

Browse Extensions

Your central directory for discovering and installing extensions.

{/* */} setSearchQuery(e.target.value)} />
{error && (
{error}
)}
{/*

{searchQuery ? "Search Results" : ""}

*/}

{searchQuery ? `${servers.length} result${ servers.length > 1 ? "s" : "" } for "${searchQuery}"` : ""}

{isLoading ? (
Loading servers...
) : servers.length === 0 ? (
{searchQuery ? "No servers found matching your search." : "No servers available."}
) : (
{/* */} {servers.map((server, index) => ( ))} {/* */}
)}
); }