From 92b664a1b8d866f0f09c24e571f0b7cc2db6d368 Mon Sep 17 00:00:00 2001 From: LuyandraBranco Date: Wed, 14 Jan 2026 21:48:10 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor:=20copyable=20add?= =?UTF-8?q?ress=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../copyable-address.types.ts | 6 +++ .../shared/copyable-address/index.tsx | 45 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/components/shared/copyable-address/copyable-address.types.ts create mode 100644 src/components/shared/copyable-address/index.tsx diff --git a/src/components/shared/copyable-address/copyable-address.types.ts b/src/components/shared/copyable-address/copyable-address.types.ts new file mode 100644 index 00000000..63edd53b --- /dev/null +++ b/src/components/shared/copyable-address/copyable-address.types.ts @@ -0,0 +1,6 @@ +export interface CopyableAddressProps { + address: string + showFull?: boolean + showLabel?: boolean + className?: string +} \ No newline at end of file diff --git a/src/components/shared/copyable-address/index.tsx b/src/components/shared/copyable-address/index.tsx new file mode 100644 index 00000000..614a9183 --- /dev/null +++ b/src/components/shared/copyable-address/index.tsx @@ -0,0 +1,45 @@ +"use client" + +import { FC } from "react" +import { Check, Copy } from "lucide-react" + +import { cn } from "@/utils" +import { formatAddress } from "@mysten/sui/utils" +import { useResolveSuiNSName } from "@mysten/dapp-kit" +import { useClipboard } from "@/hooks/use-clipboard" +import { getWalletLabel } from "@/constants/wallet-labels" +import { CopyableAddressProps } from "./copyable-address.types" + + +const CopyableAddress: FC = ({ address, showFull = false, showLabel = true, className }) => { + const { copy, copied } = useClipboard() + const label = showLabel ? getWalletLabel(address) : undefined + // const { data: suins } = useResolveSuiNSName(label ? undefined : address) + + // priority: label, suins, formatted address + const displayName = label || (showFull ? address : formatAddress(address)) + + return ( +
copy(address)} + > + + {displayName} + + + {copied ? : } +
+ ) +} + +export default CopyableAddress; \ No newline at end of file