| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- import { createTheme, StyledEngineProvider, ThemeProvider } from '@mui/material';
- import { deepPurple, pink } from '@mui/material/colors';
- import { WalletModalProvider as AntDesignWalletModalProvider } from '@solana/wallet-adapter-ant-design';
- import type { WalletError } from '@solana/wallet-adapter-base';
- import { WalletAdapterNetwork } from '@solana/wallet-adapter-base';
- import { WalletDialogProvider as MaterialUIWalletDialogProvider } from '@solana/wallet-adapter-material-ui';
- import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';
- import { WalletModalProvider as ReactUIWalletModalProvider } from '@solana/wallet-adapter-react-ui';
- import { WalletConnectWalletAdapter } from '@solana/wallet-adapter-walletconnect';
- import {
- GlowWalletAdapter,
- PhantomWalletAdapter,
- SlopeWalletAdapter,
- SolflareWalletAdapter,
- TorusWalletAdapter,
- } from '@solana/wallet-adapter-wallets';
- import { clusterApiUrl } from '@solana/web3.js';
- import { SnackbarProvider, useSnackbar } from 'notistack';
- import type { FC, ReactNode } from 'react';
- import { useCallback, useMemo } from 'react';
- import { AutoConnectProvider, useAutoConnect } from './AutoConnectProvider';
- const theme = createTheme({
- palette: {
- mode: 'dark',
- primary: {
- main: deepPurple[700],
- },
- secondary: {
- main: pink[700],
- },
- },
- components: {
- MuiButtonBase: {
- styleOverrides: {
- root: {
- justifyContent: 'flex-start',
- },
- },
- },
- MuiButton: {
- styleOverrides: {
- root: {
- textTransform: 'none',
- padding: '12px 16px',
- },
- startIcon: {
- marginRight: 8,
- },
- endIcon: {
- marginLeft: 8,
- },
- },
- },
- },
- });
- const WalletContextProvider: FC<{ children: ReactNode }> = ({ children }) => {
- const { autoConnect } = useAutoConnect();
- // Can be set to 'devnet', 'testnet', or 'mainnet-beta'
- const network = WalletAdapterNetwork.Devnet;
- // You can also provide a custom RPC endpoint
- const endpoint = useMemo(() => clusterApiUrl(network), [network]);
- const wallets = useMemo(
- () => [
- new SolanaMobileWalletAdapter({
- appIdentity: { name: 'Solana Wallet Adapter Example App' },
- authorizationResultCache: createDefaultAuthorizationResultCache(),
- }),
- new PhantomWalletAdapter(),
- new GlowWalletAdapter(),
- new SlopeWalletAdapter(),
- new SolflareWalletAdapter({ network }),
- new TorusWalletAdapter(),
- new WalletConnectWalletAdapter({
- network,
- options: {
- relayUrl: 'wss://relay.walletconnect.com',
- // example WC dapp project ID
- projectId: 'e899c82be21d4acca2c8aec45e893598',
- metadata: {
- name: 'Example Dapp',
- description: 'Example Dapp',
- url: 'https://github.com/solana-labs/wallet-adapter',
- icons: ['https://avatars.githubusercontent.com/u/35608259?s=200'],
- },
- },
- }),
- ],
- []
- );
- const { enqueueSnackbar } = useSnackbar();
- const onError = useCallback(
- (error: WalletError) => {
- enqueueSnackbar(error.message ? `${error.name}: ${error.message}` : error.name, { variant: 'error' });
- console.error(error);
- },
- [enqueueSnackbar]
- );
- return (
- <ConnectionProvider endpoint={endpoint}>
- <WalletProvider wallets={wallets} onError={onError} autoConnect={autoConnect}>
- <MaterialUIWalletDialogProvider>
- <AntDesignWalletModalProvider>
- <ReactUIWalletModalProvider>{children}</ReactUIWalletModalProvider>
- </AntDesignWalletModalProvider>
- </MaterialUIWalletDialogProvider>
- </WalletProvider>
- </ConnectionProvider>
- );
- };
- export const ContextProvider: FC<{ children: ReactNode }> = ({ children }) => {
- return (
- <StyledEngineProvider injectFirst>
- <ThemeProvider theme={theme}>
- <SnackbarProvider>
- <AutoConnectProvider>
- <WalletContextProvider>{children}</WalletContextProvider>
- </AutoConnectProvider>
- </SnackbarProvider>
- </ThemeProvider>
- </StyledEngineProvider>
- );
- };
|