Commit 062f16fb authored by isstuev's avatar isstuev

Add tips to score, explorers, domains

parent dd93c2bc
import { Box, Button, chakra, Flex, Grid, Hide, Popover, PopoverBody, PopoverContent, PopoverTrigger, Show, Skeleton, useDisclosure } from '@chakra-ui/react'; import {
Box,
Button,
Flex,
Grid,
Hide,
Popover,
PopoverBody,
PopoverContent,
PopoverTrigger,
Show,
Skeleton,
useDisclosure,
chakra,
} from '@chakra-ui/react';
import _clamp from 'lodash/clamp'; import _clamp from 'lodash/clamp';
import React from 'react'; import React from 'react';
...@@ -12,6 +26,7 @@ import dayjs from 'lib/date/dayjs'; ...@@ -12,6 +26,7 @@ import dayjs from 'lib/date/dayjs';
import EnsEntity from 'ui/shared/entities/ens/EnsEntity'; import EnsEntity from 'ui/shared/entities/ens/EnsEntity';
import IconSvg from 'ui/shared/IconSvg'; import IconSvg from 'ui/shared/IconSvg';
import LinkInternal from 'ui/shared/LinkInternal'; import LinkInternal from 'ui/shared/LinkInternal';
import PopoverTriggerTooltip from 'ui/shared/PopoverTriggerTooltip';
interface Props { interface Props {
addressHash: string; addressHash: string;
...@@ -90,25 +105,27 @@ const AddressEnsDomains = ({ addressHash, mainDomainName }: Props) => { ...@@ -90,25 +105,27 @@ const AddressEnsDomains = ({ addressHash, mainDomainName }: Props) => {
return ( return (
<Popover isOpen={ isOpen } onClose={ onClose } placement="bottom-start" isLazy> <Popover isOpen={ isOpen } onClose={ onClose } placement="bottom-start" isLazy>
<PopoverTrigger> <PopoverTrigger>
<Button <PopoverTriggerTooltip label="List of names resolved or owned by this address">
size="sm" <Button
variant="outline" size="sm"
colorScheme="gray" variant="outline"
onClick={ onToggle } colorScheme="gray"
aria-label="Address domains" onClick={ onToggle }
fontWeight={ 500 } aria-label="Address domains"
px={ 2 } fontWeight={ 500 }
h="32px" px={ 2 }
flexShrink={ 0 } h="32px"
> flexShrink={ 0 }
<IconSvg name="ENS_slim" boxSize={ 5 }/> >
<Show above="xl"> <IconSvg name="ENS_slim" boxSize={ 5 }/>
<chakra.span ml={ 1 }>{ totalRecords } Domain{ data.items.length > 1 ? 's' : '' }</chakra.span> <Show above="xl">
</Show> <chakra.span ml={ 1 }>{ totalRecords } Domain{ data.items.length > 1 ? 's' : '' }</chakra.span>
<Hide above="xl"> </Show>
<chakra.span ml={ 1 }>{ totalRecords }</chakra.span> <Hide above="xl">
</Hide> <chakra.span ml={ 1 }>{ totalRecords }</chakra.span>
</Button> </Hide>
</Button>
</PopoverTriggerTooltip>
</PopoverTrigger> </PopoverTrigger>
<PopoverContent w={{ base: '100vw', lg: '500px' }}> <PopoverContent w={{ base: '100vw', lg: '500px' }}>
<PopoverBody px={ 6 } py={ 5 } fontSize="sm" display="flex" flexDir="column" rowGap={ 5 } alignItems="flex-start"> <PopoverBody px={ 6 } py={ 5 } fontSize="sm" display="flex" flexDir="column" rowGap={ 5 } alignItems="flex-start">
......
...@@ -20,6 +20,7 @@ import config from 'configs/app'; ...@@ -20,6 +20,7 @@ import config from 'configs/app';
import stripTrailingSlash from 'lib/stripTrailingSlash'; import stripTrailingSlash from 'lib/stripTrailingSlash';
import IconSvg from 'ui/shared/IconSvg'; import IconSvg from 'ui/shared/IconSvg';
import LinkExternal from 'ui/shared/LinkExternal'; import LinkExternal from 'ui/shared/LinkExternal';
import PopoverTriggerTooltip from 'ui/shared/PopoverTriggerTooltip';
interface Props { interface Props {
className?: string; className?: string;
...@@ -55,26 +56,27 @@ const NetworkExplorers = ({ className, type, pathParam }: Props) => { ...@@ -55,26 +56,27 @@ const NetworkExplorers = ({ className, type, pathParam }: Props) => {
return ( return (
<Popover isOpen={ isOpen } onClose={ onClose } placement="bottom-start" isLazy> <Popover isOpen={ isOpen } onClose={ onClose } placement="bottom-start" isLazy>
<PopoverTrigger> <PopoverTrigger>
<Button <PopoverTriggerTooltip label="Verify with other explorers" className={ className }>
className={ className } <Button
size="sm" size="sm"
variant="outline" variant="outline"
colorScheme="gray" colorScheme="gray"
onClick={ onToggle } onClick={ onToggle }
aria-label="Verify in other explorers" aria-label="Verify in other explorers"
fontWeight={ 500 } fontWeight={ 500 }
px={ 2 } px={ 2 }
h="32px" h="32px"
flexShrink={ 0 } flexShrink={ 0 }
> >
<IconSvg name="explorer" boxSize={ 5 }/> <IconSvg name="explorer" boxSize={ 5 }/>
<Show above="xl"> <Show above="xl">
<chakra.span ml={ 1 }>{ explorersLinks.length } Explorer{ explorersLinks.length > 1 ? 's' : '' }</chakra.span> <chakra.span ml={ 1 }>{ explorersLinks.length } Explorer{ explorersLinks.length > 1 ? 's' : '' }</chakra.span>
</Show> </Show>
<Hide above="xl"> <Hide above="xl">
<chakra.span ml={ 1 }>{ explorersLinks.length }</chakra.span> <chakra.span ml={ 1 }>{ explorersLinks.length }</chakra.span>
</Hide> </Hide>
</Button> </Button>
</PopoverTriggerTooltip>
</PopoverTrigger> </PopoverTrigger>
<PopoverContent w="auto"> <PopoverContent w="auto">
<PopoverBody > <PopoverBody >
......
import { Skeleton, Tooltip, chakra } from '@chakra-ui/react';
import React from 'react';
import useIsMobile from 'lib/hooks/useIsMobile';
type Props = {
label: string;
isLoading?: boolean;
className?: string;
children: React.ReactNode;
}
const PopoverTriggerTooltip = ({ label, isLoading, className, children }: Props, ref: React.ForwardedRef<HTMLDivElement>) => {
const isMobile = useIsMobile();
return (
// tooltip need to be wrapped in div for proper popover positioning
<Skeleton isLoaded={ !isLoading } borderRadius="base" ref={ ref } className={ className }>
<Tooltip
label={ label }
isDisabled={ isMobile }
// need a delay to avoid flickering when closing the popover
openDelay={ 100 }
>
{ children }
</Tooltip>
</Skeleton>
);
};
export default chakra(React.forwardRef(PopoverTriggerTooltip));
import { Button, Skeleton } from '@chakra-ui/react'; import { Button } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import IconSvg from 'ui/shared/IconSvg'; import IconSvg from 'ui/shared/IconSvg';
import PopoverTriggerTooltip from '../PopoverTriggerTooltip';
import useScoreLevelAndColor from './useScoreLevelAndColor'; import useScoreLevelAndColor from './useScoreLevelAndColor';
interface Props { interface Props {
...@@ -21,10 +22,9 @@ const SolidityscanReportButton = ( ...@@ -21,10 +22,9 @@ const SolidityscanReportButton = (
const { scoreColor } = useScoreLevelAndColor(score); const { scoreColor } = useScoreLevelAndColor(score);
return ( return (
<Skeleton isLoaded={ !isLoading } borderRadius="base"> <PopoverTriggerTooltip label="Security score" isLoading={ isLoading } className={ className }>
<Button <Button
ref={ ref } ref={ ref }
className={ className }
color={ scoreColor } color={ scoreColor }
size="sm" size="sm"
variant="outline" variant="outline"
...@@ -39,7 +39,7 @@ const SolidityscanReportButton = ( ...@@ -39,7 +39,7 @@ const SolidityscanReportButton = (
<IconSvg name={ score < 80 ? 'score/score-not-ok' : 'score/score-ok' } boxSize={ 5 } mr={ onlyIcon ? 0 : 1 }/> <IconSvg name={ score < 80 ? 'score/score-not-ok' : 'score/score-ok' } boxSize={ 5 } mr={ onlyIcon ? 0 : 1 }/>
{ onlyIcon ? null : score } { onlyIcon ? null : score }
</Button> </Button>
</Skeleton> </PopoverTriggerTooltip>
); );
}; };
......
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