"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { LoaderIcon, Mail, MapPin, MessagesSquare, Phone } from "lucide-react"; import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { z } from "zod"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Field, FieldError, FieldGroup, FieldLabel, } from "@/components/ui/field"; import { Input } from "@/components/ui/input"; import { Separator } from "@/components/ui/separator"; import { Textarea } from "@/components/ui/textarea"; import { cn } from "@/lib/utils"; interface ContactInfo { icon: React.ReactNode; title: string; description: string; value: string; href: string; badge?: string; } const contactInfo: ContactInfo[] = [ { icon: , title: "ایمیل", description: "پاسخ فروش در روزهای کاری، معمولاً کمتر از ۲۴ ساعت", value: "hello@company.com", href: "mailto:hello@company.com", badge: "پیشنهادی", }, { icon: , title: "چت زنده", description: "پشتیبانی محصول برای سؤالهای فوری درباره سامانه مدیریت ارتباط با مشتری.", value: "شروع گفتگو", href: "#", badge: "آنلاین", }, { icon: , title: "تلفن", description: "مشاوره فروش، دوشنبه تا جمعه ۹ تا ۱۸", value: "۲۱-۱۲۳۴۵۶۷۸", href: "tel:+982112345678", }, { icon: , title: "دفتر", description: "جلسه معرفی محصول را با هماهنگی قبلی برگزار کنید.", value: "تهران، خیابان ولیعصر", href: "#", }, ]; const contactFormSchema = z.object({ firstName: z.string().min(1, "نام را وارد کنید"), lastName: z.string().min(1, "نام خانوادگی را وارد کنید"), email: z .string() .min(1, "ایمیل را وارد کنید") .email("ایمیل واردشده معتبر نیست"), company: z.string().optional(), message: z.string().min(1, "پیام را وارد کنید"), // @ts-ignore agreeToTerms: z.literal(true, { errorMap: () => ({ message: "برای ادامه، شرایط استفاده را بپذیرید." }), }), }); type ContactFormData = z.infer; interface Contact6Props { className?: string; onSubmit?: (data: ContactFormData) => Promise; } const Contact6 = ({ className, onSubmit }: Contact6Props) => { const [isSubmitted, setIsSubmitted] = useState(false); const [showSuccess, setShowSuccess] = useState(false); const form = useForm({ resolver: zodResolver(contactFormSchema), mode: "onSubmit", reValidateMode: "onSubmit", defaultValues: { firstName: "", lastName: "", email: "", company: "", 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 ( با تیم سامانه مدیریت ارتباط با مشتری در ارتباط باشید برای دمو، پشتیبانی یا انتخاب پلن فروش از یکی از راههای زیر اقدام کنید. کارشناس مربوط در کوتاهترین زمان پیگیری میکند. {contactInfo.map((info, index) => ( {info.icon} {info.title} {info.description} {info.value} ))} درخواست خود را ارسال کنید فرم را پر کنید تا کارشناس فروش در کوتاهترین زمان پاسخ دهد. {isSubmitted && ( پیام شما ثبت شد. بهزودی پیگیری میکنیم. )} ( نام{" "} * {fieldState.invalid && ( )} )} /> ( نام خانوادگی{" "} * {fieldState.invalid && ( )} )} /> ( ایمیل{" "} * {fieldState.invalid && ( )} )} /> ( شرکت )} /> ( پیام * {fieldState.invalid && ( )} )} /> ( موافقم با{" "} شرایط استفاده {" "} و{" "} حریم خصوصی {fieldState.invalid && ( )} )} /> {form.formState.errors.root && ( {form.formState.errors.root.message} )} {form.formState.isSubmitting ? ( <> در حال ارسال... > ) : ( "ارسال درخواست" )} ساعات پاسخگویی دوشنبه تا جمعه ۹:۰۰ - ۱۸:۰۰ شنبه ۱۰:۰۰ - ۱۶:۰۰ یکشنبه تعطیل راههای تماس ایمیل فروش hello@company.com تلفن ۲۱-۱۲۳۴۵۶۷۸ آدرس تهران، خیابان ولیعصر ); }; export { Contact6 };
برای دمو، پشتیبانی یا انتخاب پلن فروش از یکی از راههای زیر اقدام کنید. کارشناس مربوط در کوتاهترین زمان پیگیری میکند.
{info.description}
فرم را پر کنید تا کارشناس فروش در کوتاهترین زمان پاسخ دهد.
پیام شما ثبت شد. بهزودی پیگیری میکنیم.
{form.formState.errors.root.message}