import type { Metadata } from "next"; import { draftMode } from "next/headers"; import { notFound } from "next/navigation"; import { getCompanySettings, type CompanySettings } from "../lib/payload"; import { LiveCompanySettingsPreviewClient } from "./components/LiveCompanySettingsPreviewClient"; export const metadata: Metadata = { title: "Firmendaten-Vorschau", robots: { index: false, follow: false }, }; const FALLBACK: CompanySettings = { sellerName: "", sellerStreet: "", sellerZip: "", sellerCity: "", sellerCountry: "", sellerEmail: "", vatId: "", taxRatePercent: 19, bankDetails: null, }; // Entered exclusively via CompanySettings.ts's admin.livePreview.url (a // Payload-admin-only iframe target, see buildPreviewUrl()/api/preview) — // gated on Draft Mode actually being enabled, unlike email-templates' // preview: this data includes a real bank IBAN/address once filled in, // not just marketing email copy, so this page must not render for an // unauthenticated visitor who happens to find the URL. Unlike // email-templates there's no draft/published distinction in the data // itself (company-settings has no content-versioning concept, it's just // the current row) — the initial fetch is the same live data // getCompanySettings() always returns, useLivePreview() takes over from // there as the admin edits fields. export default async function CompanySettingsPreviewPage() { const draft = await draftMode(); if (!draft.isEnabled) notFound(); const initialSettings = (await getCompanySettings()) ?? FALLBACK; return ; }