import React, { useState } from "react"; // import { formatDirectSignDoc, stringifySignDocValues } from "cosmos-wallet"; import Banner from "./components/Banner"; import Blockchain from "./components/Blockchain"; import Column from "./components/Column"; import Header from "./components/Header"; import Modal from "./components/Modal"; import { DEFAULT_MAIN_CHAINS, DEFAULT_TEST_CHAINS } from "./constants"; import { AccountAction, setInitialStateTestnet, getInitialStateTestnet } from "./helpers"; import Toggle from "./components/Toggle"; import RequestModal from "./modals/RequestModal"; import PairingModal from "./modals/PairingModal"; import PingModal from "./modals/PingModal"; import { SAccounts, SAccountsContainer, SButtonContainer, SConnectButton, SContent, SLanding, SLayout, SToggleContainer, } from "./components/app"; import { useWalletConnectClient } from "./contexts/ClientContext"; import { useJsonRpc } from "./contexts/JsonRpcContext"; export default function App() { const [isTestnet, setIsTestnet] = useState(getInitialStateTestnet()); const [modal, setModal] = useState(""); const closeModal = () => setModal(""); const openPairingModal = () => setModal("pairing"); const openPingModal = () => setModal("ping"); const openRequestModal = () => setModal("request"); const { client, session, connect, disconnect, chains, accounts, balances, fetching, loading, setChains, } = useWalletConnectClient(); const { chainData, ping, testSendTransaction, testSignPersonalMessage, testSignTypedData, isRpcRequestPending, rpcResult, } = useJsonRpc(); const onConnect = () => { if (typeof client === "undefined") { throw new Error("WalletConnect is not initialized"); } if (client.pairing.topics.length) { return openPairingModal(); } connect(); }; const onPing = async () => { openPingModal(); await ping(); }; const onSendTransaction = async (chainId: string) => { openRequestModal(); await testSendTransaction(chainId); }; const onSignPersonalMessage = async (chainId: string) => { openRequestModal(); await testSignPersonalMessage(chainId); }; const onSignTypedData = async (chainId: string) => { openRequestModal(); await testSignTypedData(chainId); }; const getEthereumActions = (): AccountAction[] => { return [ { method: "eth_sendTransaction", callback: onSendTransaction }, { method: "personal_sign", callback: onSignPersonalMessage }, { method: "eth_signTypedData", callback: onSignTypedData }, ]; }; const getCosmosActions = (): AccountAction[] => { return [ // { method: "cosmos_signDirect", callback: testSignDirect }, // { method: "cosmos_signAmino", callback: testSignAmino }, ]; }; const getBlockchainActions = (chainId: string) => { const [namespace] = chainId.split(":"); switch (namespace) { case "eip155": return getEthereumActions(); case "cosmos": return getCosmosActions(); default: break; } }; const toggleTestnets = () => { const nextIsTestnetState = !isTestnet; setIsTestnet(nextIsTestnetState); // TODO: rename "setLocalStorage..." setInitialStateTestnet(nextIsTestnetState); }; const handleChainSelectionClick = (chainId: string) => { if (chains.includes(chainId)) { setChains(chains.filter(chain => chain !== chainId)); } else { setChains([...chains, chainId]); } }; const renderModal = () => { switch (modal) { case "pairing": if (typeof client === "undefined") { throw new Error("WalletConnect is not initialized"); } return ; case "request": return ; case "ping": return ; default: return null; } }; const renderContent = () => { const chainOptions = isTestnet ? DEFAULT_TEST_CHAINS : DEFAULT_MAIN_CHAINS; return !accounts.length && !Object.keys(balances).length ? (
{`Using v${process.env.REACT_APP_VERSION || "2.0.0-beta"}`}
Select chains:

Testnets Only?

{chainOptions.map(chainId => ( ))} {"Connect"}
) : (

Accounts

{accounts.map(account => { const [namespace, reference, address] = account.split(":"); const chainId = `${namespace}:${reference}`; return ( ); })}
); }; return (
{loading ? "Loading..." : renderContent()} {renderModal()} ); }