diff --git a/src/components/Advanced.tsx b/src/components/Advanced.tsx index 583a85d..dafda2d 100644 --- a/src/components/Advanced.tsx +++ b/src/components/Advanced.tsx @@ -1,4 +1,5 @@ import { useState } from "react"; +import { useParams } from "react-router-dom"; import { Card, CardContent, @@ -8,12 +9,42 @@ import { } from "./ui/card"; import { ConfigEditor } from "./ConfigEditor"; import { Button, Input, Label } from "./ui"; -import { Check, Edit2, HelpCircle, X } from "lucide-react"; +import { Check, Edit2, HelpCircle, X, ExternalLink, Copy } from "lucide-react"; +import { useDashboardToken } from "../services/api/hooks/useUtilities"; +import { useInstance } from "../services/api"; export function Advanced() { + const { instanceId } = useParams<{ instanceId: string }>(); + const [copied, setCopied] = useState(false); + const { data: instance } = useInstance(instanceId || ''); + const { data: dashboardToken, isLoading: tokenLoading } = useDashboardToken(); + const [upstreamValue, setUpstreamValue] = useState("https://mywildcloud.org"); const [editingUpstream, setEditingUpstream] = useState(false); const [tempUpstream, setTempUpstream] = useState(upstreamValue); + + const handleCopyToken = async () => { + if (dashboardToken?.token) { + try { + await navigator.clipboard.writeText(dashboardToken.token); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } catch (err) { + console.error('Failed to copy token:', err); + } + } + }; + + const handleOpenDashboard = () => { + // Build dashboard URL from instance config + // Dashboard is available at: https://dashboard.{cloud.internalDomain} + const internalDomain = instance?.config?.cloud?.internalDomain; + const dashboardUrl = internalDomain + ? `https://dashboard.${internalDomain}` + : 'https://dashboard.internal.wild.cloud'; + window.open(dashboardUrl, '_blank'); + }; + const handleUpstreamEdit = () => { setTempUpstream(upstreamValue); setEditingUpstream(true); @@ -51,6 +82,47 @@ export function Advanced() { + + {/* Kubernetes Dashboard Access */} + + + Kubernetes Dashboard + + Access the Kubernetes dashboard for advanced cluster management + + + +
+ + +
+ {instance?.config?.cloud?.internalDomain && ( +

+ Dashboard URL: https://dashboard.{instance.config.cloud.internalDomain} +

+ )} +
+
+ {/* Upstream Section */}
diff --git a/src/services/api/utilities.ts b/src/services/api/utilities.ts index f6db57e..e748415 100644 --- a/src/services/api/utilities.ts +++ b/src/services/api/utilities.ts @@ -20,7 +20,8 @@ export const utilitiesApi = { }, async getDashboardToken(): Promise<{ token: string }> { - return apiClient.get('/api/v1/utilities/dashboard/token'); + const response = await apiClient.get<{ data: { token: string }; success: boolean }>('/api/v1/utilities/dashboard/token'); + return response.data; }, async getNodeIPs(): Promise<{ ips: string[] }> {