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 (
{/* ({ value: option.BrId, label: option.BrName, }))} label={} id="BranchId" field="BranchId" fieldState={true} fieldApi={true} className="field-DropDown-Emp" onChangeFunction={(e) => BranchDropDownChange(e)} isOnchanges={formType == "edit" ? true : false} valueData={SelectedBranchData} disabled={brId ? true : false} // defaultValue={LastSelectConfig} /> */} { await validateSafeInput(value); if (value?.length > 30) { return Promise.reject( 'Supplier Name cannot exceeds more than 30 chars' ); } return Promise.resolve(); }, }, ]} > {AppType === 'Wholesale' ? 'Seller Name' : 'Supplier Name'} } autocomplete="off" isOnChange={formType == 'edit' ? true : false} disabled={ formType === 'edit' && formRef?.current?.getFieldsValue()?.SuppName === 'Self' } /> Mobile Number} maxLength="10" autocomplete="off" isOnChange={formType == 'edit' ? true : false} inputMode="numeric" onInput={(e) => (e.target.value = e.target.value.replace(/[^0-9]/g, '')) } /> MailId} autocomplete="off" isOnChange={formType == 'edit' ? true : false} /> { await validateSafeInput(value); if (value?.length > 30) { return Promise.reject( 'Point of Contact cannot exceeds more than 30 chars' ); } return Promise.resolve(); }, }, ]} > Point of Contact} autocomplete="off" isOnChange={formType == 'edit' ? true : false} /> POC Mobile Number} autocomplete="off" maxLength="10" isOnChange={formType == 'edit' ? true : false} /> POC MailId} autocomplete="off" isOnChange={formType == 'edit' ? true : false} /> ({ value: option.ConfigId, label: option.ConfigName, }))} label={} className="field-DropDown" id="DeliveryPerformance" onChangeFunction={(e) => handleDeliveryPerformanceChange(e) } isOnChange={formType == 'edit' ? true : false} valueData={Delivery} /> ({ value: option.ConfigId, label: option.ConfigName, }))} label={} className="field-DropDown" id="DiscountLevel" onChangeFunction={(e) => handleDiscountLevelChange(e)} isOnChange={formType == 'edit' ? true : false} valueData={DicountValue} /> ({ value: option.ConfigId, label: option.ConfigName, }))} label={} className="field-DropDown" id="QualityofSupp" onChangeFunction={(e) => handleQualityofSuppChange(e)} isOnChange={formType == 'edit' ? true : false} valueData={QualityValue} />

Address Details

{ await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > Address Line1} isOnChange={editstate?.Address1 ? true : false} /> { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > Zipcode} maxLength="6" onKeyPress={(event) => { // Allow only numbers and prevent any other input if (!/[0-9]/.test(event.key)) { event.preventDefault(); } }} isOnChange={ editstate?.Zip || editstate?.Zip == 0 ? true : false } onChange={pinCodeChange} /> {zipCodeData ? ( <> { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > ) : ( '' )} { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} > { await validateSafeInput(value); // To block HTML tags & SQL keywords return Promise.resolve(); }, }, ]} >
} // handleSubmit={handleSubmit} />
); }; export default SupplierForm;