import { useState, useEffect, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { useNavigate, useLocation } from 'react-router-dom'; import { Form } from 'antd'; import { ArrowRightOutlined } from '@ant-design/icons'; import { InputField } from '../../Components/Forms/InputField.jsx'; import Buttons from '../../Components/Forms/Buttons.jsx'; import { Messages } from '../../Components/Notifications/Messages'; import MapView from '../../Components/MapView/MapView.jsx'; import FormHeader from '../PageComponents/FormHeader.jsx'; import { changeBreadCrumb } from '../../Features/AppPage/CenterPage.js'; import { getSession, validateSafeInput } from '../../Services/Others'; import { getBranchDataBasedonCmpAppId, postsupplier, putsupplier, } from '../../Features/SupplierMaster/SupplierMaster.js'; import { DropDowns } from '../../Components/Forms/DropDown.jsx'; import { getConfigType } from '../../Features/BookingScreen/BookingData/BookingData.js'; const subDirectory = import.meta.env.BASE_URL; const SupplierForm = ({ formType }) => { const formRef = useRef(null); const dispatch = useDispatch(); const navigate = useNavigate(); const location = useLocation(); const state = location?.state; const editstate = state?.editstate; const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [SelectedLatitude, setSelectedLatitude] = useState(null); const [SelectedLongitude, setSelectedLongitude] = useState(null); const [zipCodeData, setZipCodeData] = useState(false); const [cmpId, setcmpId] = useState(getSession('CompId')); const [brId, setBrId] = useState(getSession('BranchId')); const [AppId, setAppId] = useState(getSession('AppId')); const AppType = getSession('AppType'); const [deliveryPerformanceData, SetDeleveryPerformanceData] = useState([]); const [DiscountData, setDiscountData] = useState([]); const [QualityData, setQualityData] = useState([]); const [Delivery, setDeliveryValue] = useState(); const [DicountValue, setDicountValue] = useState(); const [QualityValue, setQualityValue] = useState(); const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, { name: AppType === 'Wholesale' ? 'Seller' : 'Supplier', link: `${subDirectory}setting/supplier-master`, }, { name: editstate ? 'Edit' : 'New', link: null, }, ]; useEffect(() => { try { dispatch(changeBreadCrumb({ items: items })); if (!brId) { fetchData(); } else { fetchDataBranchBased(); } if (formType === 'edit') { if (editstate) { console.log('editstate', editstate); if (editstate?.Zip) { setZipCodeData(true); } setDeliveryValue(editstate?.DeliveryPerformance); setDicountValue(editstate?.DiscountLevel); setQualityValue(editstate?.QualityofSupp); formRef?.current?.setFieldsValue(editstate); setSelectedLatitude(editstate?.Latitude); setSelectedLongitude(editstate?.Longitude); } else { navigate(`${subDirectory}setting/supplier-master/`); } } } catch (err) { console.log(err, 'err'); } }, []); useEffect(() => { deliveryPerformance(); discountLevel(); qualityofSupp(); }, []); const deliveryPerformance = async () => { let response = await dispatch( getConfigType({ TypeName: 'Delivery Performance' }) ).unwrap(); SetDeleveryPerformanceData(response?.data?.data); }; const discountLevel = async () => { let response = await dispatch( getConfigType({ TypeName: 'Discount Level' }) ).unwrap(); setDiscountData(response?.data?.data); }; const qualityofSupp = async () => { let response = await dispatch( getConfigType({ TypeName: 'Quality Of Supplier' }) ).unwrap(); setQualityData(response?.data?.data); }; const onFinish = async (values) => { let postData = values; postData['CreatedBy'] = getSession('UserId'); postData['CompId'] = getSession('CompId'); postData['AppId'] = AppId; postData['BranchId'] = brId; let response = {}; if (formType === 'add') { response = await dispatch(postsupplier(postData)).unwrap(); } else if (formType === 'edit') { if (editstate) { postData['SuppId'] = editstate?.SuppId; postData['AddId'] = editstate?.AddId; postData['UpdatedBy'] = getSession('UserId'); } response = await dispatch(putsupplier(postData)).unwrap(); } if (response?.data?.statusCode == 1) { navigate(`${subDirectory}setting/supplier-master/`, { state: { Notiffy: { messageType: 'success', messageData: response?.data?.response, }, }, }); } else { setMessageType('error'); setMessageData(response?.data?.response); } }; const validatePhoneNumber = (_, value) => { if (!value) { return Promise.reject('Mobile number is required'); } // Must be 10 digits and start with 6-9 const phoneRegex = /^[6-9]\d{9}$/; if (!phoneRegex.test(value)) { return Promise.reject('Please enter a valid 10-digit mobile number starting with 6, 7, 8, or 9'); } return Promise.resolve(); }; const validateEmail = (rule, value, callback) => { const regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; if (!value || regex.test(value)) { callback(); } else { callback('Please enter a valid Mail Id'); } }; async function fetchData() { const gettingBranchDropDown = await dispatch( getBranchDataBasedonCmpAppId({ cmpId: cmpId, AppId: AppId }) ).unwrap(); if (gettingBranchDropDown?.data?.statusCode === 1) { if (gettingBranchDropDown?.data?.data?.length === 1) { formRef?.current?.setFieldsValue({ BranchId: gettingBranchDropDown?.data?.data?.length === 1 ? gettingBranchDropDown?.data?.data[0]?.BrId : null, }); await BranchDropDownChange(gettingBranchDropDown?.data?.data[0]?.BrId); } } } const fetchDataBranchBased = async () => { const gettingBranchDropDown = await dispatch( getBranchDataBasedonCmpAppId({ cmpId: cmpId, AppId: AppId }) ).unwrap(); if (gettingBranchDropDown?.data?.statusCode === 1) { let finalBranchDropDown = gettingBranchDropDown?.data?.data?.filter( (value) => value.BrId === brId ); if (finalBranchDropDown?.length === 1) { formRef.current?.setFieldsValue({ BranchId: finalBranchDropDown?.length === 1 ? finalBranchDropDown[0]?.BrId : null, }); await BranchDropDownChange(finalBranchDropDown[0]?.BrId); } } }; const onMarkerClick = async (location) => { setSelectedLatitude( typeof location.lat === 'function' ? location.lat() : SelectedLatitude ); setSelectedLongitude( typeof location.lng === 'function' ? location.lng() : SelectedLongitude ); formRef.current?.setFieldsValue({ Latitude: typeof location.lat === 'function' ? location.lat() : SelectedLatitude, Longitude: typeof location.lng === 'function' ? location.lng() : SelectedLongitude, }); }; const pinCodeChange = async (e) => { if (e?.target?.value?.length < 6) { setZipCodeData(false); return false; } await getPincodeValues(e?.target?.value); }; const getPincodeValues = async (pinCode) => { if (pinCode?.length == 6) { let response = ''; await fetch(`https://api.postalpincode.in/pincode/${pinCode}`) .then((res) => res.text()) .then((text) => (response = JSON.parse(text))); if (response[0]['Status'] === 'Success') { setZipCodeData(true); formRef.current?.setFieldsValue({ City: response[0]['PostOffice'][0]['Block'], Dist: response[0]['PostOffice'][0]['District'], State: response[0]['PostOffice'][0]['State'], }); } else { setZipCodeData(false); } } }; const BranchDropDownChange = async (e) => { formRef.current?.setFieldsValue({ BranchId: e }); }; const handleDeliveryPerformanceChange = (value) => { formRef?.current?.setFieldsValue({ DeliveryPerformance: value }); setDeliveryValue(value); }; const handleDiscountLevelChange = (value) => { formRef?.current?.setFieldsValue({ DiscountLevel: value }); setDicountValue(value); }; const handleQualityofSuppChange = (value) => { formRef?.current?.setFieldsValue({ QualityofSupp: value }); setQualityValue(value); }; return (