'use client'; import { useCallback, useEffect, useState } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import { EmptyStateWithBorder } from '@/components/layout/empty'; import { ErrorInline } from '@/components/layout/error'; import { Skeleton } from '@/components/ui/skeleton'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import type { ProxyRouteConfigSection, ProxyRouteItem, } from '@/lib/services/openflare'; import { ProxyRouteService } from '@/lib/services/openflare'; import { useTranslations } from 'next-intl'; import { getProxyRouteConfigSection, getProxyRouteConfigSections, } from '../components/helpers'; import { AuthSection } from './components/auth-section'; import { CacheSection } from './components/cache-section'; import { DomainSection } from './components/domain-section'; import { LimitsSection } from './components/limits-section'; import { ProxySection } from './components/proxy-section'; import { RouteHeader } from './components/route-header'; import { WafSection } from './components/waf-section'; export function ProxyRouteDetailPageClient() { const t = useTranslations('proxyRoutes'); const router = useRouter(); const searchParams = useSearchParams(); const routeId = Number(searchParams.get('id')); const activeSection = getProxyRouteConfigSection(searchParams.get('section')); const hasValidId = Number.isFinite(routeId) && routeId > 0; const [route, setRoute] = useState(null); const [loading, setLoading] = useState(true); const [loadError, setLoadError] = useState(null); const handleSectionChange = useCallback( (section: ProxyRouteConfigSection) => { const params = new URLSearchParams(searchParams.toString()); params.set('section', section); router.replace(`/proxy-routes/detail?${params.toString()}`); }, [router, searchParams], ); const handleRouteUpdate = useCallback((updatedRoute: ProxyRouteItem) => { setRoute(updatedRoute); }, []); const fetchRoute = useCallback(async () => { if (!hasValidId) { setLoading(false); setRoute(null); setLoadError(null); return; } setLoading(true); setLoadError(null); try { const data = await ProxyRouteService.getById(routeId); setRoute(data); } catch (error) { setRoute(null); setLoadError(error instanceof Error ? error.message : t('unknownError')); } finally { setLoading(false); } }, [hasValidId, routeId, t]); useEffect(() => { void fetchRoute(); }, [fetchRoute]); if (!hasValidId) { return (
); } if (loading) { return (
); } if (loadError) { return (
void fetchRoute()} />
); } if (!route) { return (
); } const sectionProps = { route, onRouteUpdate: handleRouteUpdate, }; return (
handleSectionChange(value as ProxyRouteConfigSection) } className='w-full' > {getProxyRouteConfigSections(t).map((section) => ( {section.label} ))}
); }