chore: migrate pages and media to be cms controlled.
This commit is contained in:
@@ -3,6 +3,8 @@ import { Link } from '@/spa/router';
|
||||
import { Calendar, MapPin, Download, ArrowRight, FileText } from 'lucide-react';
|
||||
import MunichSkylineBg from '@/spa/components/ui/munich-skyline-bg';
|
||||
import { useIsMobile } from '@/spa/hooks/useIsMobile';
|
||||
import { useCmsCollection } from '@/spa/cmsRoute';
|
||||
import { docImageUrl } from '@/spa/cmsMediaField';
|
||||
|
||||
const NAVY = '#111D55';
|
||||
const GOLD = '#EFBF04';
|
||||
@@ -183,6 +185,41 @@ function NewsCard({ item, idx, isMobile }: { item: typeof news[0]; idx: number;
|
||||
|
||||
const Press: React.FC = () => {
|
||||
const isMobile = useIsMobile();
|
||||
const cmsEvents = useCmsCollection('events');
|
||||
const cmsPosts = useCmsCollection('posts');
|
||||
const combinedEvents = React.useMemo(() => {
|
||||
const existing = new Set(events.map((event) => event.slug.split('/').pop()));
|
||||
return [
|
||||
...events,
|
||||
...cmsEvents
|
||||
.filter((event) => event.slug && !existing.has(String(event.slug)))
|
||||
.map((event) => ({
|
||||
title: String(event.title || 'Event'),
|
||||
date: String(event.date || 'Termin folgt'),
|
||||
location: String(event.location || event.venue || 'Bayern'),
|
||||
cat: String(event.category || 'Event'),
|
||||
status: String(event.status || 'Geplant'),
|
||||
img: docImageUrl(event, '/images/buehne-moderatoren.jpg'),
|
||||
desc: String(event.description || event.meta?.description || ''),
|
||||
slug: String(event.spaPath || `/presse/events/${event.slug}`),
|
||||
})),
|
||||
];
|
||||
}, [cmsEvents]);
|
||||
const combinedNews = React.useMemo(() => {
|
||||
const existing = new Set(news.map((item) => item.slug.split('/').pop()));
|
||||
return [
|
||||
...news,
|
||||
...cmsPosts
|
||||
.filter((post) => post.slug && !existing.has(String(post.slug)))
|
||||
.map((post) => ({
|
||||
title: String(post.title || 'Presse'),
|
||||
excerpt: String(post.excerpt || post.meta?.description || ''),
|
||||
cat: String(post.cat || 'Presse'),
|
||||
img: docImageUrl(post, '/images/gala-saal-overview.jpg', 'heroImage'),
|
||||
slug: String(post.spaPath || `/presse/blog/${post.slug}`),
|
||||
})),
|
||||
];
|
||||
}, [cmsPosts]);
|
||||
const [hoveredEvent, setHoveredEvent] = useState<number | null>(null);
|
||||
const [dlHovered, setDlHovered] = useState(false);
|
||||
const [submitHovered, setSubmitHovered] = useState(false);
|
||||
@@ -375,7 +412,7 @@ const Press: React.FC = () => {
|
||||
</div>
|
||||
|
||||
{/* Event rows */}
|
||||
{events.map((event, idx) => (
|
||||
{combinedEvents.map((event, idx) => (
|
||||
<div
|
||||
key={idx}
|
||||
onMouseEnter={() => setHoveredEvent(idx)}
|
||||
@@ -477,7 +514,7 @@ const Press: React.FC = () => {
|
||||
|
||||
{/* 3-column news grid */}
|
||||
<div style={{ display: 'grid', gridTemplateColumns: isMobile ? '1fr' : 'repeat(3, 1fr)' }}>
|
||||
{news.map((item, idx) => (
|
||||
{combinedNews.map((item, idx) => (
|
||||
<NewsCard key={idx} item={item} idx={idx} isMobile={isMobile} />
|
||||
))}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user