"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: "برای درخواست دمو، مشاوره پلن یا پشتیبانی سامانه مدیریت ارتباط با مشتری ایمیل بزنید. در روزهای کاری معمولاً کمتر از ۲۴ ساعت پاسخ میدهیم.", 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 ( تیم فروش درخواست دمو یا مشاوره درباره پلن سامانه مدیریت ارتباط با مشتری، استقرار یا پشتیبانی سؤال دارید؟ فرم را پر کنید تا کارشناس فروش پاسخ دهد. {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 };
درباره پلن سامانه مدیریت ارتباط با مشتری، استقرار یا پشتیبانی سؤال دارید؟ فرم را پر کنید تا کارشناس فروش پاسخ دهد.
پیام شما ثبت شد. کارشناس فروش در اولین فرصت پیگیری میکند.
{form.formState.errors.root.message}
{method.description}