import { NoBscProviderError } from '@binance-chain/bsc-connector' import { UnsupportedChainIdError } from '@web3-react/core' import { NoEthereumProviderError, UserRejectedRequestError as UserRejectedRequestErrorInjected, } from '@web3-react/injected-connector' import { UserRejectedRequestError as UserRejectedRequestErrorWalletConnect, WalletConnectConnector, } from '@web3-react/walletconnect-connector' import { useCallback } from 'react' // import useToast from 'hooks/useToast' // import { useAppDispatch } from 'state' // import { useTranslation } from 'contexts/Localization' // import { clearUserStates } from '../utils/clearUserStates' import { ConnectorNames, connectorsByName, setupNetwork, toastError } from '../utils' import useActiveWeb3React from './useActiveWeb3React' export const connectorLocalStorageKey = 'connectorIdv2' export const useAuth = () => { const { chainId, account, activate, deactivate, setError } = useActiveWeb3React() const login = useCallback( async (connectorID: ConnectorNames) => { const connectorOrGetConnector = connectorsByName[connectorID] const connector = typeof connectorOrGetConnector !== 'function' ? connectorsByName[connectorID] : await connectorOrGetConnector() if (typeof connector !== 'function' && connector) { activate(connector, async (error: Error) => { if (error instanceof UnsupportedChainIdError) { setError(error) const provider = await connector.getProvider() const hasSetup = await setupNetwork(provider) if (hasSetup) { activate(connector) } } else { window?.localStorage?.removeItem(connectorLocalStorageKey) if (error instanceof NoEthereumProviderError || error instanceof NoBscProviderError) { toastError({ title: 'Error', message: 'No provider was found.', }) } else if ( error instanceof UserRejectedRequestErrorInjected || error instanceof UserRejectedRequestErrorWalletConnect ) { if (connector instanceof WalletConnectConnector) { const walletConnector = connector as WalletConnectConnector walletConnector.walletConnectProvider = null } toastError({ title: 'Error', message: 'Please authorize to access your account.', }) } else { toastError({ title: 'Error', message: error.message, }) } } }) } else { window?.localStorage?.removeItem(connectorLocalStorageKey) // toastError(t('Unable to find connector'), t('The connector config is wrong')) } localStorage.setItem(connectorLocalStorageKey, connectorID) }, [activate, setError], ) const logout = useCallback(() => { deactivate() // clearUserStates(dispatch, chainId, true) }, [deactivate]) return { login, logout, account } }