Commit b6c13683 authored by vignesh mohankumar's avatar vignesh mohankumar Committed by GitHub

fix: show copied text where address was clicked (#4646)

* pos x

* working

* tooltip width
parent 8c947a0e
...@@ -2,7 +2,7 @@ import { Trans } from '@lingui/macro' ...@@ -2,7 +2,7 @@ import { Trans } from '@lingui/macro'
import { outboundLink } from 'components/analytics' import { outboundLink } from 'components/analytics'
import { MOBILE_MEDIA_BREAKPOINT } from 'components/Tokens/constants' import { MOBILE_MEDIA_BREAKPOINT } from 'components/Tokens/constants'
import useCopyClipboard from 'hooks/useCopyClipboard' import useCopyClipboard from 'hooks/useCopyClipboard'
import React, { forwardRef, HTMLProps, ReactNode, useCallback, useImperativeHandle } from 'react' import React, { forwardRef, HTMLProps, ReactNode, useCallback, useImperativeHandle, useState } from 'react'
import { import {
ArrowLeft, ArrowLeft,
CheckCircle, CheckCircle,
...@@ -209,12 +209,15 @@ export function ExternalLinkIcon({ ...@@ -209,12 +209,15 @@ export function ExternalLinkIcon({
) )
} }
const ToolTipWrapper = styled.div<{ isCopyContractTooltip?: boolean }>` const TOOLTIP_WIDTH = 60
const ToolTipWrapper = styled.div<{ isCopyContractTooltip?: boolean; tooltipX?: number }>`
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
position: ${({ isCopyContractTooltip }) => (isCopyContractTooltip ? 'relative' : 'absolute')}; position: absolute;
right: ${({ isCopyContractTooltip }) => isCopyContractTooltip && '50%'}; left: ${({ isCopyContractTooltip, tooltipX }) =>
isCopyContractTooltip && (tooltipX ? `${tooltipX - TOOLTIP_WIDTH / 2}px` : '50%')};
transform: translate(5px, 32px); transform: translate(5px, 32px);
z-index: ${Z_INDEX.tooltip}; z-index: ${Z_INDEX.tooltip};
` `
...@@ -229,7 +232,7 @@ const CopiedTooltip = styled.div<{ isCopyContractTooltip?: boolean }>` ...@@ -229,7 +232,7 @@ const CopiedTooltip = styled.div<{ isCopyContractTooltip?: boolean }>`
background-color: ${({ theme }) => theme.black}; background-color: ${({ theme }) => theme.black};
text-align: center; text-align: center;
justify-content: center; justify-content: center;
width: ${({ isCopyContractTooltip }) => !isCopyContractTooltip && '60px'}; width: ${({ isCopyContractTooltip }) => !isCopyContractTooltip && `${TOOLTIP_WIDTH}px`};
height: ${({ isCopyContractTooltip }) => !isCopyContractTooltip && '32px'}; height: ${({ isCopyContractTooltip }) => !isCopyContractTooltip && '32px'};
line-height: ${({ isCopyContractTooltip }) => !isCopyContractTooltip && '32px'}; line-height: ${({ isCopyContractTooltip }) => !isCopyContractTooltip && '32px'};
...@@ -240,9 +243,9 @@ const CopiedTooltip = styled.div<{ isCopyContractTooltip?: boolean }>` ...@@ -240,9 +243,9 @@ const CopiedTooltip = styled.div<{ isCopyContractTooltip?: boolean }>`
font-size: 12px; font-size: 12px;
` `
function Tooltip({ isCopyContractTooltip }: { isCopyContractTooltip: boolean }) { function Tooltip({ isCopyContractTooltip, tooltipX }: { isCopyContractTooltip: boolean; tooltipX?: number }) {
return ( return (
<ToolTipWrapper isCopyContractTooltip={isCopyContractTooltip}> <ToolTipWrapper isCopyContractTooltip={isCopyContractTooltip} tooltipX={tooltipX}>
<StyledTooltipTriangle /> <StyledTooltipTriangle />
<CopiedTooltip isCopyContractTooltip={isCopyContractTooltip}>Copied!</CopiedTooltip> <CopiedTooltip isCopyContractTooltip={isCopyContractTooltip}>Copied!</CopiedTooltip>
</ToolTipWrapper> </ToolTipWrapper>
...@@ -295,7 +298,6 @@ const CopyAddressRow = styled.div<{ isClicked: boolean }>` ...@@ -295,7 +298,6 @@ const CopyAddressRow = styled.div<{ isClicked: boolean }>`
` `
const CopyContractAddressWrapper = styled.div` const CopyContractAddressWrapper = styled.div`
position: relative;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
display: flex; display: flex;
...@@ -303,9 +305,14 @@ const CopyContractAddressWrapper = styled.div` ...@@ -303,9 +305,14 @@ const CopyContractAddressWrapper = styled.div`
export function CopyContractAddress({ address }: { address: string }) { export function CopyContractAddress({ address }: { address: string }) {
const [isCopied, setCopied] = useCopyClipboard() const [isCopied, setCopied] = useCopyClipboard()
const copy = useCallback(() => { const [tooltipX, setTooltipX] = useState<number | undefined>()
setCopied(address) const copy = useCallback(
}, [address, setCopied]) (e: React.MouseEvent<HTMLElement>) => {
setTooltipX(e.clientX)
setCopied(address)
},
[address, setCopied]
)
const truncated = `${address.slice(0, 4)}...${address.slice(-3)}` const truncated = `${address.slice(0, 4)}...${address.slice(-3)}`
return ( return (
...@@ -315,7 +322,7 @@ export function CopyContractAddress({ address }: { address: string }) { ...@@ -315,7 +322,7 @@ export function CopyContractAddress({ address }: { address: string }) {
<TruncatedAddress>{truncated}</TruncatedAddress> <TruncatedAddress>{truncated}</TruncatedAddress>
<Copy size={14} /> <Copy size={14} />
</CopyAddressRow> </CopyAddressRow>
{isCopied && <Tooltip isCopyContractTooltip={true} />} {isCopied && <Tooltip isCopyContractTooltip tooltipX={tooltipX} />}
</CopyContractAddressWrapper> </CopyContractAddressWrapper>
) )
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment