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/network-switcher';
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, ETHEREUM_CHAIN_ID } = useEnvironment();
const Connectors = useMemo(
() => createConnectors(ETHEREUM_PROVIDER_URL, ETHEREUM_CHAIN_ID),
[ETHEREUM_CHAIN_ID, ETHEREUM_PROVIDER_URL]
);
return (
{config ? (
{children}
) : null}
);
};
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}
);
};