import React, { useState, useEffect } from "react"; import { TextField, Button, Card, Grid, Typography, Autocomplete, CircularProgress, } from "@mui/material"; import { useNavigate } from "react-router-dom"; import { toast } from "react-hot-toast"; import axios from "axios"; import { isAutheticated } from "src/auth"; import { City, State } from "country-state-city"; const AddRetailDistributor = () => { const navigate = useNavigate(); const token = isAutheticated(); const [user, setUser] = useState({ name: "", email: "", trade_name: "", address: "", state: "", city: "", district: "", pincode: "", mobile_number: "", pan_number: "", aadhar_number: "", gst_number: "", }); const [files, setFiles] = useState({ selfieEntranceImg: null, panImg: null, aadharImg: null, gstImg: null, pesticideLicenseImg: null, fertilizerLicenseImg: null, }); const [loading, setLoading] = useState(false); const [stateOptions, setStateOptions] = useState([]); const [cityOptions, setCityOptions] = useState([]); const [selectedState, setSelectedState] = useState(null); const [selectedCity, setSelectedCity] = useState(null); const [errors, setErrors] = useState({}); useEffect(() => { const fetchStates = async () => { const states = State.getStatesOfCountry("IN").map((state) => ({ label: state.name, value: state.isoCode, })); setStateOptions(states); }; fetchStates(); }, []); useEffect(() => { const fetchCities = async () => { if (selectedState) { const cities = City.getCitiesOfState("IN", selectedState.value).map( (city) => ({ label: city.name, value: city.name, }) ); setCityOptions(cities); } }; fetchCities(); }, [selectedState]); const handleInputChange = (e) => { setUser({ ...user, [e.target.name]: e.target.value }); }; const handleStateChange = (event, newValue) => { setSelectedState(newValue); }; const handleCityChange = (event, newValue) => { setSelectedCity(newValue); }; const handleFileChange = (e) => { const { name, files } = e.target; if (files.length > 0) { const file = files[0]; if (["image/png", "image/jpeg", "image/jpg"].includes(file.type)) { setFiles((prev) => ({ ...prev, [name]: file })); } else { toast.error("Only PNG, JPG, and JPEG files are allowed."); } } }; const handleFormSubmit = async (e) => { e.preventDefault(); try { // Validate input fields if ( !user.name || !user.email || !user.trade_name || !user.address || !user.mobile_number || !user.pan_number || !user.aadhar_number || !user.gst_number || !selectedState || !selectedCity ) { setErrors({ message: "Fill all required fields!" }); return; } setLoading(true); const formData = new FormData(); formData.append("name", user.name); formData.append("email", user.email); formData.append("trade_name", user.trade_name); formData.append("address", user.address); formData.append("state", selectedState.label); formData.append("city", selectedCity.value); formData.append("district", user.district); formData.append("pincode", user.pincode); formData.append("mobile_number", user.mobile_number); formData.append("pan_number", user.pan_number); formData.append("aadhar_number", user.aadhar_number); formData.append("gst_number", user.gst_number); // Ensure files are included only if they exist Object.keys(files).forEach((key) => { if (files[key]) { formData.append(key, files[key]); } }); // Attempt to create distributor const response = await axios.post("/api/kyc/create-admin/", formData, { headers: { "Content-Type": "multipart/form-data", "Authorization": `Bearer ${token}`, }, }); if (response.data.success) { toast.success("Retailers created successfully!"); navigate("/retail-distributor"); } } catch (error) { setLoading(false); if (error.response && error.response.data) { toast.error(error.response.data.message || "Something went wrong!"); } else { toast.error("Something went wrong!"); } } }; const handleCancel = () => { navigate("/retail-distributor"); }; return (