Skip to content

Commit e5c1c37

Browse files
committed
feat: replace IexecAccount component with AddressChip for address display and copy functionality
1 parent c35d330 commit e5c1c37

File tree

3 files changed

+67
-70
lines changed

3 files changed

+67
-70
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import clsx from 'clsx';
2+
import { useState } from 'react';
3+
import { getAvatarVisualNumber } from '@/utils/getAvatarVisualNumber';
4+
import { truncateAddress } from '@/utils/truncateAddress';
5+
import { Button } from '../ui/button';
6+
import {
7+
Tooltip,
8+
TooltipContent,
9+
TooltipProvider,
10+
TooltipTrigger,
11+
} from '../ui/tooltip';
12+
import avatarStyles from './profile.module.css';
13+
14+
export function AddressChip({ address }: { address: string }) {
15+
const avatarVisualBg = getAvatarVisualNumber({
16+
address,
17+
});
18+
19+
const [showTooltip, setShowTooltip] = useState(false);
20+
const [tooltipMessage, setTooltipMessage] = useState('Copy address');
21+
22+
const handleCopy = () => {
23+
navigator.clipboard.writeText(address).then(() => {
24+
setTooltipMessage('Address copied!');
25+
setShowTooltip(true);
26+
setTimeout(() => setShowTooltip(false), 2000);
27+
});
28+
};
29+
30+
const handleMouseEnter = () => {
31+
setTooltipMessage('Copy address');
32+
setShowTooltip(true);
33+
};
34+
35+
const handleMouseLeave = () => {
36+
setShowTooltip(false);
37+
};
38+
return (
39+
<TooltipProvider delayDuration={0}>
40+
<Tooltip open={showTooltip}>
41+
<TooltipTrigger asChild>
42+
<Button
43+
className="bg-grey-800 hover:bg-muted text-primary ml-2"
44+
variant="secondary"
45+
onClick={handleCopy}
46+
onMouseEnter={handleMouseEnter}
47+
onMouseLeave={handleMouseLeave}
48+
>
49+
<span className="text-sm">{truncateAddress(address)}</span>
50+
<div
51+
className={clsx(
52+
avatarStyles[avatarVisualBg],
53+
'relative z-10 size-4 rounded-full bg-black bg-cover'
54+
)}
55+
/>
56+
</Button>
57+
</TooltipTrigger>
58+
<TooltipContent side="top" className="max-w-sm">
59+
{tooltipMessage}
60+
</TooltipContent>
61+
</Tooltip>
62+
</TooltipProvider>
63+
);
64+
}

src/components/navbar/IexecAccount.tsx

Lines changed: 0 additions & 67 deletions
This file was deleted.

src/components/navbar/NavBar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
SelectTrigger,
1313
SelectValue,
1414
} from '../ui/select.tsx';
15-
import { IexecAccount } from './IexecAccount.tsx';
15+
import { AddressChip } from './AddressChip.tsx';
1616

1717
export function Navbar() {
1818
const { isConnected, address } = useUserStore();
@@ -43,7 +43,7 @@ export function Navbar() {
4343
</div>
4444
{isConnected ? (
4545
<div className="flex max-w-[1260px] items-center gap-2">
46-
<IexecAccount address={address!} />
46+
<AddressChip address={address!} />
4747

4848
<button
4949
type="button"
@@ -86,7 +86,7 @@ export function Navbar() {
8686
</Link>
8787
{isConnected ? (
8888
<div className="flex max-w-[1260px] items-center gap-2">
89-
<IexecAccount address={address!} />
89+
<AddressChip address={address!} />
9090

9191
<button
9292
type="button"

0 commit comments

Comments
 (0)