'use client'; import { useEffect, useState, useRef } from 'react'; import { Send, CheckCircle2, X } from 'lucide-react'; import { validateContact } from '../../lib/meshkee/contact'; export default function ContactForm(){ const [busy,setBusy]=useState(false);const [errors,setErrors]=useState>({});const [message,setMessage]=useState('');const [success,setSuccess]=useState(false);const [toast,setToast]=useState(false);const locked=useRef(false); useEffect(()=>{if(!toast)return;const timer=setTimeout(()=>setToast(false),6500);return()=>clearTimeout(timer)},[toast]); async function submit(event:React.FormEvent){ event.preventDefault();if(locked.current)return; const form=event.currentTarget;const {data,errors:validation}=validateContact(Object.fromEntries(new FormData(form))); setErrors(validation);setMessage('');setSuccess(false);setToast(false); if(Object.keys(validation).length){(form.elements.namedItem(Object.keys(validation)[0]) as HTMLElement)?.focus();return} locked.current=true;setBusy(true); try{const response=await fetch('/api/contact',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(data),signal:AbortSignal.timeout(30000)});const result=await response.json();if(!response.ok){setErrors(result.errors||{});throw new Error(result.message||'ارسال پیام ممکن نشد.')};setMessage(result.message);setSuccess(true);setToast(true);form.reset();} catch(error){setMessage(error instanceof Error&&error.name!=='TimeoutError'?error.message:'ارتباط برقرار نشد. لطفاً دوباره تلاش کنید.');} finally{locked.current=false;setBusy(false)} } return
SEND A MESSAGE

برای ما بنویسید

پرسش یا درخواست خود را با کارشناسان ما در میان بگذارید.

{[{name:'name',label:'نام و نام خانوادگی',required:true,max:120},{name:'title',label:'موضوع پیام',required:true,max:200},{name:'email',label:'پست الکترونیکی',type:'email',max:254},{name:'cellNumber',label:'شماره تماس',type:'tel',max:25}].map(field=>)}