'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 { previewOriginErrorPageHTML } from '@/lib/openflare/default-origin-error-page-html'; import { OptionService } from '@/lib/services/openflare'; import { useTranslations } from 'next-intl'; import { mapOptionsToErrorFields, OPTIONS_QUERY_KEY, optionsToMap, } from '../../components/shared'; export default function ErrorPagePreviewPage() { 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 ''; return mapOptionsToErrorFields(optionsToMap(optionsQuery.data)).html; }, [optionsQuery.data]); const previewSrcDoc = useMemo(() => previewOriginErrorPageHTML(html), [html]); if (authLoading) { return (
{t('errorPreview')}
{'{{status}}'}→502 · {'{{host}}'}→example.com · {t('fullscreen')}