'use client'; import Link from 'next/link'; import { Suspense } from 'react'; import { useQuery } from '@tanstack/react-query'; import { useRouter, useSearchParams } from 'next/navigation'; import { ArrowLeft, FileText } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { EmptyStateWithBorder } from '@/components/layout/empty'; import { ErrorInline } from '@/components/layout/error'; import { LoadingStateWithBorder } from '@/components/layout/loading'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Skeleton } from '@/components/ui/skeleton'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { PagesService } from '@/lib/services/openflare'; import { projectQueryKey } from '../components/pages-utils'; import { DeploymentsTab } from './tabs/deployments-tab'; import { SettingsTab } from './tabs/settings-tab'; type PagesDetailTab = 'deployments' | 'settings'; function resolveTab(value: string | null): PagesDetailTab { if (value === 'settings') return 'settings'; return 'deployments'; } function PagesDetailPageFallback() { return (
); } function PagesDetailRoute() { const t = useTranslations('pages'); const searchParams = useSearchParams(); const router = useRouter(); const rawProjectId = searchParams.get('id')?.trim() ?? ''; const projectId = Number(rawProjectId); const validProjectId = rawProjectId !== '' && Number.isInteger(projectId) && projectId > 0; const tab = resolveTab(searchParams.get('tab')); const projectQuery = useQuery({ queryKey: projectQueryKey(projectId), queryFn: () => PagesService.getProject(projectId), enabled: validProjectId, }); const handleTabChange = (value: string) => { const next = resolveTab(value); const params = new URLSearchParams(); params.set('id', String(projectId)); if (next === 'settings') { params.set('tab', 'settings'); } router.replace(`/pages/detail?${params.toString()}`); }; if (!validProjectId) { return (
); } if (projectQuery.isLoading) { return (
); } if (projectQuery.isError) { return (
void projectQuery.refetch()} />
); } const project = projectQuery.data; if (!project) { return (
); } return (

{project.name}

{project.enabled ? t('enabled') : t('disabled')}

{project.slug} ยท{' '} {t('detail.deploymentCount', { count: project.deployment_count })}

{t('detail.tabDeployments')} {t('detail.tabSettings')}
); } export default function PagesDetailPage() { return ( }> ); }