-
Notifications
You must be signed in to change notification settings - Fork 117
Expand file tree
/
Copy pathWalletKitContextProvider.tsx
More file actions
96 lines (80 loc) · 2.94 KB
/
WalletKitContextProvider.tsx
File metadata and controls
96 lines (80 loc) · 2.94 KB
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
86
87
88
89
90
91
92
93
94
95
96
"use client";
import { createContext, useEffect, useState } from "react";
import { useStore } from "@/store/useStore";
import { StellarWalletsKit } from "@creit-tech/stellar-wallets-kit/sdk";
import { AlbedoModule } from "@creit-tech/stellar-wallets-kit/modules/albedo";
import { FreighterModule } from "@creit-tech/stellar-wallets-kit/modules/freighter";
import { HanaModule } from "@creit-tech/stellar-wallets-kit/modules/hana";
import { LobstrModule } from "@creit-tech/stellar-wallets-kit/modules/lobstr";
import { RabetModule } from "@creit-tech/stellar-wallets-kit/modules/rabet";
import { HotWalletModule } from "@creit-tech/stellar-wallets-kit/modules/hotwallet";
import { xBullModule } from "@creit-tech/stellar-wallets-kit/modules/xbull";
import { LedgerModule } from "@creit-tech/stellar-wallets-kit/modules/ledger";
import { getWalletKitNetwork } from "@/helpers/getWalletKitNetwork";
import { localStorageSavedTheme } from "@/helpers/localStorageSavedTheme";
import { localStorageSavedWallet } from "@/helpers/localStorageSavedWallet";
import { SavedWallet } from "@/types/types";
type WalletKitProps = {
isInitialized: boolean;
walletId?: string;
};
export const WalletKitContext = createContext<WalletKitProps>({
isInitialized: false,
});
export const WalletKitContextProvider = ({
children,
}: {
children: React.ReactNode;
}) => {
const { network, theme, setTheme } = useStore();
const [savedWallet, setSavedWallet] = useState<SavedWallet | null>(null);
const [isInitialized, setIsInitialized] = useState(false);
const networkType = getWalletKitNetwork(network.id);
useEffect(() => {
const savedTheme = localStorageSavedTheme.get();
if (savedTheme) {
setTheme(savedTheme);
}
// Run only when component mounts
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
useEffect(() => {
const savedWallet = localStorageSavedWallet.get();
if (savedWallet && savedWallet.network.id === network.id) {
setSavedWallet(savedWallet);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
useEffect(() => {
// Only initialize on client side to avoid "window is not defined" errors in terminal
if (typeof window === "undefined") {
return;
}
const TEST_MODULES = [
new AlbedoModule(),
new xBullModule(),
new FreighterModule(),
new LobstrModule(),
new RabetModule(),
new HanaModule(),
new LedgerModule(),
];
const PROD_MODULES = [...TEST_MODULES, new HotWalletModule()];
StellarWalletsKit.init({
modules: network.id === "mainnet" ? PROD_MODULES : TEST_MODULES,
network: networkType,
selectedWalletId: savedWallet?.id,
});
setIsInitialized(true);
}, [network.id, networkType, savedWallet?.id, theme]);
return (
<WalletKitContext.Provider
value={{
isInitialized,
walletId: savedWallet?.id,
}}
>
{children}
</WalletKitContext.Provider>
);
};