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 (
{children}
);
};
export const ContextProvider: FC<{ children: ReactNode }> = ({ children }) => {
return (
{children}
);
};