import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import utc from "dayjs/plugin/utc"; import { ArrowDownIcon, ArrowUpIcon, ExternalLinkIcon } from "lucide-react"; import { FormattedBitcoinAmount } from "src/components/FormattedBitcoinAmount"; import FormattedFiatAmount from "src/components/FormattedFiatAmount"; import { TransactionDetailRow } from "src/components/TransactionDetailRow"; import { ExternalLinkButton } from "src/components/ui/custom/external-link-button"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "src/components/ui/dialog"; import { cn } from "src/lib/utils"; import { OnchainTransaction } from "src/types"; dayjs.extend(relativeTime); dayjs.extend(utc); type OnchainTransactionItemProps = { tx: OnchainTransaction; mempoolUrl?: string; }; function typeStateLabel(tx: OnchainTransaction) { if (tx.type === "outgoing") { return tx.state === "confirmed" ? "Sent" : "Sending"; } return tx.state === "confirmed" ? "Received" : "Receiving"; } function OnchainTransactionItem({ tx, mempoolUrl, }: OnchainTransactionItemProps) { const Icon = tx.type === "outgoing" ? ArrowUpIcon : ArrowDownIcon; const isPending = tx.state === "unconfirmed"; const typeStateText = typeStateLabel(tx); const statusText = isPending ? "Pending" : "Confirmed"; const createdAt = dayjs(tx.createdAt * 1000).local(); const icon = (