'use client'; import { Suspense, useMemo } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import { useQuery } from '@tanstack/react-query'; import { MessageSquareText } from 'lucide-react'; import { EmptyStateWithBorder } from '@/components/layout/empty'; import { ErrorInline } from '@/components/layout/error'; import { LoadingStateWithBorder } from '@/components/layout/loading'; import { useAuth } from '@/components/providers/auth-provider'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { OptionService } from '@/lib/services/openflare'; import { ErrorPageTab } from './components/error-page-tab'; import { OfflinePageTab } from './components/offline-page-tab'; import { useTranslations } from 'next-intl'; import { OPTIONS_QUERY_KEY, optionsToMap } from './components/shared'; type ResponseTab = 'error' | 'offline'; function resolveTab(tabParam: string | null): ResponseTab { if (tabParam === 'offline') { return 'offline'; } return 'error'; } function ResponsesPageContent() { const t = useTranslations('responses'); const { user, loading: authLoading } = useAuth(); const router = useRouter(); const searchParams = useSearchParams(); const activeTab = resolveTab(searchParams.get('tab')); const handleTabChange = (value: string) => { const nextTab = resolveTab(value); const params = new URLSearchParams(searchParams.toString()); if (nextTab === 'error') { params.delete('tab'); } else { params.set('tab', nextTab); } const query = params.toString(); router.replace(query ? `/responses?${query}` : '/responses', { scroll: false, }); }; const optionsQuery = useQuery({ queryKey: OPTIONS_QUERY_KEY, queryFn: () => OptionService.list(), enabled: !!user?.is_admin, }); const optionMap = useMemo( () => optionsToMap(optionsQuery.data ?? []), [optionsQuery.data], ); if (authLoading) { return (
); } if (!user?.is_admin) { return (
); } if (optionsQuery.isLoading) { return (
); } if (optionsQuery.isError) { return (
void optionsQuery.refetch()} />
); } if (!optionsQuery.data) return null; return (

{t('title')}

{t('subtitle')}

{t('errorPage')} {t('offlinePage')}
); } export default function ResponsesPage() { const t = useTranslations('responses'); return ( } > ); }