'use client' import Link from 'next/link' import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Label } from "@/components/ui/label" import { useEffect, useState } from 'react' import { Button } from '@/components/ui/button' import LSearchCustomers from '../components/l-search-customers' import axiosInstance from '@/axios/axiosInstance' import { useQuery, useQueryClient } from '@tanstack/react-query' import * as z from "zod" import { useRouter } from 'next/navigation' import { IoMdArrowRoundBack } from "react-icons/io"; import { AlertCircle } from "lucide-react" import { Alert, AlertDescription, AlertTitle, } from "@/components/ui/alert" import { ILead } from './interfaces' import { toast } from "sonner" import { FaFaceGrinStars, FaFaceMeh, FaFaceFrown, FaFaceSmile } from "react-icons/fa6"; import { TbTargetArrow } from "react-icons/tb"; import { HiBellAlert } from "react-icons/hi2"; import { useForm, Controller, SubmitHandler } from "react-hook-form" import LeadComment from '../components/lead-comment' import LeadCommentAdd from '../components/lead-comment-add' import RemainderModal from '../../components/ui/reminder-modal' interface IFormValues { lead_types: [ { id: Number, title: String }, ], product_types: [ { id: Number, name: String }, ], lead_source: [ { id: Number, title: String }, ], lead_event: [ { id: Number, name: string, message: string send_sms: boolean }, ] lead_steps: [ { id: Number, name: String }, ], shahr: [ { id: Number, name: String is_ostan: boolean, "ostan": any }, ] } interface IShahr { id: Number, name: String is_ostan: boolean, "ostan": any } interface IFormNewLead { title: string, customer_id: number, mobile1: number, mobile2: number, phone: number, lead_event_id: number, desc: string, product_type_id: number , lead_type_id: number, lead_source_id: number, ostan: number, city_id: number, lead_step_id: number, } const formSchema = z.object({ title: z.string().min(5, { message: "Username must be at least 2 characters.", }), }) const LeadIdPage = ({params}:{params: {id: number} })=>{ const [remainderModalHidden, setRemainderModalHidden] = useState(true) const [cSearchOpen, setCSearchOpen] = useState(false) const [statusButtonState, setStatusButtonState] = useState<{su:boolean, fa:boolean, un: boolean}>({su:false, fa:false, un: false}) const [customerName, setCustomerName] = useState() const [formValues, setFormValues] = useState(null) const [shahr, setShahr] = useState([]) const [leadForm, setLeadForm] = useState(null) const [submitButtonEnable, setSubmitButtonEnable] = useState(true) const [lead, setLead] = useState(null) const router = useRouter() useEffect(()=>{ setValue('title', lead?.title) setValue('customer_id', lead?.customer.id) setCustomerName(lead?.customer.name_family) setValue('desc', lead?.desc) setValue('product_type_id', lead?.product_type.id) setValue('lead_type_id', lead?.type.id) setValue('lead_source_id', lead?.source.id) setValue('ostan', lead?.city.ostan.id) setValue('lead_step_id', lead?.step.id) setValue('mobile1', lead?.mobile1) setValue('mobile2', lead?.mobile2) setValue('phone', lead?.phone) setValue('lead_event_id', lead?.lead_event) changeOstanById(lead?.city.ostan.id, lead?.city.id) }, [lead, ]) const { register, control, handleSubmit, watch, setValue, formState: { errors }, } = useForm({ shouldFocusError: false, }) const onSubmit: SubmitHandler = async (data) => { await setSubmitButtonEnable(false) try { const result = await axiosInstance.patch(`lead/${lead?.id}/edit/`, data) if(result.status == 201){ setSubmitButtonEnable(true) queryClient.invalidateQueries({ queryKey: ['form-items-and-lead'] }) toast("ویرایش شد", { description: "سرنخ با موفقیت ویرایش شد", action: { label: "بستن", onClick: () => console.log("Undo"), }, }) } else { alert("خطا در ثبت") } } catch (error) { console.log(error) } } const onChangeStatus = async (status:string)=>{ const editStatusRs = await axiosInstance.patch(`lead/${lead?.id}/edit-status/`, { status: status }) if(editStatusRs.status=201){ queryClient.invalidateQueries({ queryKey: ['form-items-and-lead'] }); setTimeout(()=>{ alert("تغییر وضعیت سرنخ انجام شد"); }, 400) } } const changeOstanById = async (ostan_id:any, city_id:any)=>{ const shahrha = await formValues?.shahr if(shahrha){ const shahrF = await shahrha.filter((item, key)=>{ return item.ostan == ostan_id }) setShahr(shahrF) setTimeout(()=>{ setValue('city_id', city_id) }, 500) } } const changeOstan = async (e:any)=>{ const ostan_id = await e.target.value const shahrha = await formValues?.shahr const shahr = await shahrha.filter((item, key)=>{ return item.ostan == ostan_id }) setShahr(shahr) setLeadForm((prevLeadForm)=>({ ...prevLeadForm!, ostan: ostan_id })); console.log(leadForm) } const queryClient = useQueryClient() const result = useQuery({ queryKey:['form-items-and-lead'], queryFn: async ()=>{ const leadData = await axiosInstance.get(`lead/${params.id}/`) const formData = await axiosInstance.get('lead/form-items/') return { leadData: leadData, formData: formData } },onSuccess: async (result)=>{ await setFormValues(result.formData.data) await setLead(result.leadData.data) },}) if (result.isLoading){ return (

درحال دریافت اطلاعات...

) } return (
وضعیت سرنخ: {lead?.status == 'SU' ? : null} {lead?.status == 'FA' ? : null} {lead?.status == 'UN' || null ? : null}
{onChangeStatus('SU')}} className='' onMouseLeave={()=>{ setStatusButtonState( (prev) => ({...prev, su:false}) ) }} onMouseOver={()=>{ setStatusButtonState( (prev) => ({...prev, su:true}) ) }}>
{onChangeStatus("FA")}} className='' onMouseLeave={()=>{ setStatusButtonState( (prev) => ({...prev, fa:false}) ) }} onMouseOver={()=>{ setStatusButtonState( (prev) => ({...prev, fa:true}) ) }}>
{onChangeStatus("UN")}} className='' onMouseLeave={()=>{ setStatusButtonState( (prev) => ({...prev, un:false}) ) }} onMouseOver={()=>{ setStatusButtonState( (prev) => ({...prev, un:true}) ) }}>
{setRemainderModalHidden(false)}} className='bg-gray-100 border pr-3 pl-3 pt-2 pb-2 rounded-md text-white'>
{router.back()}} className="bg-gray-100 border pr-3 pl-3 pt-2 pb-2 rounded-md text-white">
( <> setCSearchOpen(!cSearchOpen)} ref={ref} > {customerName ? customerName : 'برای انتخاب مشتری کلیک کنید'}
)} />