75 lines
2.8 KiB
TypeScript
75 lines
2.8 KiB
TypeScript
import React, { useContext } from "react";
|
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
import { faCaretRight } from "@fortawesome/free-solid-svg-icons/faCaretRight";
|
|
import { faSackDollar } from "@fortawesome/free-solid-svg-icons/faSackDollar";
|
|
import TransactionAddress from "./components/TransactionAddress";
|
|
import ValueHighlighter from "./components/ValueHighlighter";
|
|
import FormattedBalance from "./components/FormattedBalance";
|
|
import USDAmount from "./components/USDAmount";
|
|
import { RuntimeContext } from "./useRuntime";
|
|
import { useBlockNumberContext } from "./useBlockTagContext";
|
|
import { useTokenMetadata } from "./useErigonHooks";
|
|
import { useTokenUSDOracle } from "./usePriceOracle";
|
|
import { AddressContext, TokenTransfer } from "./types";
|
|
|
|
type TokenTransferItemProps = {
|
|
t: TokenTransfer;
|
|
};
|
|
|
|
const TokenTransferItem: React.FC<TokenTransferItemProps> = ({ t }) => {
|
|
const { provider } = useContext(RuntimeContext);
|
|
const blockNumber = useBlockNumberContext();
|
|
const [quote, decimals] = useTokenUSDOracle(provider, blockNumber, t.token);
|
|
const tokenMeta = useTokenMetadata(provider, t.token);
|
|
|
|
return (
|
|
<div className="flex items-baseline space-x-2 px-2 py-1 truncate hover:bg-gray-100">
|
|
<div className="grid grid-cols-4 gap-x-1 w-full items-baseline">
|
|
<div className="flex items-baseline space-x-1">
|
|
<TransactionAddress
|
|
address={t.from}
|
|
addressCtx={AddressContext.FROM}
|
|
showCodeIndicator
|
|
/>
|
|
</div>
|
|
<div className="flex items-baseline space-x-1">
|
|
<span className="text-gray-500">
|
|
<FontAwesomeIcon icon={faCaretRight} size="1x" />
|
|
</span>
|
|
<TransactionAddress
|
|
address={t.to}
|
|
addressCtx={AddressContext.TO}
|
|
showCodeIndicator
|
|
/>
|
|
</div>
|
|
<div className="col-span-2 flex items-baseline space-x-1">
|
|
<span className="text-gray-500">
|
|
<FontAwesomeIcon icon={faSackDollar} size="1x" />
|
|
</span>
|
|
<span>
|
|
<ValueHighlighter value={t.value}>
|
|
<FormattedBalance
|
|
value={t.value}
|
|
decimals={tokenMeta?.decimals ?? 0}
|
|
/>
|
|
</ValueHighlighter>
|
|
</span>
|
|
<TransactionAddress address={t.token} />
|
|
{tokenMeta && quote !== undefined && decimals !== undefined && (
|
|
<span className="px-2 border-gray-200 border rounded-lg bg-gray-100 text-gray-600">
|
|
<USDAmount
|
|
amount={t.value}
|
|
amountDecimals={tokenMeta.decimals}
|
|
quote={quote}
|
|
quoteDecimals={decimals}
|
|
/>
|
|
</span>
|
|
)}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default React.memo(TokenTransferItem);
|