Skip to content

Commit eae660d

Browse files
Merge pull request #28 from nyxCore-Systems/feat/ui-fixes
fix(ui): dark-mode editor menus, event donate section, nav Tickets button
2 parents 55931ca + 46a9d0c commit eae660d

4 files changed

Lines changed: 22 additions & 36 deletions

File tree

src/app/(public)/events/[slug]/page.tsx

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import JsonLd from '@/components/JsonLd'
99
import MarkdownContent from '@/components/MarkdownContent'
1010
import ArtistCard from '@/components/artists/ArtistCard'
1111
import EventTimetable from '@/components/events/EventTimetable'
12+
import NoirDonateSection from '@/components/noir/sections/NoirDonateSection'
13+
import { getHomepageSections } from '@/lib/sections'
14+
import type { NoirDonateContent } from '@/lib/noir-home-defaults'
1215

1316
export const dynamic = 'force-dynamic'
1417

@@ -23,10 +26,6 @@ function formatRange(start: Date, end: Date | null): string {
2326
return `${dayFmt.format(start)}${fmt.format(end)}`
2427
}
2528

26-
function formatPrice(price: number | null, currency: string): string {
27-
if (price === null) return 'auf Anfrage'
28-
return new Intl.NumberFormat('de-DE', { style: 'currency', currency }).format(price)
29-
}
3029

3130
export async function generateMetadata({ params }: Props): Promise<Metadata> {
3231
const { slug } = await params
@@ -44,6 +43,10 @@ export default async function EventDetailPage({ params }: Props) {
4443
const event = await getEvent(slug)
4544
if (!event) notFound()
4645

46+
// Reuse the homepage's "Spenden & Tickets" content so the section matches 1:1.
47+
const sections = await getHomepageSections()
48+
const donateContent = (sections.find((s) => s.type === 'noir_donate')?.content ?? null) as NoirDonateContent | null
49+
4750
const lineup = event.appearances.filter((a) => a.artist)
4851
const seenArtists = new Set<string>()
4952
const uniqueLineup = lineup.filter((a) => {
@@ -53,6 +56,7 @@ export default async function EventDetailPage({ params }: Props) {
5356
})
5457

5558
return (
59+
<>
5660
<div className="mx-auto max-w-4xl px-4 py-14 sm:px-6 lg:px-8">
5761
<JsonLd
5862
data={buildEventJsonLd({
@@ -113,30 +117,6 @@ export default async function EventDetailPage({ params }: Props) {
113117
</section>
114118
)}
115119

116-
{/* Preise */}
117-
{event.priceTiers.length > 0 && (
118-
<section className="mb-10">
119-
<h2 className="mb-4 font-display text-2xl font-bold text-brand-text">Preise</h2>
120-
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
121-
{event.priceTiers.map((t) => (
122-
<div key={t.id} className="glass-card rounded-section p-5">
123-
<div className="flex items-baseline justify-between gap-2">
124-
<h3 className="font-display text-lg font-bold text-brand-text">{t.name}</h3>
125-
<span className="shrink-0 font-semibold text-brand-accent">{formatPrice(t.price, t.currency)}</span>
126-
</div>
127-
{t.description && <p className="mt-1 text-sm text-brand-text-muted">{t.description}</p>}
128-
{t.isSoldOut && <span className="mt-2 inline-block rounded-pill bg-red-100 px-3 py-0.5 text-xs font-semibold text-red-700">Ausverkauft</span>}
129-
{t.buyUrl && !t.isSoldOut && (
130-
<a href={t.buyUrl} target="_blank" rel="noopener noreferrer nofollow" className="btn-secondary mt-3 inline-block px-4 py-1.5 text-sm">
131-
Ticket kaufen
132-
</a>
133-
)}
134-
</div>
135-
))}
136-
</div>
137-
</section>
138-
)}
139-
140120
{/* Ticket-CTA */}
141121
{event.ticketUrl && (
142122
<section className="text-center">
@@ -146,5 +126,11 @@ export default async function EventDetailPage({ params }: Props) {
146126
</section>
147127
)}
148128
</div>
129+
130+
{/* Tickets & Spenden – identisch zur Startseite (ersetzt die Preisliste) */}
131+
<div className="nh">
132+
<NoirDonateSection content={donateContent} />
133+
</div>
134+
</>
149135
)
150136
}

src/components/admin/MarkdownEditorField.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export default function MarkdownEditorField({
7070
onClick={() => switchMode(mode)}
7171
className={`px-2.5 py-1 text-xs font-medium rounded-full transition-colors ${
7272
editorMode === mode
73-
? 'bg-white text-brand-text shadow-sm'
73+
? 'bg-white text-brand-text shadow-sm dark:bg-slate-600'
7474
: 'text-brand-text-muted hover:text-brand-text'
7575
}`}
7676
>

src/components/admin/editor/SlashCommandMenu.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,18 +183,18 @@ export function SlashCommandMenu({ onInsert, onClose, position }: SlashCommandMe
183183
return (
184184
<div
185185
ref={menuRef}
186-
className="fixed z-50 w-72 max-h-80 bg-white rounded-xl shadow-xl border border-gray-200 overflow-hidden flex flex-col animate-fade-in"
186+
className="fixed z-50 w-72 max-h-80 bg-white dark:bg-slate-800 rounded-xl shadow-xl border border-gray-200 dark:border-slate-600 overflow-hidden flex flex-col animate-fade-in"
187187
style={position ? { top: position.top, left: position.left } : { top: '50%', left: '50%', transform: 'translate(-50%, -50%)' }}
188188
>
189-
<div className="p-2 border-b border-gray-100">
189+
<div className="p-2 border-b border-gray-100 dark:border-slate-700">
190190
<input
191191
ref={inputRef}
192192
type="text"
193193
value={search}
194194
onChange={(e) => setSearch(e.target.value)}
195195
onKeyDown={handleKeyDown}
196196
placeholder="Block suchen..."
197-
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"
197+
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"
198198
/>
199199
</div>
200200
<div className="flex-1 overflow-y-auto p-1">

src/components/layout/HeaderClient.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,8 @@ export default function HeaderClient({ navigation, settings }: HeaderClientProps
194194
{/* Desktop CTA + dark mode */}
195195
<div className="hidden lg:flex items-center gap-3">
196196
<DarkModeToggle />
197-
<Link href="/unterstuetzung" className="btn-primary text-sm px-5 py-2.5">
198-
Spenden
197+
<Link href="/events/e-ventschau-2026#spenden" className="btn-primary text-sm px-5 py-2.5">
198+
Tickets
199199
</Link>
200200
</div>
201201

@@ -356,11 +356,11 @@ export default function HeaderClient({ navigation, settings }: HeaderClientProps
356356
{/* CTA button */}
357357
<div className="pt-6">
358358
<Link
359-
href="/unterstuetzung"
359+
href="/events/e-ventschau-2026#spenden"
360360
className="btn-primary text-base w-full text-center block"
361361
onClick={() => setMobileOverlayOpen(false)}
362362
>
363-
Spenden
363+
Tickets
364364
</Link>
365365
</div>
366366
</div>

0 commit comments

Comments
 (0)