import { useState, useMemo } from 'react' import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '../ui/Table' import { Badge } from '../ui/Badge' import { Kbd } from '../ui/Kbd' import { EmptyState, EmptyStateIcon, EmptyStateTitle, EmptyStateDescription } from '../ui/EmptyState' import { Icon } from '../Icon' type Service = { id: string name: string region: string status: 'healthy' | 'degraded' | 'scaling' latency: string memory: string instances: number } const INITIAL_SERVICES: Service[] = [ { id: '1', name: 'api-gateway', region: 'us-east-1', status: 'healthy', latency: '12ms', memory: '128 MB', instances: 8 }, { id: '2', name: 'vector-indexer', region: 'eu-central-1', status: 'healthy', latency: '34ms', memory: '890 MB', instances: 4 }, { id: '3', name: 'model-inference', region: 'us-west-2', status: 'scaling', latency: '78ms', memory: '4.2 GB', instances: 16 }, { id: '4', name: 'session-broker', region: 'us-east-1', status: 'healthy', latency: '8ms', memory: '64 MB', instances: 6 }, { id: '5', name: 'analytics-worker', region: 'ap-northeast-1', status: 'degraded', latency: '142ms', memory: '1.8 GB', instances: 2 }, { id: '6', name: 'audit-logger', region: 'eu-west-1', status: 'healthy', latency: '19ms', memory: '210 MB', instances: 3 }, ] export function ServiceTable() { const [search, setSearch] = useState('') const [filterStatus, setFilterStatus] = useState('all') const filteredServices = useMemo(() => { return INITIAL_SERVICES.filter(svc => { const matchesSearch = svc.name.toLowerCase().includes(search.toLowerCase()) || svc.region.toLowerCase().includes(search.toLowerCase()) const matchesStatus = filterStatus === 'all' || svc.status === filterStatus return matchesSearch && matchesStatus }) }, [search, filterStatus]) return (
{/* Table Toolbar */}
setSearch(e.target.value)} className="icon-search-input" /> {search && ( )}
{['all', 'healthy', 'scaling', 'degraded'].map(st => ( ))}
{/* Table Surface */} {filteredServices.length > 0 ? ( Service Name Region Status P99 Latency Memory Nodes {filteredServices.map(svc => (
{svc.name}
{svc.region} {svc.status} {svc.latency} {svc.memory} {svc.instances}
))}
) : ( No matching services No active nodes or services match the current filter query "{search}". )}
Showing {filteredServices.length} of {INITIAL_SERVICES.length} deployed services Synced live via cluster coordinator
) }