/
wagmi-rainbowkit-provider.tsx
85 lines (74 loc) · 2.32 KB
/
wagmi-rainbowkit-provider.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import {
connectorsForWallets,
RainbowKitProvider,
WalletList,
} from '@rainbow-me/rainbowkit';
import { Chain, configureChains, createConfig, WagmiConfig } from 'wagmi';
import { publicProvider } from 'wagmi/providers/public';
import { jsonRpcProvider } from 'wagmi/providers/jsonRpc';
import type { ReactNode } from 'react';
import React, { useMemo } from 'react';
import { getChainsSortedByForcedNetwork, getRainbowkitChains } from './utils';
import { walletConnectorsList } from './constants';
import { useConfig } from '../base-provider';
export interface WagmiRainbowkitProviderProps {
children: ReactNode;
}
export const WagmiRainbowkitProvider = ({
children,
}: WagmiRainbowkitProviderProps) => {
const { allowedNetworkNames, allowedWallets, rainbowkitConfig, forceChain } =
useConfig();
const rainbowkitChains = useMemo(
() =>
getChainsSortedByForcedNetwork(
getRainbowkitChains(allowedNetworkNames),
forceChain
),
[allowedNetworkNames, forceChain]
);
const { chains, publicClient, webSocketPublicClient } = configureChains(
rainbowkitChains,
[
// alchemyProvider({ apiKey: process.env.ALCHEMY_ID }),
publicProvider(),
jsonRpcProvider({
rpc: (chain: Chain) => ({ http: chain.rpcUrls.default.http[0] }),
}),
]
);
const walletConnectors =
allowedWallets?.map((wallet: 'metamask' | 'valora' | 'walletconnect') => {
if (walletConnectorsList[wallet]) {
// if (wallet === 'walletconnect') {
// return walletConnectorsList.walletconnect(
// chains,
// forceChain
// ) as unknown as WalletList;
// }
const walletListFunc = walletConnectorsList[wallet];
return walletListFunc(chains) as unknown as WalletList;
}
return undefined;
}) ?? [];
const celoConnectors = connectorsForWallets(
walletConnectors as unknown as WalletList
);
const wagmiClient = createConfig({
autoConnect: true,
connectors: celoConnectors,
publicClient,
webSocketPublicClient,
});
return (
<WagmiConfig config={wagmiClient}>
<RainbowKitProvider
modalSize={rainbowkitConfig?.modalSize}
chains={rainbowkitChains}
>
{children}
</RainbowKitProvider>
</WagmiConfig>
);
};
export default WagmiRainbowkitProvider;