"use client"; import type { ConnectionInfo } from "@minikura/api"; import { Check, Copy } from "lucide-react"; import { useEffect, useState } from "react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { api } from "@/lib/api-client"; import { getReverseProxyApi } from "@/lib/api-helpers"; type ConnectionInfoCellProps = { serverId: string; type: "normal" | "proxy"; }; export function ConnectionInfoCell({ serverId, type }: ConnectionInfoCellProps) { const [connectionInfo, setConnectionInfo] = useState(null); const [loading, setLoading] = useState(true); const [copied, setCopied] = useState(false); useEffect(() => { const fetchConnectionInfo = async () => { try { const reverseProxyApi = getReverseProxyApi(); const endpoint = type === "normal" ? api.api.servers({ id: serverId })["connection-info"] : reverseProxyApi({ id: serverId })["connection-info"]; const res = await endpoint.get(); if (res.data) { setConnectionInfo(res.data as ConnectionInfo); } } catch (_error) { } finally { setLoading(false); } }; fetchConnectionInfo(); }, [serverId, type]); const handleCopy = async () => { if (connectionInfo?.connectionString) { await navigator.clipboard.writeText(connectionInfo.connectionString); setCopied(true); setTimeout(() => setCopied(false), 2000); } }; if (loading) { return Loading...; } if (!connectionInfo) { return N/A; } return (
{connectionInfo.type} {connectionInfo.connectionString && (
{connectionInfo.connectionString}

{copied ? "Copied!" : "Copy to clipboard"}

)} {connectionInfo.note && (

{connectionInfo.note}

)}
); }