"use client"; import { useState, type FormEvent } from "react"; import { useRouter } from "next/navigation"; const fieldClass = "w-full rounded-2xl border border-anouma-taupe/30 bg-white px-5 py-3.5 text-base text-anouma-plum placeholder:text-anouma-plum/50 focus:border-anouma-mauve-dark focus:outline-none"; export const MEETING_SESSION_KEY = "anouma-meeting-session"; export type StoredMeetingSession = { token: string; participantId: string; role: "host" | "participant"; name: string; eventTitle: string; eventSlug: string; iceServers: RTCIceServer[]; }; export function JoinForm({ slug }: { slug: string }) { const router = useRouter(); const [name, setName] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); async function handleSubmit(e: FormEvent) { e.preventDefault(); setError(null); setLoading(true); try { const res = await fetch(`/api/meetings/${slug}/join`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name, password }), credentials: "include", }); const data = await res.json(); if (!res.ok) { setError(data.error || "Beitritt leider nicht möglich."); setLoading(false); return; } const session: StoredMeetingSession = { token: data.token, participantId: data.participantId, role: data.role, name, eventTitle: data.eventTitle, eventSlug: slug, iceServers: data.iceServers, }; sessionStorage.setItem(MEETING_SESSION_KEY, JSON.stringify(session)); router.push(`/termine/${slug}/call`); } catch { setError("Verbindung fehlgeschlagen. Bitte versuche es erneut."); setLoading(false); } } return (
setName(e.target.value)} placeholder="Name eingeben" className={fieldClass} autoComplete="name" />
setPassword(e.target.value)} placeholder="Passwort eingeben" className={fieldClass} autoComplete="off" />
{error && (

{error}

)}
); }