e50d43ea44
Company data now has its own Payload admin group and a live in-browser PDF preview (react-pdf's PDFViewer) instead of just a plain settings form. Invoice header is a brand-colored rule instead of a filled band, and the footer is now pinned to the page bottom instead of following content flow.
35 lines
1.3 KiB
TypeScript
35 lines
1.3 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { draftMode } from "next/headers";
|
|
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) —
|
|
// not a page a real visitor would ever land on. Unlike email-templates
|
|
// there's no draft/published distinction here (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() {
|
|
await draftMode();
|
|
const initialSettings = (await getCompanySettings()) ?? FALLBACK;
|
|
return <LiveCompanySettingsPreviewClient initialSettings={initialSettings} />;
|
|
}
|