import React, { useState, useEffect, useRef, useCallback } from "react"; import axios from "axios"; import { useNavigate } from "react-router-dom"; import { isAutheticated } from "src/auth"; import Modal from "react-bootstrap/Modal"; import Button from "react-bootstrap/Button"; import Form from "react-bootstrap/Form"; import swal from "sweetalert"; import debounce from "lodash.debounce"; const AddSalesCoOrdinator = () => { const navigate = useNavigate(); const token = isAutheticated(); const [formData, setFormData] = useState({ uniqueId: "", name: "", email: "", countryCode: "+91", mobileNumber: "", otp: "", territoryManager: "", // Add territoryManager field }); const nameRef = useRef(); const dropdownRef = useRef(); // Reference for the dropdown const [territoryManagers, setTerritoryManagers] = useState([]); const [showModal, setShowModal] = useState(false); const [showDropdown, setShowDropdown] = useState(false); const [tmname, setTmname] = useState(""); const getTerritoryManagers = async (query = "") => { try { const res = await axios.get(`/api/territorymanager/getAll-dropdown/`, { headers: { Authorization: `Bearer ${token}`, }, params: { name: query, }, }); setTerritoryManagers(res.data.territoryManager || []); } catch (err) { const msg = err?.response?.data?.message || "Something went wrong!"; swal({ title: "Error", text: msg, icon: "error", button: "Retry", dangerMode: true, }); } }; // Fetch Territory Managers when the component mounts useEffect(() => { getTerritoryManagers(); }, []); const debouncedSearch = useCallback( debounce(() => { getTerritoryManagers(nameRef.current.value); }, 500), [] ); const handleSearchChange = (e) => { // const { value } = e.target; // setFormData({ ...formData, territoryManager: value }); setShowDropdown(true); setTmname(e.target.value); debouncedSearch(); }; const handleDropdownSelect = (tm) => { setFormData({ ...formData, territoryManager: tm._id }); setTmname(tm.name); setShowDropdown(false); }; const handleInputClick = () => { setFormData({ ...formData, territoryManager: "" }); setShowDropdown(true); getTerritoryManagers(); }; const handleChange = (e) => { setFormData({ ...formData, [e.target.name]: e.target.value }); }; // Listen for clicks outside the dropdown and input field to hide the dropdown useEffect(() => { const handleClickOutside = (event) => { if ( nameRef.current && dropdownRef.current && !nameRef.current.contains(event.target) && !dropdownRef.current.contains(event.target) ) { setShowDropdown(false); // Hide the dropdown } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, []); const validateForm = () => { const { uniqueId, name, email, mobileNumber, territoryManager } = formData; if (!uniqueId || !name || !email || !mobileNumber || !territoryManager) { swal({ title: "Warning", text: "All fields are required!", icon: "warning", button: "OK", }); return false; } if (!/^\d{10}$/.test(mobileNumber)) { swal({ title: "Warning", text: "Mobile number must be 10 digits!", icon: "warning", button: "OK", }); return false; } return true; }; const handleRegister = async (e) => { e.preventDefault(); if (!validateForm()) return; try { await axios.post("/api/salescoordinator/register", formData, { headers: { Authorization: `Bearer ${token}`, }, }); setShowModal(true); // Show OTP modal after registration } catch (error) { console.error(error); let msg = error?.response?.data?.message || "Failed to register Sales Coordinator. Please try again."; swal({ title: "Warning", text: msg, icon: "error", button: "Retry", dangerMode: true, }); } }; const handleVerifyOTP = async () => { try { await axios.post("/api/salescoordinator/verify-otp", { otp: formData.otp, fullMobileNumber: `${formData.countryCode}${formData.mobileNumber}`, }); setShowModal(false); // Close OTP modal after verification swal({ title: "Success", text: "OTP verified successfully!", icon: "success", button: "OK", }).then(() => { navigate("/salescoordinators"); // Navigate to success page or desired route }); } catch (error) { console.error(error); let msg = error?.response?.data?.message || "OTP verification failed. Please try again."; swal({ title: "Warning", text: msg, icon: "error", button: "Retry", dangerMode: true, }); } }; const handleCancel = () => { navigate("/salescoordinators"); }; return (

Add Sales Coordinator

{/* Dropdown */} {showDropdown && territoryManagers.length > 0 && (
    {territoryManagers.map((tm) => (
  • handleDropdownSelect(tm)} > {tm.name}
  • ))}
)}
{/* OTP Modal */} setShowModal(false)}> Verify OTP Enter OTP
); }; export default AddSalesCoOrdinator;