"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Check, ChevronLeft, ChevronRight, LoaderIcon } 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 { Field, FieldError, FieldGroup, FieldLabel, } from "@/components/ui/field"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Textarea } from "@/components/ui/textarea"; import { cn } from "@/lib/utils"; const contactFormSchema = z.object({ inquiryType: z.string().min(1, "نوع درخواست را انتخاب کنید"), budget: z.string().optional(), name: z.string().min(1, "نام الزامی است"), email: z .string() .min(1, "ایمیل الزامی است") .email("آدرس ایمیل نامعتبر است"), company: z.string().optional(), phone: z.string().optional(), message: z.string().min(10, "جزئیات بیشتری درباره نیاز فروش بنویسید"), }); type ContactFormData = z.infer; const steps = [ { id: 1, name: "نوع درخواست" }, { id: 2, name: "اطلاعات تماس" }, { id: 3, name: "نیاز فروش" }, ]; interface Contact28Props { title?: string; subtitle?: string; className?: string; onSubmit?: (data: ContactFormData) => Promise; } const Contact28 = ({ title = "راه‌اندازی سامانه مدیریت ارتباط با مشتری فروش", subtitle = "اندازه تیم فروش، نیاز سامانه مدیریت ارتباط با مشتری و اهداف درآمدی را بگویید؛ کارشناس فروش حداکثر تا یک روز کاری با شما تماس می‌گیرد.", className, onSubmit, }: Contact28Props) => { const [currentStep, setCurrentStep] = useState(1); const [isSubmitted, setIsSubmitted] = useState(false); const form = useForm({ resolver: zodResolver(contactFormSchema), mode: "onSubmit", reValidateMode: "onSubmit", defaultValues: { inquiryType: "", budget: "", name: "", email: "", company: "", phone: "", message: "", }, }); const validateStep = async (step: number): Promise => { let fieldsToValidate: (keyof ContactFormData)[] = []; if (step === 1) { fieldsToValidate = ["inquiryType"]; } else if (step === 2) { fieldsToValidate = ["name", "email"]; } else if (step === 3) { fieldsToValidate = ["message"]; } const result = await form.trigger(fieldsToValidate); return result; }; const nextStep = async () => { const isValid = await validateStep(currentStep); if (isValid && currentStep < 3) { setCurrentStep(currentStep + 1); } }; const prevStep = () => { if (currentStep > 1) { setCurrentStep(currentStep - 1); } }; 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); } catch { form.setError("root", { message: "مشکلی پیش آمد. لطفاً دوباره تلاش کنید.", }); } }; if (isSubmitted) { return (

درخواست سامانه مدیریت ارتباط با مشتری ثبت شد

تیم فروش درخواست شما را دریافت کرد و حداکثر تا یک روز کاری برای هماهنگی دمو یا مشاوره تماس می‌گیرد.

); } return (

{title}

{subtitle}

{steps.map((step) => (
step.id ? "text-muted-foreground" : "text-muted-foreground/50", )} >
step.id ? "bg-primary text-primary-foreground" : currentStep === step.id ? "bg-primary text-primary-foreground" : "bg-muted text-muted-foreground", )} > {currentStep > step.id ? ( ) : ( step.id.toLocaleString("fa-IR") )}
{step.name}
))}

{steps[currentStep - 1].name}

{currentStep === 1 && ( ( نوع درخواست{" "} * {fieldState.invalid && ( )} )} /> ( بودجه پیاده‌سازی )} /> )} {currentStep === 2 && (
( نام و نام خانوادگی * {fieldState.invalid && ( )} )} /> ( ایمیل کاری * {fieldState.invalid && ( )} )} />
( نام شرکت یا سازمان )} /> ( شماره تلفن )} />
)} {currentStep === 3 && ( ( نیاز تیم فروش را شرح دهید{" "} *