feat: manage event detail fallback media via payload
This commit is contained in:
@@ -4,7 +4,7 @@ import { motion } from 'framer-motion'
|
||||
import { Calendar, MapPin, Clock, Bell, BellOff, ArrowLeft, ChevronRight } from 'lucide-react'
|
||||
import { getEventBySlug, EventUpdate, type BmpEvent, type EventEckdaten } from '@/spa/data/events'
|
||||
import { useCmsRoute } from '@/spa/cmsRoute'
|
||||
import { docImageUrl } from '@/spa/cmsMediaField'
|
||||
import { docImageUrl, mediaUrl } from '@/spa/cmsMediaField'
|
||||
import { useIsMobile } from '@/spa/hooks/useIsMobile'
|
||||
import { eventDetailContent } from '@/spa/eventDetailContent'
|
||||
import Image from '@/spa/components/ui/UnoptimizedImage'
|
||||
@@ -14,6 +14,7 @@ const GOLD = '#EFBF04'
|
||||
const CREAM = '#EFE5E3'
|
||||
|
||||
type EventDetailCms = Omit<Partial<typeof eventDetailContent>, 'updateStyles' | 'statusStyles'> & {
|
||||
fallbackImage?: unknown
|
||||
updateStyles?: unknown
|
||||
statusStyles?: unknown
|
||||
updatesCopy?: Partial<typeof eventDetailContent.updates>
|
||||
@@ -96,6 +97,8 @@ export default function EventDetail() {
|
||||
const { slug } = useParams<{ slug: string }>()
|
||||
const route = useCmsRoute()
|
||||
const cmsEvent = route?.collection === 'events' ? route.doc : undefined
|
||||
const cmsDetail = getDetailPage(cmsEvent?.detailPage)
|
||||
const eventFallbackImage = mediaUrl(cmsDetail.fallbackImage, `/images/${eventDetailContent.fallbackImageFilename}`)
|
||||
const event = getEventBySlug(slug ?? '') || (cmsEvent ? {
|
||||
slug: String(cmsEvent.slug || slug),
|
||||
title: String(cmsEvent.title || 'Event'),
|
||||
@@ -106,14 +109,14 @@ export default function EventDetail() {
|
||||
venue: String(cmsEvent.venue || 'Ort folgt'),
|
||||
category: String(cmsEvent.category || 'Event'),
|
||||
status: (cmsEvent.status as BmpEvent['status']) || 'geplant',
|
||||
img: docImageUrl(cmsEvent, '/images/buehne-moderatoren.jpg'),
|
||||
img: docImageUrl(cmsEvent, eventFallbackImage),
|
||||
description: String(cmsEvent.description || cmsEvent.meta?.description || ''),
|
||||
longDescription: String(cmsEvent.longDescription || cmsEvent.description || cmsEvent.meta?.description || 'Dieses Event wird aus Payload CMS geladen.'),
|
||||
eckdaten: Array.isArray(cmsEvent.eckdaten) ? cmsEvent.eckdaten as EventEckdaten[] : [],
|
||||
updates: Array.isArray(cmsEvent.updates) ? cmsEvent.updates as EventUpdate[] : [],
|
||||
detailPage: cmsEvent.detailPage,
|
||||
} as BmpEvent : undefined)
|
||||
const detail = getDetailPage(event && 'detailPage' in event ? event.detailPage : undefined)
|
||||
const detail = getDetailPage(event && 'detailPage' in event ? event.detailPage : cmsDetail)
|
||||
const notFound = detail.notFound || eventDetailContent.notFound
|
||||
const heroBackLink = detail.heroBackLink || eventDetailContent.heroBackLink
|
||||
const sections = detail.sections || eventDetailContent.sections
|
||||
|
||||
Reference in New Issue
Block a user