import { useParams, Link } from 'react-router'; import { useQuery } from '@tanstack/react-query'; import { Server, Network, Activity, Plus } from 'lucide-react'; import { api } from '@/lib/api'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { statusBadgeVariant } from '@/lib/utils'; interface ServerSummary { id: string; uuid: string; name: string; status: string; gameName: string; nodeName: string; port: number; } interface PaginatedResponse { data: T[]; meta: { total: number; page: number; perPage: number; totalPages: number }; } export function DashboardPage() { const { orgId } = useParams(); const { data: serversData } = useQuery({ queryKey: ['servers', orgId], queryFn: () => api.get>(`/organizations/${orgId}/servers`), }); const { data: nodesData } = useQuery({ queryKey: ['nodes', orgId], queryFn: () => api.get>(`/organizations/${orgId}/nodes`), }); const servers = serversData?.data ?? []; const running = servers.filter((s) => s.status === 'running').length; const totalNodes = nodesData?.meta?.total ?? nodesData?.data?.length ?? 0; return (

Dashboard

Total Servers
{servers.length}
Running
{running}
Nodes
{totalNodes}

Servers

{servers.length === 0 ? (

No servers yet

) : (
{servers.map((server) => (

{server.name}

{server.gameName} · {server.nodeName} · :{server.port}

{server.status}
))}
)}
); }