Demo.tsx 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import { FormControlLabel, Switch, Table, TableBody, TableCell, TableHead, TableRow, Tooltip } from '@material-ui/core';
  2. import {
  3. WalletConnectButton as AntDesignWalletConnectButton,
  4. WalletDisconnectButton as AntDesignWalletDisconnectButton,
  5. WalletModalButton as AntDesignWalletModalButton,
  6. WalletModalProvider as AntDesignWalletModalProvider,
  7. WalletMultiButton as AntDesignWalletMultiButton,
  8. } from '@solana/wallet-adapter-ant-design';
  9. import { WalletAdapterNetwork, WalletError } from '@solana/wallet-adapter-base';
  10. import {
  11. WalletConnectButton as MaterialUIWalletConnectButton,
  12. WalletDialogButton as MaterialUIWalletDialogButton,
  13. WalletDialogProvider as MaterialUIWalletDialogProvider,
  14. WalletDisconnectButton as MaterialUIWalletDisconnectButton,
  15. WalletMultiButton as MaterialUIWalletMultiButton,
  16. } from '@solana/wallet-adapter-material-ui';
  17. import { ConnectionProvider, useLocalStorage, WalletProvider } from '@solana/wallet-adapter-react';
  18. import {
  19. WalletConnectButton as ReactUIWalletConnectButton,
  20. WalletDisconnectButton as ReactUIWalletDisconnectButton,
  21. WalletModalButton as ReactUIWalletModalButton,
  22. WalletModalProvider as ReactUIWalletModalProvider,
  23. WalletMultiButton as ReactUIWalletMultiButton,
  24. } from '@solana/wallet-adapter-react-ui';
  25. import {
  26. getBitpieWallet,
  27. getBloctoWallet,
  28. getCoin98Wallet,
  29. getLedgerWallet,
  30. getMathWallet,
  31. getPhantomWallet,
  32. getSafePalWallet,
  33. getSlopeWallet,
  34. getSolflareWallet,
  35. getSolflareWebWallet,
  36. getSolletWallet,
  37. getSolletWebWallet,
  38. getSolongWallet,
  39. getTorusWallet,
  40. } from '@solana/wallet-adapter-wallets';
  41. import { clusterApiUrl } from '@solana/web3.js';
  42. import { useSnackbar } from 'notistack';
  43. import React, { FC, useCallback, useMemo } from 'react';
  44. import { version } from '../package.json';
  45. import RequestAirdrop from './RequestAirdrop';
  46. import SendTransaction from './SendTransaction';
  47. import SignMessage from './SignMessage';
  48. export const Demo: FC = () => {
  49. const network = WalletAdapterNetwork.Devnet;
  50. const endpoint = useMemo(() => clusterApiUrl(network), [network]);
  51. const [autoConnect, setAutoConnect] = useLocalStorage('autoConnect', false);
  52. const wallets = useMemo(
  53. () => [
  54. getPhantomWallet(),
  55. getSolflareWallet(),
  56. getSlopeWallet(),
  57. getTorusWallet({
  58. options: {
  59. clientId: 'BOM5Cl7PXgE9Ylq1Z1tqzhpydY0RVr8k90QQ85N7AKI5QGSrr9iDC-3rvmy0K_hF0JfpLMiXoDhta68JwcxS1LQ',
  60. },
  61. }),
  62. getLedgerWallet(),
  63. getBloctoWallet({ network }),
  64. getSolletWallet({ network }),
  65. getBitpieWallet(),
  66. getCoin98Wallet(),
  67. getMathWallet(),
  68. getSafePalWallet(),
  69. getSolongWallet(),
  70. getSolflareWebWallet(),
  71. getSolletWebWallet({ network }),
  72. ],
  73. [network]
  74. );
  75. const { enqueueSnackbar } = useSnackbar();
  76. const onError = useCallback(
  77. (error: WalletError) => {
  78. enqueueSnackbar(error.message ? `${error.name}: ${error.message}` : error.name, { variant: 'error' });
  79. console.error(error);
  80. },
  81. [enqueueSnackbar]
  82. );
  83. return (
  84. <ConnectionProvider endpoint={endpoint}>
  85. <WalletProvider wallets={wallets} onError={onError} autoConnect={autoConnect}>
  86. <MaterialUIWalletDialogProvider>
  87. <AntDesignWalletModalProvider>
  88. <ReactUIWalletModalProvider>
  89. <Table>
  90. <TableHead>
  91. <TableRow>
  92. <TableCell width={240}>Component</TableCell>
  93. <TableCell width={240}>Material UI</TableCell>
  94. <TableCell width={240}>Ant Design</TableCell>
  95. <TableCell width={240}>React UI</TableCell>
  96. <TableCell>Example v{version}</TableCell>
  97. </TableRow>
  98. </TableHead>
  99. <TableBody>
  100. <TableRow>
  101. <TableCell>Connect Button</TableCell>
  102. <TableCell>
  103. <MaterialUIWalletConnectButton />
  104. </TableCell>
  105. <TableCell>
  106. <AntDesignWalletConnectButton />
  107. </TableCell>
  108. <TableCell>
  109. <ReactUIWalletConnectButton />
  110. </TableCell>
  111. <TableCell></TableCell>
  112. </TableRow>
  113. <TableRow>
  114. <TableCell>Disconnect Button</TableCell>
  115. <TableCell>
  116. <MaterialUIWalletDisconnectButton />
  117. </TableCell>
  118. <TableCell>
  119. <AntDesignWalletDisconnectButton />
  120. </TableCell>
  121. <TableCell>
  122. <ReactUIWalletDisconnectButton />
  123. </TableCell>
  124. <TableCell></TableCell>
  125. </TableRow>
  126. <TableRow>
  127. <TableCell>Dialog/Modal Button</TableCell>
  128. <TableCell>
  129. <MaterialUIWalletDialogButton />
  130. </TableCell>
  131. <TableCell>
  132. <AntDesignWalletModalButton />
  133. </TableCell>
  134. <TableCell>
  135. <ReactUIWalletModalButton />
  136. </TableCell>
  137. <TableCell></TableCell>
  138. </TableRow>
  139. <TableRow>
  140. <TableCell>Multi Button</TableCell>
  141. <TableCell>
  142. <MaterialUIWalletMultiButton />
  143. </TableCell>
  144. <TableCell>
  145. <AntDesignWalletMultiButton />
  146. </TableCell>
  147. <TableCell>
  148. <ReactUIWalletMultiButton />
  149. </TableCell>
  150. <TableCell></TableCell>
  151. </TableRow>
  152. <TableRow>
  153. <TableCell></TableCell>
  154. <TableCell>
  155. <Tooltip
  156. title="Only runs if the wallet is ready to connect"
  157. placement="left"
  158. >
  159. <FormControlLabel
  160. control={
  161. <Switch
  162. name="autoConnect"
  163. color="secondary"
  164. checked={autoConnect}
  165. onChange={(event, checked) => setAutoConnect(checked)}
  166. />
  167. }
  168. label="AutoConnect"
  169. />
  170. </Tooltip>
  171. </TableCell>
  172. <TableCell>
  173. <RequestAirdrop />
  174. </TableCell>
  175. <TableCell>
  176. <SendTransaction />
  177. </TableCell>
  178. <TableCell>
  179. <SignMessage />
  180. </TableCell>
  181. </TableRow>
  182. </TableBody>
  183. </Table>
  184. </ReactUIWalletModalProvider>
  185. </AntDesignWalletModalProvider>
  186. </MaterialUIWalletDialogProvider>
  187. </WalletProvider>
  188. </ConnectionProvider>
  189. );
  190. };