Solana Wallet Adapter
Last updated
'use client';
import dynamic from 'next/dynamic';
import { WalletError } from '@solana/wallet-adapter-base';
import {
ConnectionProvider,
WalletProvider,
} from '@solana/wallet-adapter-react';
import { WalletModalProvider } from '@solana/wallet-adapter-react-ui';
import { ReactNode, useCallback, useMemo } from 'react';
import { useCluster } from '../cluster/cluster-data-access';
require('@solana/wallet-adapter-react-ui/styles.css');
export const WalletButton = dynamic(
async () =>
(await import('@solana/wallet-adapter-react-ui')).WalletMultiButton,
{ ssr: false }
);
export function SolanaProvider({ children }: { children: ReactNode }) {
const { cluster } = useCluster();
const endpoint = useMemo(() => cluster.endpoint, [cluster]);
const onError = useCallback((error: WalletError) => {
console.error(error);
}, []);
return (
<ConnectionProvider endpoint={endpoint}>
<WalletProvider wallets={[]} onError={onError} autoConnect={true}>
<WalletModalProvider>{children}</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>
);
}import './global.css';
import { UiLayout } from '@/components/ui/ui-layout';
import { SolanaProvider } from '@/components/solana/solana-provider';
import { ReactQueryProvider } from './react-query-provider';
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>
<ReactQueryProvider>
<SolanaProvider>
<UiLayout>{children}</UiLayout>
</SolanaProvider>
</ReactQueryProvider>
</body>
</html>
);
}'use client';
import { WalletButton } from '../solana/solana-provider';
import * as React from 'react';
export function SimplifiedLayout() {
return (
<div>
<div className="flex-none">
<WalletButton />
</div>
</div>
);
}