diff --git a/src/App.tsx b/src/App.tsx index 8687a45..c9f902d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -12,7 +12,14 @@ const router = createBrowserRouter([ function App() { return ( <> - + ); diff --git a/src/components/common/TransactionFailureDrawer.tsx b/src/components/common/TransactionFailureDrawer.tsx index 80dff8e..4896a14 100644 --- a/src/components/common/TransactionFailureDrawer.tsx +++ b/src/components/common/TransactionFailureDrawer.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import { Dialog, DialogContent, @@ -7,7 +7,7 @@ import { DialogFooter, } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; -import { AlertCircle, Copy } from 'lucide-react'; +import { AlertCircle, Copy, Check } from 'lucide-react'; import toast from 'react-hot-toast'; import { formatAbsoluteDateTime, formatRelativeTime } from '@/utils/time.utils'; @@ -34,9 +34,13 @@ const TransactionFailureDrawer: React.FC = ({ onRetry, onDismiss, }) => { - const copyToClipboard = (text: string) => { + const [copiedField, setCopiedField] = useState<'errorCode' | 'txHash' | null>(null); + + const copyToClipboard = (text: string, field: 'errorCode' | 'txHash') => { navigator.clipboard.writeText(text); toast.success('Copied to clipboard'); + setCopiedField(field); + setTimeout(() => setCopiedField(null), 2000); }; const handleClose = () => { @@ -100,14 +104,26 @@ const TransactionFailureDrawer: React.FC = ({ + + {copiedField === 'errorCode' ? 'Error code copied to clipboard' : ''} + )} @@ -122,14 +138,26 @@ const TransactionFailureDrawer: React.FC = ({ + + {copiedField === 'txHash' ? 'Transaction hash copied to clipboard' : ''} + )} diff --git a/src/components/common/TransactionHashRow.tsx b/src/components/common/TransactionHashRow.tsx index d51a12d..c4d67c0 100644 --- a/src/components/common/TransactionHashRow.tsx +++ b/src/components/common/TransactionHashRow.tsx @@ -46,14 +46,22 @@ const TransactionHashRow: React.FC = ({ + + {copied ? 'Transaction hash copied to clipboard' : ''} + {explorerUrl && ( = ({ > {truncate(address, prefixChars, suffixChars)} {copyable && ( - + <> + + + {copied ? 'Address copied to clipboard' : ''} + + )} );