@web3-react/injected-connector#UserRejectedRequestError TypeScript Examples
The following examples show how to use
@web3-react/injected-connector#UserRejectedRequestError.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Account.tsx From hypertext with GNU General Public License v3.0 | 4 votes |
export default function Account({ triedToEagerConnect }: { triedToEagerConnect: boolean }): JSX.Element | null {
const { active, error, activate, library, chainId, account, setError } = useWeb3React<Web3Provider>()
// initialize metamask onboarding
const onboarding = useRef<MetaMaskOnboarding>()
useLayoutEffect(() => {
onboarding.current = new MetaMaskOnboarding()
}, [])
// automatically try connecting to the network connector where applicable
const queryParameters = useQueryParameters()
const requiredChainId = queryParameters[QueryParameters.CHAIN]
useEffect(() => {
if (triedToEagerConnect && !active && !error) {
activate(getNetwork(requiredChainId))
}
}, [triedToEagerConnect, active, error, requiredChainId, activate])
// manage connecting state for injected connector
const [connecting, setConnecting] = useState(false)
useEffect(() => {
if (active || error) {
setConnecting(false)
onboarding.current?.stopOnboarding()
}
}, [active, error])
const [ENSName, setENSName] = useState<string>('')
useEffect(() => {
if (library && account) {
let stale = false
library
.lookupAddress(account)
.then((name) => {
if (!stale && typeof name === 'string') {
setENSName(name)
}
})
.catch(() => {}) // eslint-disable-line @typescript-eslint/no-empty-function
return (): void => {
stale = true
setENSName('')
}
}
}, [library, account, chainId])
if (error) {
return null
} else if (!triedToEagerConnect) {
return null
} else if (typeof account !== 'string') {
return (
<Box>
{/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}
{MetaMaskOnboarding.isMetaMaskInstalled() || (window as any)?.ethereum || (window as any)?.web3 ? (
<Button
isLoading={connecting}
leftIcon={MetaMaskOnboarding.isMetaMaskInstalled() ? ('metamask' as 'edit') : undefined}
onClick={(): void => {
setConnecting(true)
activate(injected, undefined, true).catch((error) => {
// ignore the error if it's a user rejected request
if (error instanceof UserRejectedRequestError) {
setConnecting(false)
} else {
setError(error)
}
})
}}
>
{MetaMaskOnboarding.isMetaMaskInstalled() ? 'Connect to MetaMask' : 'Connect to Wallet'}
</Button>
) : (
<Button leftIcon={'metamask' as 'edit'} onClick={() => onboarding.current?.startOnboarding()}>
Install Metamask
</Button>
)}
</Box>
)
}
let leftIcon: string | undefined
// check walletconnect first because sometime metamask can be installed but we're still using walletconnect
if ((library?.provider as { isWalletConnect: boolean })?.isWalletConnect) {
leftIcon = 'walletconnect'
} else if (MetaMaskOnboarding.isMetaMaskInstalled()) {
leftIcon = 'metamask'
}
return (
<Stack direction="row" spacing={0} whiteSpace="nowrap" m={0} shouldWrapChildren>
<ErrorBoundary
fallback={
<IconButton
variant="outline"
icon="warning"
aria-label="Failed"
isDisabled
cursor="default !important"
_hover={{}}
_active={{}}
style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0, borderRight: 'none' }}
/>
}
>
<Suspense
fallback={
<Button
variant="outline"
isLoading
cursor="default !important"
_hover={{}}
_active={{}}
style={{ borderTopRightRadius: 0, borderBottomRightRadius: 0, borderRight: 'none' }}
>
{null}
</Button>
}
>
<ETHBalance />
</Suspense>
</ErrorBoundary>
<Button
as="a"
leftIcon={leftIcon ? (leftIcon as 'edit') : undefined}
rightIcon="external-link"
style={{ borderTopLeftRadius: 0, borderBottomLeftRadius: 0 }}
{...{
href: formatEtherscanLink(EtherscanType.Account, [chainId as number, account]),
target: '_blank',
rel: 'noopener noreferrer',
}}
>
{ENSName || `${shortenHex(account, 4)}`}
</Button>
</Stack>
)
}