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;