"use client";
import {
WalletProvider,
ConnectionProvider,
} from "@solana/wallet-adapter-react";
import {
PhantomWalletAdapter,
SolflareWalletAdapter,
LedgerWalletAdapter,
} from "@solana/wallet-adapter-wallets";
import { useMemo } from "react";
import { clusterApiUrl, Commitment } from "@solana/web3.js";
import dynamic from "next/dynamic";
// Import wallet adapter styles
import "@solana/wallet-adapter-react-ui/styles.css";
// Dynamic import to avoid SSR issues
const WalletModalProvider = dynamic(
() =>
import("@solana/wallet-adapter-react-ui").then(
({ WalletModalProvider }) => WalletModalProvider
),
{ ssr: false }
);
export const Wallet = ({ children }: { children: React.ReactNode }) => {
// Use environment variable or default to devnet
const endpoint =
process.env.NEXT_PUBLIC_SOLANA_RPC_URL || clusterApiUrl("devnet");
// Connection configuration
const config: {
commitment: Commitment;
wsEndpoint: string;
confirmTransactionInitialTimeout: number;
} = {
commitment: "confirmed",
wsEndpoint: endpoint.replace("https", "wss"),
confirmTransactionInitialTimeout: 60000,
};
// Initialize wallet adapters
const wallets = useMemo(
() => [
new PhantomWalletAdapter(),
new SolflareWalletAdapter(),
new LedgerWalletAdapter(),
],
[]
);
return (
<ConnectionProvider endpoint={endpoint} config={config}>
<WalletProvider wallets={wallets} autoConnect={true}>
<WalletModalProvider>
{children}
</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>
);
};
export default Wallet;