import { shallowEqual, useSelector } from 'react-redux'; import { changeCustomerID, ChangeSelectedCustDisable, changeSelectedCustId, changeSelectedOption, PreferenceData, } from '../../../../Features/BookingScreen/BookingData/BookingData'; import { useCallback, useEffect, useState } from 'react'; import { changeKioskCustomerMobileNo, globalKioskCustomerMobileNo, } from '../../../../Features/Kiosk/kiosk.js'; import { HiOutlineBackspace } from 'react-icons/hi'; import { useDispatch } from 'react-redux'; import { isIndianMobile } from '../../../../utils/calculations.js'; import { IoIosWarning } from 'react-icons/io'; import './CustomerOTP.scss'; import { Messages } from '../../../../Components/Notifications/Messages.jsx'; import { DefaultModal } from '../../../../Components/Modal/DefaultModal.jsx'; import { checkLastOrderTimeLimit, sendupiotp, } from '../../../../Features/UpiDetails/UpiDetails.js'; import { StoredSessionData } from '../../../../Features/ThemeChange/ThemeChange.js'; import { getAddCustomerDetails, postAddCustomerDetails } from '../../../../Features/BookingScreen/Customer/addCustomer.js'; const CustomerMobileNumberModal = ({ open, HandleCloseModal }) => { const SettingDataSelector = useSelector(PreferenceData); const CustomerMobileNumber = useSelector(globalKioskCustomerMobileNo); const SessionData = useSelector(StoredSessionData, shallowEqual); const dispatch = useDispatch(); const [number, setNumber] = useState( CustomerMobileNumber ? CustomerMobileNumber : '' ); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [canResend, setCanResend] = useState(true); const [otpInput, setOtpInput] = useState(['', '', '', '']); const [otpIndex, setOtpIndex] = useState(0); const [otpSent, setOtpSent] = useState(false); const [otpVerifed, setOtpVerified] = useState(false); const [otpNumber, setOTPNumber] = useState(null); const [maxLimitExceeded, setMaxLimitExceeded] = useState(null); const [maxLimitExceededMessage, setMaxLimitExceededMessage] = useState(null); const isOtpEnabled = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (setting) => setting?.SettingIdName?.toLowerCase() === 'kioskotp' && setting?.SettingValue === 'Y' ); const isTimeLimitEnabled = SettingDataSelector?.[0]?.SettingDtlDetails?.find( (setting) => (setting?.SettingIdName?.toLowerCase() === 'hours' || setting?.SettingIdName?.toLowerCase() === 'minutes') && setting?.SettingValue === 'Y' ); useEffect(() => { isIndianMobile(number) && fetchCustomerDetails(number); }, [number]); useEffect(() => { if (otpInput.every((input) => input !== '')) { verifyOtp(); } }, [otpInput]); const fetchCustomerDetails = async (number) => { const response = await dispatch( getAddCustomerDetails({ MobileNo: number, AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }) )?.unwrap(); if (response?.data?.statusCode === 1) { console.log( 'response?.data?.CustomerId', response?.data, response?.data?.data?.[0]?.CustId ); dispatch(changeCustomerID(response?.data?.data?.[0]?.CustId)); let custvalues = { value: number, label: response?.data?.data?.[0]?.CustName || number, CustId: response?.data?.data?.[0]?.CustId, ...response?.data?.data?.[0], }; // {value: '8428086416', label: 'mohan', CustId: 'CUST1-281-437-74', CustName: 'mohan', Address1: undefined, …} await dispatch(changeSelectedOption(custvalues)); await dispatch(changeSelectedCustId(response?.data?.data?.[0]?.CustId)); await dispatch( ChangeSelectedCustDisable(true) ); }else{ let postdata = { "CustMobile":number, "CustomerProfile": null, "AppId": SessionData.AppId, "CompId": SessionData.CompId, "BranchId": SessionData.BranchId, "CreatedBy": SessionData.UserId, "InitialOutStanding": null, "OfferType": "P", "MarriedStatus": "N", "CustomerAddressDtl": [] } let response1 = await dispatch(postAddCustomerDetails(postdata)).unwrap(); if (response1?.data?.statusCode == 1) { dispatch(changeSelectedOption(null)); dispatch( changeCustomerID( response1?.data?.CustomerDetails?.[ response1?.data?.CustomerDetails.length - 1 ] ) ); dispatch( changeSelectedCustId(response1?.data?.CustomerDetails?.[0]?.CustId) ); dispatch( ChangeSelectedCustDisable(true) ); } else{ setMessageData('Invalid mobile No.'); setMessageType('error'); setNumber(''); } } }; const setNumberFun = (newValue) => { setNumber((prevNumber) => { if (prevNumber.length < 10) { return prevNumber + newValue; } return prevNumber; }); }; const handleOtpNumber = (num) => { if (otpIndex > 3) return; const newOtp = [...otpInput]; newOtp[otpIndex] = num.toString(); setOtpInput(newOtp); if (otpIndex < 3) { setOtpIndex(otpIndex + 1); } }; const handleOtpBackspace = () => { if (otpIndex < 0) return; const newOtp = [...otpInput]; if (newOtp[otpIndex]) { newOtp[otpIndex] = ''; } else if (otpIndex > 0) { newOtp[otpIndex - 1] = ''; setOtpIndex(otpIndex - 1); } setOtpInput(newOtp); }; const handleBackspace = () => { setNumber((prevNumber) => prevNumber.slice(0, -1)); }; const checkLast30MinOrder = async (MobileNo) => { const response = await dispatch( checkLastOrderTimeLimit({ MobileNo, AppId: SessionData.AppId, CompId: SessionData.CompId, BranchId: SessionData.BranchId, }) )?.unwrap(); return response?.data; }; const sendOTP = async () => { const valid = isIndianMobile(number); if (valid) { if (isTimeLimitEnabled) { const withinTimeLimit = await checkLast30MinOrder(number); if (withinTimeLimit?.IsEligible === false) { // setMessageData(withinTimeLimit?.response); // setMessageType('warning'); setMaxLimitExceededMessage(withinTimeLimit?.response); setMaxLimitExceeded(true); await dispatch(changeSelectedOption(null)); await dispatch(changeSelectedCustId(null)); // Reset after 3 seconds setTimeout(() => { setMaxLimitExceeded(false); setMaxLimitExceededMessage(null); }, 2500); return; } } } else { setMessageData('Please enter valid mobile No.'); setMessageType('warning'); return; } try { setOtpIndex(0); setOtpSent(true); let response = await dispatch( sendupiotp({ MobileNo: number, CreatedBy: 0, }) )?.unwrap(); if (response?.data?.statusCode == 1) { setMessageData('OTP sent to your mobile number'); setMessageType('success'); setOTPNumber(response?.data?.OTP); startResendTimer(); } } catch (error) { console.log(error); } }; const verifyOtp = () => { const enteredOtp = otpInput.join(''); if (enteredOtp === otpNumber?.toString()) { setMessageType('success'); setMessageData('OTP Verified Successfully'); setOtpSent(false); setOtpInput(['', '', '', '']); HandleCloseModal(); // setShowPaymentMethods(true); setOtpVerified(true); } else { setMessageType('error'); setMessageData('Invalid OTP'); setOtpInput(['', '', '', '']); setOtpIndex(0); } }; const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); return ( <> 768 ? 900 : 700} children={

{isOtpEnabled ? 'Enter Mobile Number To Order' : 'PAYMENT'}

{!otpSent && !otpVerifed && ( <>
{/*

Get your order bill on your mobile
via SMS / Whatsapp

*/}
{number?.length === 10 && !isIndianMobile(number) && (
Please Enter Valid Mobile Number
)}
{/* input boxxes */}

setNumberFun(1)}>1

setNumberFun(2)}>2

setNumberFun(3)}>3

setNumberFun(4)}>4

setNumberFun(5)}>5

setNumberFun(6)}>6

setNumberFun(7)}>7

setNumberFun(8)}>8

setNumberFun(9)}>9

setNumberFun(0)}>0

{isOtpEnabled && ( <> )} )} {isOtpEnabled && otpSent && (
Enter OTP
{/* Mobile Number + Edit */}
{number} ``{' '}
{/* 4 Digit OTP Input */}
{otpInput.map((digit, index) => ( setOtpIndex(index)} readOnly /> ))}
{/* */}

handleOtpNumber(1)}>1

handleOtpNumber(2)}>2

handleOtpNumber(3)}>3

handleOtpNumber(4)}>4

handleOtpNumber(5)}>5

handleOtpNumber(6)}>6

handleOtpNumber(7)}>7

handleOtpNumber(8)}>8

handleOtpNumber(9)}>9

handleOtpNumber(0)}>0

{/* Buttons */}
)} {/* {(!isOtpEnabled || (otpVerifed)) && <>

Select Payment Method

{console.log('selectedOption', selectedPaymentOption)}
{counterAvailability && (
handlePaymentOption('Counter')} >

PAY AT THE COUNTER

)} {paymentOptionDetailsBusinessUpi && (
handlePaymentOption('BU')} >

UPI

)} {!paymentOptionDetailsBusinessUpi && !counterAvailability && (
Please Set Payment Options Contact Admin
)}
} */}

{maxLimitExceededMessage}

} /> ); }; export default CustomerMobileNumberModal;