import React from 'react'; import { Button } from '@/components/ui/button'; import { useNavigate, useSearchParams } from 'react-router-dom'; import { createInviteLink, getEvent, getEventStats, toggleEvent } from '../api'; import { isAuthError } from '../auth/tokens'; export default function EventDetailPage() { const [sp] = useSearchParams(); const id = Number(sp.get('id')); const nav = useNavigate(); const [ev, setEv] = React.useState(null); const [stats, setStats] = React.useState<{ total: number; featured: number; likes: number } | null>(null); const [invite, setInvite] = React.useState(null); const load = React.useCallback(async () => { try { const event = await getEvent(id); setEv(event); setStats(await getEventStats(id)); } catch (error) { if (!isAuthError(error)) { console.error(error); } } }, [id]); React.useEffect(() => { load(); }, [load]); async function onToggle() { try { const isActive = await toggleEvent(id); setEv((previous: any) => ({ ...(previous || {}), is_active: isActive })); } catch (error) { if (!isAuthError(error)) { console.error(error); } } } async function onInvite() { try { const link = await createInviteLink(id); setInvite(link); try { await navigator.clipboard.writeText(link); } catch { // clipboard may be unavailable } } catch (error) { if (!isAuthError(error)) { console.error(error); } } } if (!ev) { return
Lade ...
; } const joinLink = `${window.location.origin}/e/${ev.slug}`; const qrUrl = `/admin/qr?data=${encodeURIComponent(joinLink)}`; return (

Event: {renderName(ev.name)}

Slug: {ev.slug}
Datum: {ev.date ?? '-'}
Status: {ev.is_active ? 'Aktiv' : 'Inaktiv'}
Join-Link
QR
QR
{invite && (
Erzeugt und kopiert: {invite}
)}
); } function StatCard({ label, value }: { label: string; value: number }) { return (
{value}
{label}
); } function renderName(name: any): string { if (typeof name === 'string') return name; if (name && (name.de || name.en)) return name.de || name.en; return JSON.stringify(name); }