feat: manage event detail fallback copy via payload
This commit is contained in:
@@ -184,6 +184,21 @@ export const Events: CollectionConfig = {
|
|||||||
{ name: 'url', type: 'text', defaultValue: eventDetailContent.heroBackLink.url },
|
{ name: 'url', type: 'text', defaultValue: eventDetailContent.heroBackLink.url },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'fallbackEvent',
|
||||||
|
label: 'Missing event field fallbacks',
|
||||||
|
type: 'group',
|
||||||
|
fields: [
|
||||||
|
{ name: 'title', type: 'text', defaultValue: eventDetailContent.fallbackEvent.title },
|
||||||
|
{ name: 'date', type: 'text', defaultValue: eventDetailContent.fallbackEvent.date },
|
||||||
|
{ name: 'time', type: 'text', defaultValue: eventDetailContent.fallbackEvent.time },
|
||||||
|
{ name: 'location', type: 'text', defaultValue: eventDetailContent.fallbackEvent.location },
|
||||||
|
{ name: 'venue', type: 'text', defaultValue: eventDetailContent.fallbackEvent.venue },
|
||||||
|
{ name: 'category', type: 'text', defaultValue: eventDetailContent.fallbackEvent.category },
|
||||||
|
{ name: 'status', type: 'text', defaultValue: eventDetailContent.fallbackEvent.status },
|
||||||
|
{ name: 'longDescription', type: 'textarea', defaultValue: eventDetailContent.fallbackEvent.longDescription },
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'sections',
|
name: 'sections',
|
||||||
label: 'Section labels and CTAs',
|
label: 'Section labels and CTAs',
|
||||||
|
|||||||
@@ -2913,6 +2913,16 @@ export interface Event {
|
|||||||
label?: string | null;
|
label?: string | null;
|
||||||
url?: string | null;
|
url?: string | null;
|
||||||
};
|
};
|
||||||
|
fallbackEvent?: {
|
||||||
|
title?: string | null;
|
||||||
|
date?: string | null;
|
||||||
|
time?: string | null;
|
||||||
|
location?: string | null;
|
||||||
|
venue?: string | null;
|
||||||
|
category?: string | null;
|
||||||
|
status?: string | null;
|
||||||
|
longDescription?: string | null;
|
||||||
|
};
|
||||||
sections?: {
|
sections?: {
|
||||||
aboutEyebrow?: string | null;
|
aboutEyebrow?: string | null;
|
||||||
factsEyebrow?: string | null;
|
factsEyebrow?: string | null;
|
||||||
@@ -5150,6 +5160,18 @@ export interface EventsSelect<T extends boolean = true> {
|
|||||||
label?: T;
|
label?: T;
|
||||||
url?: T;
|
url?: T;
|
||||||
};
|
};
|
||||||
|
fallbackEvent?:
|
||||||
|
| T
|
||||||
|
| {
|
||||||
|
title?: T;
|
||||||
|
date?: T;
|
||||||
|
time?: T;
|
||||||
|
location?: T;
|
||||||
|
venue?: T;
|
||||||
|
category?: T;
|
||||||
|
status?: T;
|
||||||
|
longDescription?: T;
|
||||||
|
};
|
||||||
sections?:
|
sections?:
|
||||||
| T
|
| T
|
||||||
| {
|
| {
|
||||||
|
|||||||
@@ -27,6 +27,16 @@ export const eventDetailContent = {
|
|||||||
label: 'Alle Events',
|
label: 'Alle Events',
|
||||||
url: '/presse',
|
url: '/presse',
|
||||||
},
|
},
|
||||||
|
fallbackEvent: {
|
||||||
|
title: 'Event',
|
||||||
|
date: 'Termin folgt',
|
||||||
|
time: 'Uhrzeit folgt',
|
||||||
|
location: 'Bayern',
|
||||||
|
venue: 'Ort folgt',
|
||||||
|
category: 'Event',
|
||||||
|
status: 'geplant',
|
||||||
|
longDescription: 'Dieses Event wird aus Payload CMS geladen.',
|
||||||
|
},
|
||||||
sections: {
|
sections: {
|
||||||
aboutEyebrow: 'Über die Veranstaltung',
|
aboutEyebrow: 'Über die Veranstaltung',
|
||||||
factsEyebrow: 'Eckdaten',
|
factsEyebrow: 'Eckdaten',
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ const getDetailPage = (value: unknown): EventDetailCms => {
|
|||||||
updateStyles: asStyleMap(detail.updateStyles, eventDetailContent.updateStyles),
|
updateStyles: asStyleMap(detail.updateStyles, eventDetailContent.updateStyles),
|
||||||
statusStyles: asStyleMap(detail.statusStyles, eventDetailContent.statusStyles),
|
statusStyles: asStyleMap(detail.statusStyles, eventDetailContent.statusStyles),
|
||||||
heroBackLink: { ...eventDetailContent.heroBackLink, ...detail.heroBackLink },
|
heroBackLink: { ...eventDetailContent.heroBackLink, ...detail.heroBackLink },
|
||||||
|
fallbackEvent: { ...eventDetailContent.fallbackEvent, ...detail.fallbackEvent },
|
||||||
sections: { ...eventDetailContent.sections, ...detail.sections },
|
sections: { ...eventDetailContent.sections, ...detail.sections },
|
||||||
updatesCopy: { ...eventDetailContent.updates, ...(detail.updatesCopy || detail.updates) },
|
updatesCopy: { ...eventDetailContent.updates, ...(detail.updatesCopy || detail.updates) },
|
||||||
bottomCta: { ...eventDetailContent.bottomCta, ...detail.bottomCta },
|
bottomCta: { ...eventDetailContent.bottomCta, ...detail.bottomCta },
|
||||||
@@ -98,20 +99,21 @@ export default function EventDetail() {
|
|||||||
const route = useCmsRoute()
|
const route = useCmsRoute()
|
||||||
const cmsEvent = route?.collection === 'events' ? route.doc : undefined
|
const cmsEvent = route?.collection === 'events' ? route.doc : undefined
|
||||||
const cmsDetail = getDetailPage(cmsEvent?.detailPage)
|
const cmsDetail = getDetailPage(cmsEvent?.detailPage)
|
||||||
|
const fallbackEvent = cmsDetail.fallbackEvent || eventDetailContent.fallbackEvent
|
||||||
const eventFallbackImage = mediaUrl(cmsDetail.fallbackImage, `/images/${eventDetailContent.fallbackImageFilename}`)
|
const eventFallbackImage = mediaUrl(cmsDetail.fallbackImage, `/images/${eventDetailContent.fallbackImageFilename}`)
|
||||||
const event = getEventBySlug(slug ?? '') || (cmsEvent ? {
|
const event = getEventBySlug(slug ?? '') || (cmsEvent ? {
|
||||||
slug: String(cmsEvent.slug || slug),
|
slug: String(cmsEvent.slug || slug),
|
||||||
title: String(cmsEvent.title || 'Event'),
|
title: String(cmsEvent.title || fallbackEvent.title || eventDetailContent.fallbackEvent.title),
|
||||||
subtitle: String(cmsEvent.subtitle || cmsEvent.description || cmsEvent.meta?.description || ''),
|
subtitle: String(cmsEvent.subtitle || cmsEvent.description || cmsEvent.meta?.description || ''),
|
||||||
date: String(cmsEvent.date || 'Termin folgt'),
|
date: String(cmsEvent.date || fallbackEvent.date || eventDetailContent.fallbackEvent.date),
|
||||||
time: String(cmsEvent.time || 'Uhrzeit folgt'),
|
time: String(cmsEvent.time || fallbackEvent.time || eventDetailContent.fallbackEvent.time),
|
||||||
location: String(cmsEvent.location || 'Bayern'),
|
location: String(cmsEvent.location || fallbackEvent.location || eventDetailContent.fallbackEvent.location),
|
||||||
venue: String(cmsEvent.venue || 'Ort folgt'),
|
venue: String(cmsEvent.venue || fallbackEvent.venue || eventDetailContent.fallbackEvent.venue),
|
||||||
category: String(cmsEvent.category || 'Event'),
|
category: String(cmsEvent.category || fallbackEvent.category || eventDetailContent.fallbackEvent.category),
|
||||||
status: (cmsEvent.status as BmpEvent['status']) || 'geplant',
|
status: ((cmsEvent.status || fallbackEvent.status || eventDetailContent.fallbackEvent.status) as BmpEvent['status']),
|
||||||
img: docImageUrl(cmsEvent, eventFallbackImage),
|
img: docImageUrl(cmsEvent, eventFallbackImage),
|
||||||
description: String(cmsEvent.description || cmsEvent.meta?.description || ''),
|
description: String(cmsEvent.description || cmsEvent.meta?.description || ''),
|
||||||
longDescription: String(cmsEvent.longDescription || cmsEvent.description || cmsEvent.meta?.description || 'Dieses Event wird aus Payload CMS geladen.'),
|
longDescription: String(cmsEvent.longDescription || cmsEvent.description || cmsEvent.meta?.description || fallbackEvent.longDescription || eventDetailContent.fallbackEvent.longDescription),
|
||||||
eckdaten: Array.isArray(cmsEvent.eckdaten) ? cmsEvent.eckdaten as EventEckdaten[] : [],
|
eckdaten: Array.isArray(cmsEvent.eckdaten) ? cmsEvent.eckdaten as EventEckdaten[] : [],
|
||||||
updates: Array.isArray(cmsEvent.updates) ? cmsEvent.updates as EventUpdate[] : [],
|
updates: Array.isArray(cmsEvent.updates) ? cmsEvent.updates as EventUpdate[] : [],
|
||||||
detailPage: cmsEvent.detailPage,
|
detailPage: cmsEvent.detailPage,
|
||||||
|
|||||||
Reference in New Issue
Block a user