feat: manage generic page fallback copy via payload
This commit is contained in:
@@ -6,6 +6,7 @@ import Layout from '@/spa/components/layout/Layout'
|
||||
import ScrollToTop from '@/spa/components/layout/ScrollToTop'
|
||||
import { defaultHeaderData, type SpaFooterData, type SpaHeaderData } from '@/spa/cmsNavigation'
|
||||
import { CmsRouteProvider, type CmsRouteData } from '@/spa/cmsRoute'
|
||||
import type { SpaSiteSettingsData } from '@/spa/siteSettings'
|
||||
import About from '@/spa/pages/About'
|
||||
import BlogDetail from '@/spa/pages/BlogDetail'
|
||||
import Contact from '@/spa/pages/Contact'
|
||||
@@ -58,11 +59,13 @@ export default function NextApp({
|
||||
header,
|
||||
footer,
|
||||
cmsRoute,
|
||||
siteSettings,
|
||||
}: {
|
||||
pathname: string
|
||||
header?: SpaHeaderData
|
||||
footer?: SpaFooterData
|
||||
cmsRoute?: CmsRouteData
|
||||
siteSettings?: SpaSiteSettingsData
|
||||
}) {
|
||||
const [loading, setLoading] = useState(true)
|
||||
const headerData = header || defaultHeaderData
|
||||
@@ -92,7 +95,7 @@ export default function NextApp({
|
||||
|
||||
return (
|
||||
<>
|
||||
<CmsRouteProvider value={cmsRoute}>
|
||||
<CmsRouteProvider value={cmsRoute ? { ...cmsRoute, siteSettings } : undefined}>
|
||||
<ScrollToTop />
|
||||
<Layout header={header} footer={footer}>
|
||||
{page}
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
import React, { createContext, useContext } from 'react'
|
||||
|
||||
import type { SpaSiteSettingsData } from '@/spa/siteSettings'
|
||||
|
||||
export type CmsRouteCollection = 'pages' | 'posts' | 'events' | 'preistraeger'
|
||||
|
||||
export type CmsRouteDoc = {
|
||||
@@ -21,6 +23,7 @@ export type CmsRouteData = {
|
||||
collection: CmsRouteCollection
|
||||
doc: CmsRouteDoc
|
||||
lists?: Partial<Record<CmsRouteCollection, CmsRouteDoc[]>>
|
||||
siteSettings?: SpaSiteSettingsData
|
||||
}
|
||||
|
||||
const CmsRouteContext = createContext<CmsRouteData | undefined>(undefined)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import React from 'react'
|
||||
|
||||
import { useCmsRoute } from '@/spa/cmsRoute'
|
||||
import { defaultSiteSettings } from '@/spa/siteSettings'
|
||||
|
||||
const NAVY = '#111D55'
|
||||
const GOLD = '#EFBF04'
|
||||
@@ -13,14 +14,15 @@ const FB = '"Inter", sans-serif'
|
||||
export default function CmsGenericPage() {
|
||||
const route = useCmsRoute()
|
||||
const doc = route?.doc
|
||||
const title = doc?.title || doc?.meta?.title || 'Seite'
|
||||
const siteSettings = route?.siteSettings || defaultSiteSettings
|
||||
const title = doc?.title || doc?.meta?.title || siteSettings.genericPageTitle
|
||||
const description = doc?.description || doc?.meta?.description
|
||||
|
||||
return (
|
||||
<main style={{ minHeight: '70vh', background: CREAM, padding: '140px 24px 80px' }}>
|
||||
<div style={{ maxWidth: 960, margin: '0 auto' }}>
|
||||
<div style={{ color: GOLD, fontFamily: FF, fontWeight: 800, fontSize: 12, letterSpacing: '0.18em', textTransform: 'uppercase', marginBottom: 20 }}>
|
||||
{route?.collection || 'CMS'}
|
||||
{route?.collection || siteSettings.genericPageKicker}
|
||||
</div>
|
||||
<h1 style={{ color: NAVY, fontFamily: FF, fontSize: 'clamp(2.25rem, 7vw, 5rem)', lineHeight: 1, fontWeight: 900, textTransform: 'uppercase', margin: 0 }}>
|
||||
{title}
|
||||
@@ -31,7 +33,7 @@ export default function CmsGenericPage() {
|
||||
</p>
|
||||
) : (
|
||||
<p style={{ color: 'rgba(58,58,58,0.65)', fontFamily: FB, fontSize: 18, lineHeight: 1.7, marginTop: 28, maxWidth: 760 }}>
|
||||
Diese Route wird aus Payload CMS geladen. Ergänze Inhalte im entsprechenden Collection-Dokument.
|
||||
{siteSettings.genericPageDescription}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
18
src/spa/siteSettings.ts
Normal file
18
src/spa/siteSettings.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
export type SpaSiteSettingsData = {
|
||||
genericPageKicker: string
|
||||
genericPageTitle: string
|
||||
genericPageDescription: string
|
||||
}
|
||||
|
||||
export const defaultSiteSettings: SpaSiteSettingsData = {
|
||||
genericPageKicker: 'CMS',
|
||||
genericPageTitle: 'Seite',
|
||||
genericPageDescription: 'Diese Route wird aus Payload CMS geladen. Ergänze Inhalte im entsprechenden Collection-Dokument.',
|
||||
}
|
||||
|
||||
export function normalizeSiteSettings(settings?: Partial<SpaSiteSettingsData> | null): SpaSiteSettingsData {
|
||||
return {
|
||||
...defaultSiteSettings,
|
||||
...settings,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user