/** * ConnectionCard Component * Displays a single federation connection with PDA-friendly design */ import React from "react"; import { FederationConnectionStatus, type ConnectionDetails } from "@/lib/api/federation"; interface ConnectionCardProps { connection: ConnectionDetails; onAccept?: (connectionId: string) => void; onReject?: (connectionId: string) => void; onDisconnect?: (connectionId: string) => void; showDetails?: boolean; compact?: boolean; } /** * Get PDA-friendly status text and color */ function getStatusDisplay(status: FederationConnectionStatus): { text: string; colorClass: string; icon: string; } { switch (status) { case FederationConnectionStatus.ACTIVE: return { text: "Active", colorClass: "text-green-600 bg-green-50", icon: "🟢", }; case FederationConnectionStatus.PENDING: return { text: "Pending", colorClass: "text-blue-600 bg-blue-50", icon: "🔵", }; case FederationConnectionStatus.DISCONNECTED: return { text: "Disconnected", colorClass: "text-yellow-600 bg-yellow-50", icon: "⏸️", }; case FederationConnectionStatus.REJECTED: return { text: "Rejected", colorClass: "text-gray-600 bg-gray-50", icon: "⚪", }; } } export const ConnectionCard = React.memo(function ConnectionCard({ connection, onAccept, onReject, onDisconnect, showDetails = false, compact = false, }: ConnectionCardProps): React.JSX.Element { const status = getStatusDisplay(connection.status); const name = typeof connection.metadata.name === "string" ? connection.metadata.name : "Remote Instance"; const description = connection.metadata.description as string | undefined; const paddingClass = compact ? "p-3" : "p-4"; return (
{/* Header */}

{name}

{connection.remoteUrl}

{description &&

{description}

}
{/* Status Badge */}
{status.icon} {status.text}
{/* Capabilities (when showDetails is true) */} {showDetails && (

Capabilities

{connection.remoteCapabilities.supportsQuery && ( Query )} {connection.remoteCapabilities.supportsCommand && ( Command )} {connection.remoteCapabilities.supportsEvent && ( Events )} {connection.remoteCapabilities.supportsAgentSpawn && ( Agent Spawn )}
)} {/* Actions */} {connection.status === FederationConnectionStatus.PENDING && (onAccept ?? onReject) && (
{onAccept && ( )} {onReject && ( )}
)} {connection.status === FederationConnectionStatus.ACTIVE && onDisconnect && (
)}
); });