'use client'; import Link from 'next/link'; import { useMemo } from 'react'; import { useQuery } from '@tanstack/react-query'; import { ArrowLeft, Pencil, X } from 'lucide-react'; import { useAuth } from '@/components/providers/auth-provider'; 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 { OptionService } from '@/lib/services/openflare'; import { effectiveOfflinePageHTML } from '@/lib/openflare/offline-page-templates'; import { useTranslations } from 'next-intl'; import { mapOptionsToOfflineFields, OPTIONS_QUERY_KEY, optionsToMap, } from '../../components/shared'; export default function OfflinePagePreviewPage() { const t = useTranslations('responses'); const { user, loading: authLoading } = useAuth(); const optionsQuery = useQuery({ queryKey: OPTIONS_QUERY_KEY, queryFn: () => OptionService.list(), enabled: !!user?.is_admin, }); const html = useMemo(() => { if (!optionsQuery.data) return ''; const rawHtml = mapOptionsToOfflineFields( optionsToMap(optionsQuery.data), ).html; return effectiveOfflinePageHTML(rawHtml); }, [optionsQuery.data]); if (authLoading) { return (
{t('offlinePreview')}
{t('fullscreen')}