import React, { useCallback } 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 { WALLET_TYPES, abbreviateAddress } from 'lib/wallet';
import { MetamaskWallet } from 'lib/metamask';
import { getAuthToken } from 'lib/authToken';
import useLoginView from 'lib/useLoginView';
import * as need from 'lib/need';
import SubmitButton from 'form/SubmitButton';
import BridgeForm from 'form/BridgeForm';
export default function Metamask({ className, goHome }) {
useLoginView(WALLET_TYPES.METAMASK);
const { setWallet, setWalletType, setAuthToken } = useWallet();
const { web3 } = useNetwork();
const _web3 = need.web3(web3);
const onSubmit = useCallback(async () => {
try {
const accounts = await window.ethereum.enable();
const wallet = new MetamaskWallet(accounts[0]);
const authToken = await getAuthToken({
wallet,
walletType: WALLET_TYPES.METAMASK,
web3: _web3,
});
setAuthToken(Just(authToken));
setWallet(Just(wallet));
setWalletType(WALLET_TYPES.METAMASK);
} catch (e) {
console.error(e);
return { [FORM_ERROR]: e.message };
}
}, [_web3, setAuthToken, setWallet, setWalletType]);
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 (
<>
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)}
)}
>
);
}