"use client"; import { useState } from "react"; import { CheckCircle } from "lucide-react"; import { Drawer } from "@/components/ui/Drawer"; import { useSubmitPilotRequest, type PilotRequestPayload, } from "@/lib/api/landing"; // ── Types ────────────────────────────────────────────────────────────────── interface Props { open: boolean; onClose: () => void; } interface FormState { name: string; phone: string; email: string; company: string; message: string; } // ── Helpers ──────────────────────────────────────────────────────────────── /** Derives a human-readable tracking ID from the UUID string returned by backend. * Example: "7f3a8c2e-..." → "GD-7F3A8C2E" */ function deriveTrackingId(id: string): string { return "GD-" + id.replace(/-/g, "").slice(0, 8).toUpperCase(); } // ── Component ────────────────────────────────────────────────────────────── export function PilotRequestModal({ open, onClose }: Props) { const [form, setForm] = useState({ name: "", phone: "", email: "", company: "", message: "", }); const [emailError, setEmailError] = useState(""); const [trackingId, setTrackingId] = useState(null); const mutation = useSubmitPilotRequest(); const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; function handleChange( e: React.ChangeEvent, ) { const { name, value } = e.target; setForm((prev) => ({ ...prev, [name]: value })); if (name === "email") { setEmailError(value && !EMAIL_RE.test(value) ? "Некорректный email" : ""); } } function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!form.name.trim()) return; if (form.email && !EMAIL_RE.test(form.email)) { setEmailError("Некорректный email"); return; } const payload: PilotRequestPayload = { name: form.name.trim(), source: "landing", ...(form.phone.trim() ? { phone: form.phone.trim() } : {}), ...(form.email.trim() ? { email: form.email.trim() } : {}), ...(form.company.trim() ? { company: form.company.trim() } : {}), ...(form.message.trim() ? { message: form.message.trim().slice(0, 2000) } : {}), }; mutation.mutate(payload, { onSuccess: (data) => { setTrackingId(deriveTrackingId(data.id)); }, }); } function handleClose() { setForm({ name: "", phone: "", email: "", company: "", message: "" }); setEmailError(""); setTrackingId(null); mutation.reset(); onClose(); } return ( {/* Header */}

Запросить пилотный доступ

{/* Success state */} {trackingId !== null ? (

Заявка принята

Мы свяжемся с вами в течение 1–2 рабочих дней. Номер заявки:{" "} {trackingId}

) : ( /* Form */
{/* Name */}
{/* Company */}
{/* Phone */}
{/* Email */}
{emailError ? ( {emailError} ) : null}
{/* Message */}