import { useCallback, useEffect } from 'react'; import { Box, Modal } from '@mui/material'; import { VITE_WALLET_IFRAME_URL, } from 'utils/constants'; import { REQUEST_WALLET_ACCOUNTS, WALLET_ACCOUNTS_DATA } from '../../../constants'; import { useAddNetwork } from '../../../hooks/useAddNetwork'; const ApproveTransactionModal = ({ setAccount, setIsDataReceived, isVisible, }: { setAccount: (account: string) => void; setIsDataReceived: (isReceived: boolean) => void; isVisible: boolean; }) => { const { setIframe, isNetworkAvailable, networkData } = useAddNetwork(); useEffect(() => { const handleMessage = (event: MessageEvent) => { if (event.origin !== VITE_WALLET_IFRAME_URL) return; if (event.data.type === WALLET_ACCOUNTS_DATA) { setIsDataReceived(true); if (event.data.data.length === 0) { console.error(`Accounts not present for chainId: ${networkData?.chainId}`); return; } setAccount(event.data.data[0]); } if (event.data.type === 'ERROR') { console.error('Error from wallet:', event.data.message); } }; window.addEventListener('message', handleMessage); return () => { window.removeEventListener('message', handleMessage); }; }, [networkData]); const getDataFromWallet = useCallback(() => { if (!networkData) { console.error('networkData should not be empty'); return; } const iframe = document.getElementById('walletIframe') as HTMLIFrameElement; if (!iframe.contentWindow) { console.error('Iframe not found or not loaded'); return; } iframe.contentWindow.postMessage( { type: REQUEST_WALLET_ACCOUNTS, chainId: networkData.chainId, }, VITE_WALLET_IFRAME_URL, ); }, [networkData]); useEffect(() => { if (isNetworkAvailable) { getDataFromWallet(); } }, [isNetworkAvailable, getDataFromWallet]) return ( ); }; export default ApproveTransactionModal;