import { useState, useEffect, useCallback, useRef } from 'react'; import { useDispatch } from 'react-redux'; import { useNavigate, useLocation } from 'react-router-dom'; import { ArrowRightOutlined, ClockCircleOutlined } from '@ant-design/icons'; import { Space, Form } from 'antd'; import { EditFilled, DeleteFilled, PlusOutlined, ReloadOutlined, } from '@ant-design/icons'; import { Tables } from '../../Components/Tables/Table.jsx'; import { Search } from '../../Components/Forms/Search.jsx'; import Buttons from '../../Components/Forms/Buttons.jsx'; import { Messages } from '../../Components/Notifications/Messages.jsx'; import FormHeader from '../PageComponents/FormHeader.jsx'; import { getSession } from '../../Services/Others.js'; import { gettableupi, delupi, sendupiotp, getupiotp, } from '../../Features/UpiDetails/UpiDetails.js'; import { changeBreadCrumb } from '../../Features/AppPage/CenterPage.js'; import { DefaultModal } from '../../Components/Modal/DefaultModal.jsx'; const UpiDetailslist = () => { const navigateTo = useNavigate(); const dispatch = useDispatch(); const location = useLocation(); const ref = useRef(); //local states const [sortedInfo, setSortedInfo] = useState({}); const [searchedText, setSearchedText] = useState(''); const [messageType, setMessageType] = useState(null); const [messageData, setMessageData] = useState(null); const [tabledata, setTabledata] = useState(); const [OtpModal, setOtpModal] = useState(false); const [SelectedRow, setSelectedRow] = useState(); const [SelectedRowIndex, setSelectedRowIndex] = useState(); const [apiotp, setapiotp] = useState('1234'); const [otp1, setotp1] = useState(''); const [otp2, setotp2] = useState(''); const [otp3, setotp3] = useState(''); const [otp4, setotp4] = useState(''); const [page, setpage] = useState(1); const [disable, setDisable] = useState(false); const [Status, setStatus] = useState(false); const [timeLeft, setTimeLeft] = useState(null); const CompId = getSession('CompId'); const BranchId = getSession('BranchId'); const AppId = getSession('AppId'); const UserId = getSession('UserId'); const subDirectory = import.meta.env.ENV_BASE_URL; const items = [ { name: 'Home', link: `${subDirectory}app-page/home`, }, { name: 'UpiDetails', link: `${subDirectory}setting/upi-details`, }, ]; const columns = [ { title: 'Sl.No', key: 'sno', align: 'center', width: '100px', render: (text, object, index) => ( {(page - 1) * 10 + index + 1} ), }, { title: 'Name', dataIndex: 'Name', key: 'Name', width: '100px', render: (text) => {text}, filteredValue: [searchedText], onFilter: (value, record) => { return ( String(record.Name)?.toLowerCase()?.includes(value?.toLowerCase()) || String(record.Mobile)?.toLowerCase()?.includes(value?.toLowerCase()) || String(record.Mobile)?.toLowerCase()?.includes(value?.toLowerCase()) || String(record.Name)?.toLowerCase()?.includes(value?.toLowerCase()) ); }, sorter: (a, b) => a?.Name?.localeCompare(b?.Name), sortOrder: sortedInfo.columnKey === 'Name' ? sortedInfo.order : null, ellipsis: true, }, { title: 'Mobile No', dataIndex: 'Mobile', key: 'Mobile', width: '100px', align: 'right', render: (text) => {text}, sorter: (a, b) => a?.Mobile?.localeCompare(b?.Mobile), sortOrder: sortedInfo.columnKey === 'Name' ? sortedInfo.order : null, ellipsis: true, }, { title: 'UPI ID', dataIndex: 'UPIId', key: 'UPIId', width: '100px', render: (text) => {text}, sorter: (a, b) => a?.UPIId?.localeCompare(b?.UPIId), sortOrder: sortedInfo.columnKey === 'UPIId' ? sortedInfo.order : null, ellipsis: true, }, { title: 'UPI NAME', dataIndex: 'ModeName', key: 'ModeName', width: '100px', render: (text) => {text}, sorter: (a, b) => a?.ModeName?.localeCompare(b?.UPIId), sortOrder: sortedInfo.columnKey === 'ModeName' ? sortedInfo.order : null, ellipsis: true, }, { title: 'Action', key: 'Action', dataIndex: 'Action', width: '100px', render: (_, record, index) => tabledata.length >= 1 ? ( {record.ActiveStatus === 'A' ? ( OpenOtpModal(record, index)} /> ) : ( '' )} {record.ActiveStatus === 'A' ? ( statusFormatter(record)} /> ) : ( statusFormatter(record)} /> )} ) : null, }, ]; useEffect(() => { if (timeLeft === 0) { setDisable(false); setTimeLeft(null); } // exit early when we reach 0 if (!timeLeft) return; // save intervalId to clear the interval when the // component re-renders const intervalId = setInterval(() => { setTimeLeft(timeLeft - 1); }, 1000); // clear interval on re-render to avoid memory leaks return () => clearInterval(intervalId); }, [timeLeft]); useEffect(() => { SetOtpData(); }, [otp1, otp2, otp3, otp4]); const SetOtpData = async () => { let otp = otp1 + '' + otp2 + '' + otp3 + '' + otp4; if (otp.length === 4) { let data = { MobileNo: SelectedRow?.AdminMobileNo ? SelectedRow?.AdminMobileNo : null, OTP: otp, }; let response = await dispatch(getupiotp(data)).unwrap(); if (response?.data?.statusCode === 1) { navigateTo( `${subDirectory}setting/upi-details/update`, { state: { editstate: SelectedRow } }, { key: SelectedRowIndex } ); } else { setMessageType('error'); setMessageData('InCorrect Otp'); } // if (SelectedRow.ActiveStatus !== "D") { // if(apiotp === otp){ // setOtpModal(false) // navigateTo( // `${subDirectory}setting/upi-details/update`, // { state: { editstate: SelectedRow } }, // { key: SelectedRowIndex } // ); // } // else{ // setMessageType("error") // setMessageData("Invalid Otp") // } // } } }; const actionsFormatter = async (row, rowIndex) => { if (row.ActiveStatus !== 'D') { navigateTo( `${subDirectory}setting/upi-details/update`, { state: { editstate: row } }, { key: rowIndex } ); } }; const OpenOtpModal = async (row, rowIndex) => { setOtpModal(true); setSelectedRow(row); setSelectedRowIndex(rowIndex); SendOtp(row, rowIndex); }; const SendOtp = async (row, rowIndex) => { let PostData = { MobileNo: row?.AdminMobileNo ? row?.AdminMobileNo : null, CreatedBy: UserId, }; let response = await dispatch(sendupiotp(PostData)).unwrap(); if (response?.data?.statusCode == 1) { setMessageType('success'); setMessageData('Otp Send Successfully'); setStatus(true); setTimeLeft(30); } }; const CloseOtpModal = () => { setOtpModal(false); }; const statusFormatter = async (row) => { let deleteData = { UPIDetailId: row.UPIDetailId, Mode: row.Mode, ActiveStatus: row.ActiveStatus == 'A' ? 'D' : 'A', UpdatedBy: getSession('UserId'), CompId: getSession('CompId'), BranchId: getSession('BranchId'), AppId: getSession('AppId'), }; let response = await dispatch(delupi(deleteData)).unwrap(); if (response?.data?.statusCode === 1) { setMessageType('success'); setMessageData( row.ActiveStatus == 'A' ? 'In-Activated Successfully' : 'Activated Successfully' ); TableDatas(); } }; const onSearch = (value) => { setSearchedText(value); }; const onSearchChange = (e) => { setSearchedText(e?.target?.value); }; useEffect(() => { try { if (location?.state?.Notiffy) { setMessageType(location?.state?.Notiffy.messageType); setMessageData(location?.state?.Notiffy.messageData); } } catch (err) { console.log(err, 'err'); } }, []); useEffect(() => { TableDatas(); dispatch(changeBreadCrumb({ items: items })); }, []); const onComplete = useCallback(() => { setMessageData(null); setMessageType(null); }, []); const handleChange = (pagination, filters, sorter) => { setFilteredInfo(filters); setSortedInfo(sorter); }; const handlePageChange = (current) => { setpage(current); }; const handelAddButton = () => { navigateTo(`${subDirectory}setting/upi-details/new`); }; const TableDatas = async () => { let data = { CompId: CompId, BranchId: BranchId, AppId: AppId }; let response = await dispatch(gettableupi(data)).unwrap(); if (response?.data?.statusCode == 1) { setTabledata(response?.data?.data); } }; const handleOtpChange = async (value1, e) => { switch (value1) { case 'setotp1': await setotp1(e?.target?.value); break; case 'setotp2': setotp2(e?.target?.value); break; case 'setotp3': setotp3(e?.target?.value); break; case 'setotp4': setotp4(e?.target?.value); break; } }; const inputfocus = (elmnt) => { if (elmnt.key === 'Delete' || elmnt.key === 'Backspace') { const next = elmnt.target.tabIndex - 2; if (next > -1) { elmnt?.target?.form?.elements[next]?.focus(); } } else { const next = elmnt.target.tabIndex; if (next < 6) { elmnt?.target?.form?.elements[next]?.focus(); } } }; return (
handelAddButton()} color="901D77" icon={} > OPEN
Enter OTP
} open={OtpModal} width={300} footer={null} children={
handleOtpChange('setotp1', e)} tabIndex="1" maxLength="1" onKeyUp={(e) => inputfocus(e)} /> handleOtpChange('setotp2', e)} tabIndex="2" maxLength="1" onKeyUp={(e) => inputfocus(e)} /> handleOtpChange('setotp3', e)} tabIndex="3" maxLength="1" onKeyUp={(e) => inputfocus(e)} /> handleOtpChange('setotp4', e)} tabIndex="4" maxLength="1" onKeyUp={(e) => inputfocus(e)} />
{Status && timeLeft != null ? (
0 : {timeLeft < 10 ? '0' + timeLeft : timeLeft}{' '}
) : Status ? ( SendOtp()} icon={} > ) : ( '' )}
} handleCancel={CloseOtpModal} /> ); }; export default UpiDetailslist;