'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 (