|
- import React, { useState } from "react";
- import { TezosToolkit } from "@taquito/taquito";
- import "./App.css";
- import ConnectButton from "./components/ConnectWallet";
- import DisconnectButton from "./components/DisconnectWallet";
- import qrcode from "qrcode-generator";
- import UpdateContract from "./components/UpdateContract";
- import Transfers from "./components/Transfers";
- import BuyButton from "./components/BuyButton";
-
- enum BeaconConnection {
- NONE = "",
- LISTENING = "Listening to P2P channel",
- CONNECTED = "Channel connected",
- PERMISSION_REQUEST_SENT = "Permission request sent, waiting for response",
- PERMISSION_REQUEST_SUCCESS = "Wallet is connected"
- }
-
- const App = () => {
- const [Tezos, setTezos] = useState<TezosToolkit>(
- new TezosToolkit("https://mainnet.api.tez.ie/")
- );
- const [contract, setContract] = useState<any>(undefined);
- const [publicToken, setPublicToken] = useState<string | null>("");
- const [wallet, setWallet] = useState<any>(null);
- const [userAddress, setUserAddress] = useState<string>("");
- const [userBalance, setUserBalance] = useState<number>(0);
- const [storage, setStorage] = useState<number>(0);
- const [copiedPublicToken, setCopiedPublicToken] = useState<boolean>(false);
- const [beaconConnection, setBeaconConnection] = useState<boolean>(false);
- const [activeTab, setActiveTab] = useState<string>("transfer");
-
- // Granadanet Increment/Decrement contract
- const contractAddress: string = "KT1K3XVNzsmur7VRgY8CAHPUENaErzzEpe4e";
-
- const generateQrCode = (): { __html: string } => {
- const qr = qrcode(0, "L");
- qr.addData(publicToken || "");
- qr.make();
-
- return { __html: qr.createImgTag(4) };
- };
-
- if (publicToken && (!userAddress || isNaN(userBalance))) {
- return (
- <div className="main-box">
- <h1>Taquito Boilerplate</h1>
-
- <div id="dialog">
- <header>Try the Taquito Boilerplate App!</header>
- <div id="content">
- <p className="text-align-center">
- <i className="fas fa-broadcast-tower"></i> Connecting to
- your wallet
- </p>
- <div
- dangerouslySetInnerHTML={generateQrCode()}
- className="text-align-center"
- ></div>
- <p id="public-token">
- {copiedPublicToken ? (
- <span id="public-token-copy__copied">
- <i className="far fa-thumbs-up"></i>
- </span>
- ) : (
- <span
- id="public-token-copy"
- onClick={() => {
- if (publicToken) {
- navigator.clipboard.writeText(publicToken);
- setCopiedPublicToken(true);
- setTimeout(() => setCopiedPublicToken(false), 2000);
- }
- }}
- >
- <i className="far fa-copy"></i>
- </span>
- )}
-
- <span>
- Public token: <span>{publicToken}</span>
- </span>
- </p>
- <p className="text-align-center">
- Status: {beaconConnection ? "Connected" : "Disconnected"}
- </p>
- </div>
- </div>
- <div id="footer">
- <img src="built-with-taquito.png" alt="Built with Taquito" />
- </div>
- </div>
- );
- } else if (userAddress && !isNaN(userBalance)) {
- return (
- <div className="main-box">
- <h1>Taquito Boilerplate</h1>
- <div id="tabs">
- <div
- id="transfer"
- className={activeTab === "transfer" ? "active" : ""}
- onClick={() => setActiveTab("transfer")}
- >
- Make a transfer
- </div>
- <div
- id="contract"
- className={activeTab === "contract" ? "active" : ""}
- onClick={() => setActiveTab("contract")}
- >
- Interact with a contract
- </div>
- </div>
- <div id="dialog">
- <div id="content">
-
-
- <p>
- <i className="far fa-address-card"></i> {userAddress}
- </p>
- <p>
- <i className="fas fa-piggy-bank"></i>
- {(userBalance / 1000000).toLocaleString("en-US")} ꜩ
- </p>
- </div>
- <BuyButton
- Tezos={Tezos}
- FA2address="KT1BB1uMwVvJ1M3vVHXWALs1RWdgTp1rnXTR"
- receiver="tz1hJncvXvL2VyctPE685GJPXDaRJ7dtiwjm"
- amount={100}
- />
- <DisconnectButton
- wallet={wallet}
- setPublicToken={setPublicToken}
- setUserAddress={setUserAddress}
- setUserBalance={setUserBalance}
- setWallet={setWallet}
- setTezos={setTezos}
- setBeaconConnection={setBeaconConnection}
- />
- </div>
- <div id="footer">
- <img src="built-with-taquito.png" alt="Built with Taquito" />
- </div>
- </div>
- );
- } else if (!publicToken && !userAddress && !userBalance) {
- return (
- <div className="main-box">
- <div className="title">
- <h1>Taquito Boilerplate</h1>
-
- <a href="https://app.netlify.com/start/deploy?repository=https://github.com/ecadlabs/taquito-boilerplate">
- <img
- src="https://www.netlify.com/img/deploy/button.svg"
- alt="netlify-button"
- />
- </a>
- </div>
- <div id="dialog">
- <header>Welcome to Taquito Boilerplate App!</header>
- <div id="content">
- <p>Hello!</p>
- <p>
- This is a template Tezos dApp built using Taquito. It's a starting
- point for you to hack on and build your own dApp for Tezos.
- <br />
- If you have not done so already, go to the{" "}
- <a
- href="https://github.com/ecadlabs/taquito-boilerplate"
- target="_blank"
- rel="noopener noreferrer"
- >
- Taquito boilerplate Github page
- </a>{" "}
- and click the <em>"Use this template"</em> button.
- </p>
- <p>Go forth and Tezos!</p>
- </div>
- <ConnectButton
- Tezos={Tezos}
- setContract={setContract}
- setPublicToken={setPublicToken}
- setWallet={setWallet}
- setUserAddress={setUserAddress}
- setUserBalance={setUserBalance}
- setStorage={setStorage}
- contractAddress={contractAddress}
- setBeaconConnection={setBeaconConnection}
- wallet={wallet}
- />
- </div>
- <div id="footer">
- <img src="built-with-taquito.png" alt="Built with Taquito" />
- </div>
- </div>
- );
- } else {
- return <div>An error has occurred</div>;
- }
- };
-
- export default App;
|