'use client'; import Link from 'next/link'; import { useMemo } from 'react'; import { useSearchParams } from 'next/navigation'; import { useQuery } from '@tanstack/react-query'; import { ArrowLeft, Server } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { EmptyStateWithBorder } from '@/components/layout/empty'; import { ErrorInline } from '@/components/layout/error'; import { LoadingStateWithBorder } from '@/components/layout/loading'; import { NodeService } from '@/lib/services/openflare'; import { EdgeNodeDetail } from '../components/edge-node-detail'; import { RelayNodeDetail } from '../components/relay-node-detail'; import { TunnelNodeDetail } from '../components/tunnel-node-detail'; import { getErrorMessage } from '../components/node-utils'; const nodesQueryKey = ['openflare', 'nodes']; export function NodeDetailPageClient() { const searchParams = useSearchParams(); const nodeId = searchParams.get('id')?.trim() ?? ''; const nodesQuery = useQuery({ queryKey: nodesQueryKey, queryFn: () => NodeService.listNodes(), refetchInterval: 5000, }); const node = useMemo(() => { if (!nodeId) return null; return ( (nodesQuery.data ?? []).find((item) => String(item.id) === nodeId) ?? null ); }, [nodeId, nodesQuery.data]); if (!nodeId) { return (