diff --git a/src/app/(public)/events/[slug]/page.tsx b/src/app/(public)/events/[slug]/page.tsx index 14dc81a..0c5f606 100644 --- a/src/app/(public)/events/[slug]/page.tsx +++ b/src/app/(public)/events/[slug]/page.tsx @@ -9,6 +9,9 @@ import JsonLd from '@/components/JsonLd' import MarkdownContent from '@/components/MarkdownContent' import ArtistCard from '@/components/artists/ArtistCard' import EventTimetable from '@/components/events/EventTimetable' +import NoirDonateSection from '@/components/noir/sections/NoirDonateSection' +import { getHomepageSections } from '@/lib/sections' +import type { NoirDonateContent } from '@/lib/noir-home-defaults' export const dynamic = 'force-dynamic' @@ -23,10 +26,6 @@ function formatRange(start: Date, end: Date | null): string { return `${dayFmt.format(start)} – ${fmt.format(end)}` } -function formatPrice(price: number | null, currency: string): string { - if (price === null) return 'auf Anfrage' - return new Intl.NumberFormat('de-DE', { style: 'currency', currency }).format(price) -} export async function generateMetadata({ params }: Props): Promise { const { slug } = await params @@ -44,6 +43,10 @@ export default async function EventDetailPage({ params }: Props) { const event = await getEvent(slug) if (!event) notFound() + // Reuse the homepage's "Spenden & Tickets" content so the section matches 1:1. + const sections = await getHomepageSections() + const donateContent = (sections.find((s) => s.type === 'noir_donate')?.content ?? null) as NoirDonateContent | null + const lineup = event.appearances.filter((a) => a.artist) const seenArtists = new Set() const uniqueLineup = lineup.filter((a) => { @@ -53,6 +56,7 @@ export default async function EventDetailPage({ params }: Props) { }) return ( + <>
)} - {/* Preise */} - {event.priceTiers.length > 0 && ( -
-

Preise

-
- {event.priceTiers.map((t) => ( -
-
-

{t.name}

- {formatPrice(t.price, t.currency)} -
- {t.description &&

{t.description}

} - {t.isSoldOut && Ausverkauft} - {t.buyUrl && !t.isSoldOut && ( - - Ticket kaufen - - )} -
- ))} -
-
- )} - {/* Ticket-CTA */} {event.ticketUrl && (
@@ -146,5 +126,11 @@ export default async function EventDetailPage({ params }: Props) {
)}
+ + {/* Tickets & Spenden – identisch zur Startseite (ersetzt die Preisliste) */} +
+ +
+ ) } diff --git a/src/components/admin/MarkdownEditorField.tsx b/src/components/admin/MarkdownEditorField.tsx index b537873..00531a3 100644 --- a/src/components/admin/MarkdownEditorField.tsx +++ b/src/components/admin/MarkdownEditorField.tsx @@ -70,7 +70,7 @@ export default function MarkdownEditorField({ onClick={() => switchMode(mode)} className={`px-2.5 py-1 text-xs font-medium rounded-full transition-colors ${ editorMode === mode - ? 'bg-white text-brand-text shadow-sm' + ? 'bg-white text-brand-text shadow-sm dark:bg-slate-600' : 'text-brand-text-muted hover:text-brand-text' }`} > diff --git a/src/components/admin/editor/SlashCommandMenu.tsx b/src/components/admin/editor/SlashCommandMenu.tsx index 6b12c8d..2a4c65a 100644 --- a/src/components/admin/editor/SlashCommandMenu.tsx +++ b/src/components/admin/editor/SlashCommandMenu.tsx @@ -183,10 +183,10 @@ export function SlashCommandMenu({ onInsert, onClose, position }: SlashCommandMe return (
-
+
setSearch(e.target.value)} onKeyDown={handleKeyDown} placeholder="Block suchen..." - className="w-full text-sm border border-gray-200 rounded-lg px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-brand-accent/30" + className="w-full text-sm border border-gray-200 dark:border-slate-600 bg-white dark:bg-slate-900 text-brand-text dark:text-slate-100 placeholder:text-brand-text-light dark:placeholder:text-slate-400 rounded-lg px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-brand-accent/30" />
diff --git a/src/components/layout/HeaderClient.tsx b/src/components/layout/HeaderClient.tsx index 4bde5ff..de3ccf1 100644 --- a/src/components/layout/HeaderClient.tsx +++ b/src/components/layout/HeaderClient.tsx @@ -194,8 +194,8 @@ export default function HeaderClient({ navigation, settings }: HeaderClientProps {/* Desktop CTA + dark mode */}
- - Spenden + + Tickets
@@ -356,11 +356,11 @@ export default function HeaderClient({ navigation, settings }: HeaderClientProps {/* CTA button */}
setMobileOverlayOpen(false)} > - Spenden + Tickets