"use client"; import { Box, VStack, HStack, Text, Heading, Button, Table, Thead, Tr, Th, Tbody, Td, Badge, useDisclosure, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, Code, Link, Select, } from "@chakra-ui/react"; import { useState } from "react"; import { useTransaction } from "../../contexts/TransactionContext"; import { TransactionRequestStatus, TransactionStatus, TransactionExecutionMethod } from "../../types"; import { utils } from "ethers"; const getStatusColor = (status: TransactionRequestStatus) => { switch (status) { case TransactionRequestStatus.SUCCESS: return "green"; case TransactionRequestStatus.FAILED: return "red"; case TransactionRequestStatus.EXECUTING: return "blue"; case TransactionRequestStatus.APPROVED: return "yellow"; case TransactionRequestStatus.REJECTED: return "red"; default: return "gray"; } }; export default function TransactionHistory() { const { transactions } = useTransaction(); const { isOpen, onOpen, onClose } = useDisclosure(); const [selectedTx, setSelectedTx] = useState(null); const [filter, setFilter] = useState("ALL"); const selectedTransaction = transactions.find((tx) => tx.id === selectedTx); const filteredTransactions = transactions.filter((tx) => { if (filter === "ALL") return true; return tx.status === filter; }); const getExplorerUrl = (hash: string, networkId: number) => { const explorers: Record = { 1: `https://etherscan.io/tx/${hash}`, 5: `https://goerli.etherscan.io/tx/${hash}`, 137: `https://polygonscan.com/tx/${hash}`, 42161: `https://arbiscan.io/tx/${hash}`, 10: `https://optimistic.etherscan.io/tx/${hash}`, 8453: `https://basescan.org/tx/${hash}`, }; return explorers[networkId] || `https://etherscan.io/tx/${hash}`; }; return ( Transaction History {filteredTransactions.length === 0 ? ( No transactions found ) : ( {filteredTransactions.map((tx) => ( ))}
ID To Value Method Status Hash Actions
{tx.id.slice(0, 10)}... {tx.to.slice(0, 10)}... {parseFloat(utils.formatEther(tx.value || "0")).toFixed(4)} ETH {tx.method} {tx.status} {tx.hash ? ( {tx.hash.slice(0, 10)}... ) : ( - )}
)} Transaction Details {selectedTransaction && ( Transaction ID {selectedTransaction.id} From {selectedTransaction.from} To {selectedTransaction.to} Value {parseFloat(utils.formatEther(selectedTransaction.value || "0")).toFixed(6)} ETH Data {selectedTransaction.data || "0x"} Status {selectedTransaction.status} Execution Method {selectedTransaction.method} {selectedTransaction.hash && ( Transaction Hash {selectedTransaction.hash} )} {selectedTransaction.error && ( Error {selectedTransaction.error} )} {selectedTransaction.executedAt && ( Executed At {new Date(selectedTransaction.executedAt).toLocaleString()} )} )}
); }