"use client"; import { useState, useEffect, useCallback } from "react"; import { createPortal } from "react-dom"; import { X, Instagram, Send, CheckCircle } from "lucide-react"; interface MasterClassSignupModalProps { open: boolean; onClose: () => void; masterClassTitle: string; successMessage?: string; } export function MasterClassSignupModal({ open, onClose, masterClassTitle, successMessage, }: MasterClassSignupModalProps) { const [name, setName] = useState(""); const [instagram, setInstagram] = useState(""); const [telegram, setTelegram] = useState(""); const [submitting, setSubmitting] = useState(false); const [submitted, setSubmitted] = useState(false); const [error, setError] = useState(""); // Close on Escape useEffect(() => { if (!open) return; function onKey(e: KeyboardEvent) { if (e.key === "Escape") onClose(); } document.addEventListener("keydown", onKey); return () => document.removeEventListener("keydown", onKey); }, [open, onClose]); // Lock body scroll useEffect(() => { if (open) { document.body.style.overflow = "hidden"; } else { document.body.style.overflow = ""; } return () => { document.body.style.overflow = ""; }; }, [open]); const handleSubmit = useCallback( async (e: React.FormEvent) => { e.preventDefault(); setError(""); setSubmitting(true); try { const res = await fetch("/api/master-class-register", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ masterClassTitle, name: name.trim(), instagram: `@${instagram.trim()}`, telegram: telegram.trim() ? `@${telegram.trim()}` : undefined, }), }); if (!res.ok) { const data = await res.json(); throw new Error(data.error || "Ошибка регистрации"); } setSubmitted(true); } catch (err) { setError(err instanceof Error ? err.message : "Ошибка регистрации"); } finally { setSubmitting(false); } }, [masterClassTitle, name, instagram, telegram] ); const handleClose = useCallback(() => { onClose(); setTimeout(() => { setName(""); setInstagram(""); setTelegram(""); setSubmitted(false); setError(""); }, 300); }, [onClose]); if (!open) return null; return createPortal(
{successMessage || "Вы записаны! Мы свяжемся с вами"}
{masterClassTitle}