Files
Arkie-Library-Frontend/src/wallet/RainbowWalletProvider.tsx

75 lines
1.8 KiB
TypeScript
Raw Normal View History

2026-06-02 00:28:22 +08:00
import "@rainbow-me/rainbowkit/styles.css";
import {
RainbowKitProvider,
connectorsForWallets,
darkTheme,
} from "@rainbow-me/rainbowkit";
import {
imTokenWallet,
metaMaskWallet,
tokenPocketWallet,
} from "@rainbow-me/rainbowkit/wallets";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { useState, type ReactNode } from "react";
import { http, createConfig, WagmiProvider, useReconnect } from "wagmi";
import { bsc } from "wagmi/chains";
2026-06-02 00:28:22 +08:00
const projectId =
import.meta.env.VITE_WALLETCONNECT_PROJECT_ID || "ark-library-dev-only";
const connectors = connectorsForWallets(
[
{
groupName: "ARK Library",
wallets: [metaMaskWallet, imTokenWallet, tokenPocketWallet],
},
],
{
appName: "ARK Library",
projectId,
},
);
export const wagmiConfig = createConfig({
chains: [bsc],
2026-06-02 00:28:22 +08:00
connectors,
ssr: false,
transports: {
[bsc.id]: http(),
2026-06-02 00:28:22 +08:00
},
});
function WalletReconnectOnMount() {
useReconnect();
return null;
}
2026-06-02 00:28:22 +08:00
export function RainbowWalletProvider({ children }: { children: ReactNode }) {
const [queryClient] = useState(() => new QueryClient());
return (
<WagmiProvider config={wagmiConfig}>
<QueryClientProvider client={queryClient}>
<WalletReconnectOnMount />
2026-06-02 00:28:22 +08:00
<RainbowKitProvider
modalSize="compact"
theme={darkTheme({
accentColor: "#d7b46a",
accentColorForeground: "#08070c",
borderRadius: "large",
fontStack: "system",
overlayBlur: "small",
})}
>
{children}
</RainbowKitProvider>
</QueryClientProvider>
</WagmiProvider>
);
}
export function hasWalletConnectProjectId(): boolean {
return Boolean(import.meta.env.VITE_WALLETCONNECT_PROJECT_ID);
}