import React, { useEffect, useState } from 'react'; import { Page } from './_util'; import { useNavigate } from 'react-router-dom'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Html5Qrcode } from 'html5-qrcode'; import { readGuestName } from '../context/GuestIdentityContext'; export default function LandingPage() { const nav = useNavigate(); const [slug, setSlug] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [isScanning, setIsScanning] = useState(false); const [scanner, setScanner] = useState(null); async function join(eventSlug?: string) { const s = (eventSlug ?? slug).trim(); if (!s) return; setLoading(true); setError(null); try { const res = await fetch(`/api/v1/events/${encodeURIComponent(s)}`); if (!res.ok) { setError('Event nicht gefunden oder geschlossen.'); return; } const storedName = readGuestName(s); if (!storedName) { nav(`/setup/${encodeURIComponent(s)}`); } else { nav(`/e/${encodeURIComponent(s)}`); } } catch (e) { console.error('Join request failed', e); setError('Netzwerkfehler. Bitte spaeter erneut versuchen.'); } finally { setLoading(false); } } const qrConfig = { fps: 10, qrbox: { width: 250, height: 250 } } as const; async function startScanner() { if (scanner) { try { await scanner.start({ facingMode: 'environment' }, qrConfig, onScanSuccess, () => undefined); setIsScanning(true); } catch (err) { console.error('Scanner start failed', err); setError('Kamera-Zugriff fehlgeschlagen. Bitte erlaube den Zugriff und versuche es erneut.'); } return; } try { const newScanner = new Html5Qrcode('qr-reader'); setScanner(newScanner); await newScanner.start({ facingMode: 'environment' }, qrConfig, onScanSuccess, () => undefined); setIsScanning(true); } catch (err) { console.error('Scanner initialisation failed', err); setError('Kamera-Zugriff fehlgeschlagen. Bitte erlaube den Zugriff und versuche es erneut.'); } } function stopScanner() { if (!scanner) { setIsScanning(false); return; } scanner .stop() .then(() => { setIsScanning(false); }) .catch((err) => console.error('Scanner stop failed', err)); } async function onScanSuccess(decodedText: string) { const value = decodedText.trim(); if (!value) return; await join(value); stopScanner(); } useEffect(() => () => { if (scanner) { scanner.stop().catch(() => undefined); } }, [scanner]); return ( {error && ( {error} )}

Willkommen bei der Fotobox!

Dein Schluessel zu unvergesslichen Momenten.

Event beitreten Scanne den QR-Code oder gib den Code manuell ein.
Oder manuell eingeben
setSlug(event.target.value)} placeholder="Event-Code eingeben" disabled={loading} />
); }