import React, { useState, useEffect, useContext } from "react"; import { Card, Row, Col, Container, Spinner } from "react-bootstrap"; import { useParams } from "react-router-dom"; import HashDisp from "src/components/Misc/Disp/HashDisp/HashDisp"; import { QueryPreservingLink } from "src/services/network/networkProvider"; import { NetworkContext } from "src/services/network/networkProvider"; import { TransactionDetails } from "src/typings/api"; import { qaToZil, hexAddrToZilAddr } from "src/utils/Utils"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faExclamationCircle, faExchangeAlt, faFileContract, } from "@fortawesome/free-solid-svg-icons"; import InfoTabs, { generateTabsFromTxnDetails, } from "../Misc/InfoTabs/InfoTabs"; import LabelStar from "../Misc/LabelComponent/LabelStar"; import NotFoundPage from "../../ErrorPages/NotFoundPage"; import ViewBlockLink from "../Misc/ViewBlockLink/ViewBlockLink"; import TransactionFlow from "./TransactionFlowNew"; import "./TxnDetailsPage.css"; const TxnDetailsPage: React.FC = () => { const { txnHash } = useParams<{ txnHash: string }>(); const networkContext = useContext(NetworkContext); if (!networkContext) { return (
); } const { dataService, networkUrl } = networkContext; const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [data, setData] = useState(null); // Fetch data useEffect(() => { if (!dataService) return; let receivedData: TransactionDetails; const getData = async () => { try { setIsLoading(true); receivedData = await dataService.getTransactionDetails(txnHash); if (receivedData) { setData(receivedData); } } catch (e) { console.error(e); setError("An error occurred - please see console for details"); // TODO: Extract the correct error information from the exception and use it } finally { setIsLoading(false); } }; getData(); return () => { setData(null); setError(null); }; }, [dataService, txnHash]); return ( <> {isLoading ? (
) : null} {error ? ( ) : ( data && data.txn.txParams.receipt && ( <>

{data.txn.txParams.receipt.success === undefined || data.txn.txParams.receipt.success ? ( ) : ( )} Transaction

From: {hexAddrToZilAddr(data.txn.senderAddress)}
To: {data.contractAddr ? ( data.txn.txParams.receipt.success ? ( {" "} {hexAddrToZilAddr(data.contractAddr)} ) : ( {hexAddrToZilAddr(data.txn.txParams.toAddr)} ) ) : ( {hexAddrToZilAddr(data.txn.txParams.toAddr)} )}
Amount: {qaToZil(data.txn.txParams.amount.toString())}
Nonce: {data.txn.txParams.nonce}
Gas Limit: {data.txn.txParams.gasLimit.toString()}
Gas Price: {qaToZil(data.txn.txParams.gasPrice.toString())}
Transaction Fee: {data.txn.txParams.receipt ? qaToZil( Number(data.txn.txParams.gasPrice) * data.txn.txParams.receipt.cumulative_gas ) : "N/A"}
Transaction Block: {data.txn.txParams.receipt.epoch_num}
Success: {`${data.txn.txParams.receipt.success}`}
{data.txn.txParams.receipt.accepted !== undefined && (
Accepts $ZIL: {`${data.txn.txParams.receipt.accepted}`}
)}
) )} ); }; export default TxnDetailsPage;