import type { NodeProps } from "@xyflow/react";
import { Handle, Position } from "@xyflow/react";
import { Box, Check, Copy, Cpu, Globe, HardDrive, Network } from "lucide-react";
import { useState } from "react";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/cn";
import type { ProxyMetadata, TopologyNodeData } from "@/lib/topology-types";
export function ProxyNode({ data, selected }: NodeProps) {
const nodeData = data as TopologyNodeData | TopologyNodeData;
const metadata = nodeData.metadata as ProxyMetadata | ProxyMetadata;
const { proxy, readyPods, podCount, health, connectedServers } = metadata;
const k8sNodes = "k8sNodes" in metadata ? metadata.k8sNodes : [];
const connectionInfo = "connectionInfo" in metadata ? metadata.connectionInfo : null;
const metrics = "metrics" in metadata ? metadata.metrics : undefined;
const [copied, setCopied] = useState(false);
const handleCopy = async (e: React.MouseEvent) => {
e.stopPropagation();
if (connectionInfo?.connectionString) {
await navigator.clipboard.writeText(connectionInfo.connectionString);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
}
};
const getStatusBadge = () => {
switch (health) {
case "healthy":
return
{proxy.id}
{proxy.description && ({proxy.description}
)}
{connectionInfo.connectionString}
{connectionInfo.note}
)}