import { useState } from "react" import { AnimatePresence, motion } from "motion/react" import { Check, Loader2 } from "lucide-react" import { Button } from "@/components/ui/button" import { Input, Textarea } from "@/components/ui/input" import { Section } from "@/components/ui/section" import { SectionHeading } from "@/components/ui/section-heading" import { Typography } from "@/components/ui/typography" import { EASE_OUT_EXPO } from "@/lib/motion" import { submitLead } from "@/lib/lead" const EMPTY_FORM = { companyName: '', contactName: '', email: '', phone: '', message: '', } /* * 상담 신청 폼 — 고관여 경로. 저관여 리드 캡처는 데모 요청 모달이 맡는다. * * 예전에는 백엔드가 없어서 1.2초 뒤 성공 화면만 띄웠다. 화면은 "접수되었습니다"인데 * 영업이 받을 리드는 존재하지 않았고, 아무도 그 사실을 몰랐다. 지금은 데모 요청과 * 같은 서버리스 함수(api/lead.ts)로 보내고, 서버가 리드를 확보했을 때만 성공을 띄운다. */ export function Contact() { const [formData, setFormData] = useState(EMPTY_FORM) const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle') const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!formData.companyName || !formData.contactName || !formData.email || !formData.phone) { return } setStatus('submitting') const result = await submitLead({ source: 'contact', name: formData.contactName, email: formData.email, company: formData.companyName, phone: formData.phone, message: formData.message, }) setStatus(result.ok ? 'success' : 'error') } const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target setFormData((prev) => ({ ...prev, [name]: value })) } const submitting = status === 'submitting' return (
{status !== 'success' ? (