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 */}
{/* 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 */}
);
}