Link Impressum's seller identity to company-settings, not hand-typed prose
"Angaben zum Anbieter"/"Umsatzsteuer"/"Handelsregister"/"Geschäftsführung"/ "Verantwortlich für den Inhalt" used to be hand-typed into the Impressum's richText content (seed-legal-pages.ts) with no connection to the same seller data the invoice PDFs and every email footer already pull from company-settings — an admin updating one had no reason to remember the other existed, and the old text was already stale in one concrete way: it never showed Handelsregister/Geschäftsführung at all even though company-settings has modeled both since the legal-form work shipped. Now rendered by a new AnbieterAngaben component, straight from getCompanySettings(), positioned above the CMS richText (which keeps only genuinely editorial content: Kontakt, Haftung für Inhalte, Haftung für Links, Urheberrecht). Same "structural/brand elements in code, only pull the actual numbers/copy that need single-sourcing from data" pattern this page's own Nachhaltigkeit sidebar card already used. RichText.tsx's headingId() is now exported so the new block's headings get the exact same id-assignment logic as CMS-driven ones, keeping the SectionTOC sidebar's ids in sync with both sources. /impressum moves from static to dynamic rendering (it now fetches live company-settings data, cache: "no-store") — an acceptable tradeoff for a legally-required page to never show stale seller info. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -35,7 +35,13 @@ function plainText(node: LexicalNode): string {
|
||||
// "section-1" id from the leading number — immune to copy edits changing
|
||||
// the heading text later, unlike a text-derived slug. Anything else
|
||||
// (headings with no leading number) falls back to a plain slugify.
|
||||
function headingId(text: string): string {
|
||||
// Exported — the Impressum page renders some of its own headings outside
|
||||
// this CMS-driven richText (the "Angaben zum Anbieter"/"Umsatzsteuer"/
|
||||
// "Verantwortlich für den Inhalt" sections come straight from
|
||||
// company-settings, not the richText field, see app/impressum/page.tsx)
|
||||
// and needs the exact same id-assignment logic so its SectionTOC entries
|
||||
// actually match the ids those headings render with.
|
||||
export function headingId(text: string): string {
|
||||
const numbered = text.match(/^(\d+)\./);
|
||||
if (numbered) return `section-${numbered[1]}`;
|
||||
return text
|
||||
|
||||
Reference in New Issue
Block a user