import React, { useCallback, useEffect } from 'react'; import { Grid, Text, LinkButton, H5 } from 'indigo-react'; import { Just } from 'folktale/maybe'; import { FORM_ERROR } from 'final-form'; import { useWallet } from 'store/wallet'; import { useNetwork } from 'store/network'; import { abbreviateAddress } from 'lib/utils/address'; import { WALLET_TYPES } from 'lib/constants'; import { MetamaskWallet } from 'lib/metamask'; import { getAuthToken } from 'lib/authToken'; import useLoginView from 'lib/useLoginView'; import SubmitButton from 'form/SubmitButton'; import BridgeForm from 'form/BridgeForm'; import Window from 'components/L2/Window/Window'; import HeaderPane from 'components/L2/Window/HeaderPane'; import BodyPane from 'components/L2/Window/BodyPane'; import { Row } from '@tlon/indigo-react'; import Web3 from 'web3'; export default function Metamask({ className, goHome }) { useLoginView(WALLET_TYPES.METAMASK); const { setWallet, setWalletType, setAuthToken, setFakeToken, skipLoginSigning, } = useWallet(); const { setMetamask } = useNetwork(); useEffect(() => { setMetamask(true); }, []); // eslint-disable-line react-hooks/exhaustive-deps const onSubmit = useCallback(async () => { try { setMetamask(true); const accounts = await window.ethereum.request({ method: 'eth_requestAccounts', }); const wallet = new MetamaskWallet(accounts.result[0]); const web3 = new Web3(window.ethereum); setWallet(Just(wallet)); setWalletType(WALLET_TYPES.METAMASK); if (skipLoginSigning) { setFakeToken(); return; } const authToken = await getAuthToken({ address: wallet.address, walletType: WALLET_TYPES.METAMASK, web3, }); setAuthToken(Just(authToken)); } catch (e) { console.error(e); return { [FORM_ERROR]: e.message }; } }, [ setMetamask, setWallet, setWalletType, skipLoginSigning, setAuthToken, setFakeToken, ]); return ( {(window.ethereum && Login({ onSubmit, goHome })) || Unsupported()} ); } function Unsupported() { return ( <> Unsupported Metamask is not installed on this browser.
Get Metamask
); } function Login({ onSubmit, goHome }) { return (
Metamask
If you wish to login with a different wallet, please change it in the Metamask extension {({ handleSubmit }) => ( Login {window.ethereum.selectedAddress && ' as ' + abbreviateAddress(window.ethereum.selectedAddress)} )}
); }