"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Building, ChevronLeft, LoaderIcon, Mail, Phone } from "lucide-react"; import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { Field, FieldError, FieldGroup, FieldLabel, } from "@/components/ui/field"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { cn } from "@/lib/utils"; const contactMethods = [ { icon: Mail, title: "ایمیل", description: "برای درخواست دمو، مشاوره پلن یا پشتیبانی CRM ایمیل بزنید. در روزهای کاری معمولاً کمتر از ۲۴ ساعت پاسخ میدهیم.", contact: "hello@relative.io", ltr: true, }, { icon: Phone, title: "تلفن", description: "ترجیح میدهید تلفنی صحبت کنید؟ کارشناس فروش در روزهای کاری از ۹ تا ۱۷ پاسخگوست.", contact: "۲۱-۱۲۳۴۵۶۷۸", ltr: true, }, { icon: Building, title: "دفتر", description: "جلسه معرفی محصول را با هماهنگی قبلی در دفتر تهران برگزار کنید.", contact: ( مسیریابی ), ltr: false, }, ]; const contactFormSchema = z.object({ name: z.string().min(1, "نام را وارد کنید"), email: z .string() .min(1, "ایمیل را وارد کنید") .email("ایمیل واردشده معتبر نیست"), message: z.string().min(1, "پیام را وارد کنید"), // @ts-ignore agreeToTerms: z.literal(true, { errorMap: () => ({ message: "برای ادامه، شرایط استفاده را بپذیرید." }), }), }); type ContactFormData = z.infer; interface Contact9Props { className?: string; onSubmit?: (data: ContactFormData) => Promise; } const Contact9 = ({ className, onSubmit }: Contact9Props) => { const [isSubmitted, setIsSubmitted] = useState(false); const [showSuccess, setShowSuccess] = useState(false); const form = useForm({ resolver: zodResolver(contactFormSchema), mode: "onSubmit", reValidateMode: "onSubmit", defaultValues: { name: "", email: "", message: "", agreeToTerms: undefined, }, }); const handleFormSubmit = async (data: ContactFormData) => { try { if (onSubmit) { await onSubmit(data); } else { console.log("Form submitted:", data); await new Promise((resolve) => setTimeout(resolve, 1000)); } setIsSubmitted(true); setShowSuccess(true); form.reset(); setTimeout(() => setShowSuccess(false), 4500); setTimeout(() => setIsSubmitted(false), 5000); } catch { form.setError("root", { message: "ارسال درخواست ناموفق بود. دوباره تلاش کنید.", }); } }; return ( تیم فروش درخواست دمو یا مشاوره درباره پلن CRM، استقرار یا پشتیبانی سؤال دارید؟ فرم را پر کنید تا کارشناس فروش پاسخ دهد. {isSubmitted && ( پیام شما ثبت شد. کارشناس فروش در اولین فرصت پیگیری میکند. )} ( نام و نام خانوادگی * {fieldState.invalid && ( )} )} /> ( ایمیل * {fieldState.invalid && ( )} )} /> ( پیام * {fieldState.invalid && ( )} )} /> ( موافقم با{" "} شرایط استفاده {fieldState.invalid && ( )} )} /> {form.formState.errors.root && ( {form.formState.errors.root.message} )} {form.formState.isSubmitting ? ( <> در حال ارسال... > ) : ( "ارسال درخواست" )} {contactMethods.map((method, index) => ( {method.title} {method.description} {method.ltr ? ( {method.contact} ) : ( method.contact )} ))} ); }; export { Contact9 };
درباره پلن CRM، استقرار یا پشتیبانی سؤال دارید؟ فرم را پر کنید تا کارشناس فروش پاسخ دهد.
پیام شما ثبت شد. کارشناس فروش در اولین فرصت پیگیری میکند.
{form.formState.errors.root.message}
{method.description}