Commit 4240c803 authored by Max Alekseenko's avatar Max Alekseenko

update link buttons, add tooltip, update modal title

parent 006e24aa
...@@ -7,6 +7,7 @@ import React from 'react'; ...@@ -7,6 +7,7 @@ import React from 'react';
import { ContractListTypes } from 'types/client/marketplace'; import { ContractListTypes } from 'types/client/marketplace';
import useIsMobile from 'lib/hooks/useIsMobile'; import useIsMobile from 'lib/hooks/useIsMobile';
import { apos } from 'lib/html-entities';
import AddressEntity from 'ui/shared/entities/address/AddressEntity'; import AddressEntity from 'ui/shared/entities/address/AddressEntity';
import ContractSecurityReport from './ContractSecurityReport'; import ContractSecurityReport from './ContractSecurityReport';
...@@ -17,6 +18,12 @@ type Props = { ...@@ -17,6 +18,12 @@ type Props = {
contracts: Array<any>; // eslint-disable-line @typescript-eslint/no-explicit-any contracts: Array<any>; // eslint-disable-line @typescript-eslint/no-explicit-any
} }
const titles = {
[ContractListTypes.ALL]: `All app${ apos }s smart contracts`,
[ContractListTypes.ANALYZED]: 'Analyzed contracts',
[ContractListTypes.VERIFIED]: 'Verified contracts',
};
const ContractListModal = ({ onClose, type, contracts }: Props) => { const ContractListModal = ({ onClose, type, contracts }: Props) => {
const isMobile = useIsMobile(); const isMobile = useIsMobile();
...@@ -43,7 +50,7 @@ const ContractListModal = ({ onClose, type, contracts }: Props) => { ...@@ -43,7 +50,7 @@ const ContractListModal = ({ onClose, type, contracts }: Props) => {
> >
<ModalOverlay/> <ModalOverlay/>
<ModalContent> <ModalContent>
<ModalHeader fontWeight="500" textStyle="h3" mb={ 4 }>Contracts</ModalHeader> <ModalHeader fontWeight="500" textStyle="h3" mb={ 4 }>{ titles[type] }</ModalHeader>
<ModalCloseButton/> <ModalCloseButton/>
<ModalBody <ModalBody
maxH={ isMobile ? 'auto' : '352px' } maxH={ isMobile ? 'auto' : '352px' }
......
...@@ -5,6 +5,7 @@ import { ContractListTypes } from 'types/client/marketplace'; ...@@ -5,6 +5,7 @@ import { ContractListTypes } from 'types/client/marketplace';
import config from 'configs/app'; import config from 'configs/app';
import { apos } from 'lib/html-entities'; import { apos } from 'lib/html-entities';
import IconSvg from 'ui/shared/IconSvg';
import SolidityscanReportButton from 'ui/shared/solidityscanReport/SolidityscanReportButton'; import SolidityscanReportButton from 'ui/shared/solidityscanReport/SolidityscanReportButton';
import SolidityscanReportDetails from 'ui/shared/solidityscanReport/SolidityscanReportDetails'; import SolidityscanReportDetails from 'ui/shared/solidityscanReport/SolidityscanReportDetails';
import SolidityscanReportScore from 'ui/shared/solidityscanReport/SolidityscanReportScore'; import SolidityscanReportScore from 'ui/shared/solidityscanReport/SolidityscanReportScore';
...@@ -48,7 +49,10 @@ const AppSecurityReport = ({ id, securityReport, isLarge, showContractList }: Pr ...@@ -48,7 +49,10 @@ const AppSecurityReport = ({ id, securityReport, isLarge, showContractList }: Pr
<SolidityscanReportDetails vulnerabilities={ issueSeverityDistribution } vulnerabilitiesCount={ totalIssues }/> <SolidityscanReportDetails vulnerabilities={ issueSeverityDistribution } vulnerabilitiesCount={ totalIssues }/>
</Box> </Box>
) } ) }
<Link onClick={ showAnalyzedContracts }>Analyzed contracts</Link> <Link onClick={ showAnalyzedContracts } display="inline-flex" alignItems="center">
Analyzed contracts
<IconSvg name="arrows/north-east" boxSize={ 5 } color="gray.400"/>
</Link>
</> </>
) } ) }
/> />
......
import { Link } from '@chakra-ui/react'; import { Link, Tooltip } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import type { MouseEvent } from 'react'; import type { MouseEvent } from 'react';
import config from 'configs/app';
import type { IconName } from 'ui/shared/IconSvg'; import type { IconName } from 'ui/shared/IconSvg';
import IconSvg from 'ui/shared/IconSvg'; import IconSvg from 'ui/shared/IconSvg';
export enum LinkButtonVariants {
DEFAULT = 'default',
ALL_CONTRACTS = 'all contracts',
VERIFIED_CONTRACTS = 'verified contracts',
}
const values = {
[LinkButtonVariants.ALL_CONTRACTS]: {
icon: 'contracts' as IconName,
iconColor: 'gray.500',
tooltip: `Total number of contracts deployed by the protocol on ${ config.chain.name }`,
},
[LinkButtonVariants.VERIFIED_CONTRACTS]: {
icon: 'contracts_verified' as IconName,
iconColor: 'green.500',
tooltip: `Number of verified contracts on ${ config.chain.name }`,
},
[LinkButtonVariants.DEFAULT]: {
icon: null,
iconColor: null,
tooltip: null,
},
};
interface Props { interface Props {
children: string; children: string;
onClick: (event: MouseEvent) => void; onClick: (event: MouseEvent) => void;
icon?: IconName; variant?: LinkButtonVariants;
iconColor?: string;
fontSize?: string;
fontWeight?: string;
} }
const LinkButton = ({ children, onClick, icon, iconColor = 'gray.500', fontSize = 'sm', fontWeight = '500' }: Props) => { const LinkButton = ({ children, onClick, variant = LinkButtonVariants.DEFAULT }: Props) => {
const { icon, iconColor, tooltip } = values[variant];
return ( return (
<Link <Tooltip
fontSize={ fontSize } label={ tooltip }
href="#" textAlign="center"
onClick={ onClick } padding={ 2 }
fontWeight={ fontWeight } isDisabled={ !tooltip }
display="inline-flex" openDelay={ 500 }
width="250px"
> >
{ icon && <IconSvg name={ icon } boxSize={ 5 } color={ iconColor } mr={ 1 }/> } <Link
{ children } fontSize="sm"
</Link> onClick={ onClick }
fontWeight="500"
display="inline-flex"
>
{ icon && <IconSvg name={ icon } boxSize={ 5 } color={ iconColor } mr={ 1 }/> }
{ children }
</Link>
</Tooltip>
); );
}; };
......
...@@ -11,7 +11,7 @@ import ListItemMobile from 'ui/shared/ListItemMobile/ListItemMobile'; ...@@ -11,7 +11,7 @@ import ListItemMobile from 'ui/shared/ListItemMobile/ListItemMobile';
import AppLink from './AppLink'; import AppLink from './AppLink';
import AppSecurityReport from './AppSecurityReport'; import AppSecurityReport from './AppSecurityReport';
import LinkButton from './LinkButton'; import LinkButton, { LinkButtonVariants } from './LinkButton';
type Props = { type Props = {
app: MarketplaceAppPreview & { securityReport?: any }; // eslint-disable-line @typescript-eslint/no-explicit-any app: MarketplaceAppPreview & { securityReport?: any }; // eslint-disable-line @typescript-eslint/no-explicit-any
...@@ -89,8 +89,8 @@ const ListItem = ({ app, onInfoClick, isFavorite, onFavoriteClick, isLoading, on ...@@ -89,8 +89,8 @@ const ListItem = ({ app, onInfoClick, isFavorite, onFavoriteClick, isLoading, on
<Flex alignItems="center"> <Flex alignItems="center">
<Flex flex={ 1 } gap={ 3 } alignItems="center"> <Flex flex={ 1 } gap={ 3 } alignItems="center">
<AppSecurityReport id={ id } securityReport={ securityReport } showContractList={ showContractList }/> <AppSecurityReport id={ id } securityReport={ securityReport } showContractList={ showContractList }/>
<LinkButton onClick={ showAllContracts } icon="contracts">{ totalContractsNumber }</LinkButton> <LinkButton onClick={ showAllContracts } variant={ LinkButtonVariants.ALL_CONTRACTS }>{ totalContractsNumber }</LinkButton>
<LinkButton onClick={ showVerifiedContracts } icon="contracts_verified" iconColor="green.500">{ verifiedNumber }</LinkButton> <LinkButton onClick={ showVerifiedContracts } variant={ LinkButtonVariants.VERIFIED_CONTRACTS }>{ verifiedNumber }</LinkButton>
</Flex> </Flex>
{ !isLoading && ( { !isLoading && (
<LinkButton onClick={ handleInfoClick }>More info</LinkButton> <LinkButton onClick={ handleInfoClick }>More info</LinkButton>
......
...@@ -10,7 +10,7 @@ import IconSvg from 'ui/shared/IconSvg'; ...@@ -10,7 +10,7 @@ import IconSvg from 'ui/shared/IconSvg';
import AppLink from './AppLink'; import AppLink from './AppLink';
import AppSecurityReport from './AppSecurityReport'; import AppSecurityReport from './AppSecurityReport';
import LinkButton from './LinkButton'; import LinkButton, { LinkButtonVariants } from './LinkButton';
type Props = { type Props = {
app: MarketplaceAppPreview & { securityReport?: any }; // eslint-disable-line @typescript-eslint/no-explicit-any app: MarketplaceAppPreview & { securityReport?: any }; // eslint-disable-line @typescript-eslint/no-explicit-any
...@@ -85,10 +85,12 @@ const TableItem = ({ ...@@ -85,10 +85,12 @@ const TableItem = ({
<AppSecurityReport id={ id } securityReport={ securityReport } showContractList={ showContractList } isLarge/> <AppSecurityReport id={ id } securityReport={ securityReport } showContractList={ showContractList } isLarge/>
</Td> </Td>
<Td verticalAlign="middle"> <Td verticalAlign="middle">
<LinkButton onClick={ showAllContracts } icon="contracts">{ totalContractsNumber }</LinkButton> <LinkButton onClick={ showAllContracts } variant={ LinkButtonVariants.ALL_CONTRACTS }>
{ totalContractsNumber }
</LinkButton>
</Td> </Td>
<Td verticalAlign="middle"> <Td verticalAlign="middle">
<LinkButton onClick={ showVerifiedContracts } icon="contracts_verified" iconColor="green.500">{ verifiedNumber }</LinkButton> <LinkButton onClick={ showVerifiedContracts } variant={ LinkButtonVariants.VERIFIED_CONTRACTS }>{ verifiedNumber }</LinkButton>
</Td> </Td>
<Td verticalAlign="middle" isNumeric> <Td verticalAlign="middle" isNumeric>
<LinkButton onClick={ handleInfoClick }>More info</LinkButton> <LinkButton onClick={ handleInfoClick }>More info</LinkButton>
......
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