import React from 'react'; import { Server, Check, AlertCircle, Loader2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Skeleton } from '@/components/ui/skeleton'; import { cn } from '@/lib/utils'; import type { McpServer } from '@/components/hooks/useServers'; interface ServersListProps { servers: McpServer[]; selectedServer: McpServer | null; isLoading: boolean; error: string | null; searchQuery: string; onSearchChange: (query: string) => void; onServerSelect: (server: McpServer) => void; onConnectNew: () => void; } export function ServersList({ servers, selectedServer, isLoading, error, searchQuery, onSearchChange, onServerSelect, onConnectNew, }: ServersListProps) { const filteredServers = servers.filter((server) => server.name.toLowerCase().includes(searchQuery.toLowerCase()) ); const getStatusIcon = (status: McpServer['status']) => { switch (status) { case 'connected': return ; case 'error': return ; case 'disconnected': default: return ; } }; const getStatusColor = (status: McpServer['status']) => { switch (status) { case 'connected': return 'bg-green-100 text-green-700 dark:bg-green-700/20 dark:text-green-400'; case 'error': return 'bg-red-100 text-red-700 dark:bg-red-700/20 dark:text-red-400'; case 'disconnected': return 'bg-slate-100 text-slate-600 dark:bg-slate-700/20 dark:text-slate-400'; default: return 'bg-yellow-100 text-yellow-700 dark:bg-yellow-700/20 dark:text-yellow-400'; } }; return (
{/* Header */}

MCP Servers

{isLoading && servers.length === 0 && ( )}
onSearchChange(e.target.value)} className="h-8 text-sm" />
{/* Error State */} {error && servers.length === 0 && !isLoading && (

Error loading servers

{error}

)} {/* Loading State */} {isLoading && servers.length === 0 && (
{[1, 2, 3].map((i) => (
))}
)} {/* Empty State */} {servers.length === 0 && !isLoading && !error && (

No servers available

Connect a server to get started

)} {/* Servers List */} {filteredServers.length > 0 && (
{filteredServers.map((server) => ( ))}
)} {/* No Results */} {filteredServers.length === 0 && servers.length > 0 && (

No servers match your search

)} {/* Connect Button */}
); }