@mojito-inc/connect-wallet
Version:
Connecting wallet via metamask, wallet connect, email
40 lines (37 loc) • 1.85 kB
JavaScript
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 };