-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathApp.tsx
108 lines (95 loc) · 3.99 KB
/
App.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
96
97
98
99
100
101
102
103
104
105
106
107
108
import { DeflyWalletConnect } from '@blockshake/defly-connect'
import { DaffiWalletConnect } from '@daffiwallet/connect'
import { PeraWalletConnect } from '@perawallet/connect'
import { PROVIDER_ID, ProvidersArray, WalletProvider, useInitializeProviders, useWallet } from '@txnlab/use-wallet'
import algosdk from 'algosdk'
import { SnackbarProvider } from 'notistack'
import { useState } from 'react'
import AppCalls from './components/AppCalls'
import ConnectWallet from './components/ConnectWallet'
import Transact from './components/Transact'
import { getAlgodConfigFromViteEnvironment } from './utils/network/getAlgoClientConfigs'
let providersArray: ProvidersArray
if (import.meta.env.VITE_ALGOD_NETWORK === '') {
providersArray = [{ id: PROVIDER_ID.KMD }]
} else {
providersArray = [
{ id: PROVIDER_ID.DEFLY, clientStatic: DeflyWalletConnect },
{ id: PROVIDER_ID.PERA, clientStatic: PeraWalletConnect },
{ id: PROVIDER_ID.DAFFI, clientStatic: DaffiWalletConnect },
{ id: PROVIDER_ID.EXODUS },
// If you are interested in WalletConnect v2 provider
// refer to https://github.com/TxnLab/use-wallet for detailed integration instructions
]
}
export default function App() {
const [openWalletModal, setOpenWalletModal] = useState<boolean>(false)
const [openDemoModal, setOpenDemoModal] = useState<boolean>(false)
const [appCallsDemoModal, setAppCallsDemoModal] = useState<boolean>(false)
const { activeAddress } = useWallet()
const toggleWalletModal = () => {
setOpenWalletModal(!openWalletModal)
}
const toggleDemoModal = () => {
setOpenDemoModal(!openDemoModal)
}
const toggleAppCallsModal = () => {
setAppCallsDemoModal(!appCallsDemoModal)
}
const algodConfig = getAlgodConfigFromViteEnvironment()
const walletProviders = useInitializeProviders({
providers: providersArray,
nodeConfig: {
network: algodConfig.network,
nodeServer: algodConfig.server,
nodePort: String(algodConfig.port),
nodeToken: String(algodConfig.token),
},
algosdkStatic: algosdk,
})
return (
<SnackbarProvider maxSnack={3}>
<WalletProvider value={walletProviders}>
<div className="hero min-h-screen bg-teal-400">
<div className="hero-content text-center rounded-lg p-6 max-w-md bg-white mx-auto">
<div className="max-w-md">
<h1 className="text-4xl">
Welcome to <div className="font-bold">AlgoKit 🙂</div>
</h1>
<p className="py-6">
This starter has been generated using official AlgoKit React template. Refer to the resource below for next steps.
</p>
<div className="grid">
<a
data-test-id="getting-started"
className="btn btn-primary m-2"
target="_blank"
href="https://github.com/algorandfoundation/algokit-cli"
>
Getting started
</a>
<div className="divider" />
<button data-test-id="connect-wallet" className="btn m-2" onClick={toggleWalletModal}>
Wallet Connection
</button>
{activeAddress && (
<button data-test-id="transactions-demo" className="btn m-2" onClick={toggleDemoModal}>
Transactions Demo
</button>
)}
{activeAddress && (
<button data-test-id="appcalls-demo" className="btn m-2" onClick={toggleAppCallsModal}>
Contract Interactions Demo
</button>
)}
</div>
<ConnectWallet openModal={openWalletModal} closeModal={toggleWalletModal} />
<Transact openModal={openDemoModal} setModalState={setOpenDemoModal} />
<AppCalls openModal={appCallsDemoModal} setModalState={setAppCallsDemoModal} />
</div>
</div>
</div>
</WalletProvider>
</SnackbarProvider>
)
}