import React, { useCallback } from 'react' import { Chain, Token } from '@/utils/types' import { Address } from 'viem' import { getTransactionExplorerLink } from './components/TransactionExplorerLink' import { TransactionPayloadDetail } from './components/TransactionPayloadDetail' import { Completed } from './components/Completed' import { EstimatedDuration } from './components/EstimatedDuration' import TransactionArrow from '../../icons/TransactionArrow' export enum TransactionType { PENDING, HISTORICAL, } export enum TransactionStatus { PENDING_WALLET_ACTION, INITIALIZING, PENDING, COMPLETED, } export interface TransactionProps { connectedAddress: Address destinationAddress?: Address originChain: Chain originToken: Token originValue: string | number destinationChain: Chain destinationToken: Token destinationValue?: string | number startedTimestamp: number completedTimestamp?: number estimatedDuration?: number timeRemaining?: number transactionStatus?: TransactionStatus transactionType: TransactionType transactionHash?: string kappa?: string children?: React.ReactNode isCompleted?: boolean disabled: boolean } export const Transaction = React.memo( ({ connectedAddress, destinationAddress, originChain, originToken, originValue, destinationChain, destinationToken, destinationValue, startedTimestamp, completedTimestamp, estimatedDuration, timeRemaining, transactionStatus, transactionType, transactionHash, kappa, children, isCompleted, disabled, }: TransactionProps) => { const handleExplorerClick: () => void = useCallback(() => { if (kappa && originChain && destinationChain) { const explorerLink: string = getTransactionExplorerLink({ kappa, fromChainId: originChain.id, toChainId: destinationChain.id, }) window.open(explorerLink, '_blank', 'noopener,noreferrer') } }, [ kappa, originChain, destinationChain, transactionStatus, transactionHash, ]) return (