UNPKG

@mojito-inc/connect-wallet

Version:

Connecting wallet via metamask, wallet connect, email

40 lines (37 loc) 1.85 kB
import { __awaiter } from '../_virtual/_tslib.js'; import * as React from 'react'; import { createContext, useContext, useState, useCallback, useEffect } from 'react'; import { walletConnectMetadata, supportedNetworksData } from '../constant/walletProvider.js'; import { useWalletType } from './WalletTypeProvider.js'; const Web3ModalContext = createContext({}); const useWeb3ModalWrapper = () => { return useContext(Web3ModalContext); }; const Web3ModalProvider = ({ children, projectId, metaData }) => { const [web3Provider, setWeb3Provider] = useState(); const { walletType } = useWalletType(); const isEthereumWallet = React.useMemo(() => walletType === 'ethereum', [walletType]); const modalProvider = useCallback(() => __awaiter(void 0, void 0, void 0, function* () { if (isEthereumWallet && projectId) { const web3ModalProvider = yield import('@web3modal/ethers5/react'); setWeb3Provider(web3ModalProvider); const { createWeb3Modal, defaultConfig } = web3ModalProvider; const ethersConfig = defaultConfig({ metadata: metaData || walletConnectMetadata }); createWeb3Modal({ ethersConfig, chains: supportedNetworksData, projectId, }); } else { setWeb3Provider({ useWeb3ModalAccount: undefined, useWeb3Modal: undefined, useWeb3ModalProvider: undefined, useDisconnect: undefined, useWeb3ModalEvents: undefined, }); } }), [metaData, projectId, isEthereumWallet]); useEffect(() => { modalProvider(); }, [modalProvider]); return (React.createElement(Web3ModalContext.Provider, { value: web3Provider }, web3Provider && children)); }; export { Web3ModalProvider, useWeb3ModalWrapper };