-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathHeader.tsx
95 lines (89 loc) · 3.67 KB
/
Header.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
86
87
88
89
90
91
92
93
94
95
"use client";
import { RandomLoadingBackground } from "./RandomLoadingBackground";
import { WalletConnectProposalDrawer } from "./burnerwallet/WalletConnectProposalDrawer";
import { WalletConnectTransactionDrawer } from "./burnerwallet/WalletConnectTransactionDrawer";
import Jazzicon, { jsNumberForAddress } from "react-jazzicon";
import { useLocalStorage } from "usehooks-ts";
import { useAccount, useNetwork, useSwitchNetwork } from "wagmi";
import { NetworksDropdown } from "~~/components/NetworksDropdown";
import { ReceiveDrawer } from "~~/components/burnerwallet/ReceiveDrawer";
import { SendDrawer } from "~~/components/burnerwallet/SendDrawer";
import { SettingsDrawer } from "~~/components/burnerwallet/SettingsDrawer";
import { WalletConnectDrawer } from "~~/components/burnerwallet/WalletConnectDrawer";
import { Address, Balance } from "~~/components/scaffold-eth";
import { SCAFFOLD_CHAIN_ID_STORAGE_KEY, useAutoConnect } from "~~/hooks/scaffold-eth";
import WalletConnectIcon from "~~/icons/WalletConnectIcon";
import { useGlobalState } from "~~/services/store/store";
import { getTargetNetworks } from "~~/utils/scaffold-eth";
const networks = getTargetNetworks();
type HeaderProps = {
isGenerateWalletLoading: boolean;
showIntro: boolean;
updateHistory: () => void;
};
/**
* Site header
*/
export const Header = ({ isGenerateWalletLoading, showIntro, updateHistory }: HeaderProps) => {
useAutoConnect();
const setChainId = useLocalStorage<number>(SCAFFOLD_CHAIN_ID_STORAGE_KEY, networks[0].id)[1];
const walletConnectSession = useGlobalState(state => state.walletConnectSession);
const setIsWalletConnectOpen = useGlobalState(state => state.setIsWalletConnectOpen);
const { address: connectedAddress } = useAccount();
const { switchNetwork } = useSwitchNetwork({
onSuccess(data) {
setChainId(data.id);
},
});
const { chain } = useNetwork();
return (
<div className={"relative overflow-hidden"}>
{connectedAddress && !showIntro && (
<div className="absolute inset-0 flex items-center justify-center">
<Jazzicon
diameter={600}
paperStyles={{
borderRadius: 0,
}}
seed={jsNumberForAddress(connectedAddress)}
/>
</div>
)}
{showIntro && <RandomLoadingBackground isLoading={isGenerateWalletLoading} />}
<div className="relative z-10 p-6 glass">
<div className="flex justify-between items-center mb-6">
<SettingsDrawer />
<div className="flex">
{walletConnectSession && (
<button
className="mr-4"
onClick={() => {
setIsWalletConnectOpen(true);
}}
>
<WalletConnectIcon width="40" height="40" />
</button>
)}
<NetworksDropdown
onChange={option => switchNetwork?.(option.value)}
value={chain ? chain.id : networks[0].id}
/>
</div>
</div>
<div className="text-white">
{!showIntro && <Address address={connectedAddress} disableAddressLink size="base" format="short" />}
<div className="mt-8 mb-10 flex justify-center">
<Balance className="text-6xl" address={connectedAddress} usdMode />
</div>
</div>
<div className="flex items-center justify-center gap-6 mt-6">
<ReceiveDrawer address={connectedAddress} />
<SendDrawer address={connectedAddress} updateHistory={updateHistory} />
<WalletConnectDrawer />
<WalletConnectProposalDrawer />
<WalletConnectTransactionDrawer />
</div>
</div>
</div>
);
};