"use client"; import { useState, FormEvent } from "react"; import { Loader2, CheckCircle2, AlertCircle } from "lucide-react"; type Status = "idle" | "loading" | "success" | "error"; export default function ContactForm() { const [status, setStatus] = useState("idle"); const [errorMessage, setErrorMessage] = useState(""); async function handleSubmit(e: FormEvent) { e.preventDefault(); setStatus("loading"); setErrorMessage(""); const form = e.currentTarget; const data = new FormData(form); // Honeypot: если поле заполнено — это бот, тихо считаем успехом. if (data.get("website")) { setStatus("success"); form.reset(); return; } const payload = { name: String(data.get("name") || ""), contact: String(data.get("contact") || ""), message: String(data.get("message") || ""), }; try { const res = await fetch("/api/contact", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }); const result = await res.json(); if (!res.ok || !result.ok) { throw new Error(result.error || "Не удалось отправить сообщение"); } setStatus("success"); form.reset(); } catch (err) { setStatus("error"); setErrorMessage( err instanceof Error ? err.message : "Не удалось отправить сообщение" ); } } if (status === "success") { return (

Сообщение отправлено

Мы получили заявку и ответим в ближайшее время.

); } return (
{/* Honeypot — скрыто от людей, видно ботам */}