import { AsyncRenderer, Button, Splash } from '@vegaprotocol/ui-toolkit'; import { Web3Provider, Web3ConnectDialog, useEthereumConfig, } from '@vegaprotocol/web3'; import { useWeb3React } from '@web3-react/core'; import type { ReactNode } from 'react'; import { useEffect, useState, useMemo } from 'react'; import { t } from '@vegaprotocol/react-helpers'; import { useEnvironment } from '@vegaprotocol/environment'; import { createConnectors } from '../../lib/web3-connectors'; interface Web3ContainerProps { children: ReactNode; } export const Web3Container = ({ children }: Web3ContainerProps) => { const [dialogOpen, setDialogOpen] = useState(false); const { config, loading, error } = useEthereumConfig(); const { ETHEREUM_PROVIDER_URL } = useEnvironment(); const Connectors = useMemo(() => { if (config?.chain_id) { return createConnectors(ETHEREUM_PROVIDER_URL, Number(config?.chain_id)); } }, [config?.chain_id, ETHEREUM_PROVIDER_URL]); return ( {Connectors && config && ( {children} )} ); }; interface Web3ContentProps { children: ReactNode; appChainId: number; setDialogOpen: (isOpen: boolean) => void; } export const Web3Content = ({ children, appChainId, setDialogOpen, }: Web3ContentProps) => { const { isActive, error, connector, chainId } = useWeb3React(); useEffect(() => { if (connector?.connectEagerly && !('Cypress' in window)) { connector.connectEagerly(); } }, [connector]); if (error) { return (

{t(`Something went wrong: ${error.message}`)}

); } if (!isActive) { return (

{t('Connect your Ethereum wallet')}

); } if (chainId !== appChainId) { return (

{t(`This app only works on chain ID: ${appChainId}`)}

); } return <>{children}; }; interface SplashWrapperProps { children: ReactNode; } const SplashWrapper = ({ children }: SplashWrapperProps) => { return (
{children}
); };