Commit b98ffd59 authored by Max Alekseenko's avatar Max Alekseenko

add security score to marketplace app modal

parent aaaedf93
...@@ -9,6 +9,7 @@ import MarketplaceAppModal from './MarketplaceAppModal'; ...@@ -9,6 +9,7 @@ import MarketplaceAppModal from './MarketplaceAppModal';
const props = { const props = {
onClose: () => {}, onClose: () => {},
onFavoriteClick: () => {}, onFavoriteClick: () => {},
showContractList: () => {},
data: appsMock[0], data: appsMock[0],
isFavorite: false, isFavorite: false,
}; };
......
import { import {
Box, Flex, Heading, IconButton, Image, Link, List, Modal, ModalBody, Box, Flex, Heading, IconButton, Image, Link, List, Modal, ModalBody,
ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, Tag, Text, useColorModeValue, ModalCloseButton, ModalContent, ModalFooter, ModalOverlay, Tag, Text, useColorModeValue,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import type { MarketplaceAppOverview } from 'types/client/marketplace'; import type { MarketplaceAppOverview } from 'types/client/marketplace';
import { ContractListTypes } from 'types/client/marketplace';
import useIsMobile from 'lib/hooks/useIsMobile'; import useIsMobile from 'lib/hooks/useIsMobile';
import { nbsp } from 'lib/html-entities'; import { nbsp } from 'lib/html-entities';
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';
import AppSecurityReport from './AppSecurityReport';
import ContractListButton, { ContractListButtonVariants } from './ContractListButton';
import MarketplaceAppModalLink from './MarketplaceAppModalLink'; import MarketplaceAppModalLink from './MarketplaceAppModalLink';
type Props = { type Props = {
...@@ -18,6 +21,7 @@ type Props = { ...@@ -18,6 +21,7 @@ type Props = {
isFavorite: boolean; isFavorite: boolean;
onFavoriteClick: (id: string, isFavorite: boolean) => void; onFavoriteClick: (id: string, isFavorite: boolean) => void;
data: MarketplaceAppOverview; data: MarketplaceAppOverview;
showContractList: (id: string, type: ContractListTypes) => void;
} }
const MarketplaceAppModal = ({ const MarketplaceAppModal = ({
...@@ -25,8 +29,10 @@ const MarketplaceAppModal = ({ ...@@ -25,8 +29,10 @@ const MarketplaceAppModal = ({
isFavorite, isFavorite,
onFavoriteClick, onFavoriteClick,
data, data,
showContractList: showContractListDefault,
}: Props) => { }: Props) => {
const { const {
id,
title, title,
url, url,
external, external,
...@@ -39,6 +45,7 @@ const MarketplaceAppModal = ({ ...@@ -39,6 +45,7 @@ const MarketplaceAppModal = ({
logo, logo,
logoDarkMode, logoDarkMode,
categories, categories,
securityReport,
} = data; } = data;
const socialLinks = [ const socialLinks = [
...@@ -64,6 +71,19 @@ const MarketplaceAppModal = ({ ...@@ -64,6 +71,19 @@ const MarketplaceAppModal = ({
onFavoriteClick(data.id, isFavorite); onFavoriteClick(data.id, isFavorite);
}, [ onFavoriteClick, data.id, isFavorite ]); }, [ onFavoriteClick, data.id, isFavorite ]);
const showContractList = useCallback((id: string, type: ContractListTypes) => {
onClose();
showContractListDefault(id, type);
}, [ onClose, showContractListDefault ]);
const showAllContracts = React.useCallback(() => {
showContractList(id, ContractListTypes.ALL);
}, [ showContractList, id ]);
const showVerifiedContracts = React.useCallback(() => {
showContractList(id, ContractListTypes.VERIFIED);
}, [ showContractList, id ]);
const isMobile = useIsMobile(); const isMobile = useIsMobile();
const logoUrl = useColorModeValue(logo, logoDarkMode || logo); const logoUrl = useColorModeValue(logo, logoDarkMode || logo);
...@@ -77,10 +97,11 @@ const MarketplaceAppModal = ({ ...@@ -77,10 +97,11 @@ const MarketplaceAppModal = ({
<ModalOverlay/> <ModalOverlay/>
<ModalContent> <ModalContent>
<ModalHeader <Box
display="grid" display="grid"
gridTemplateColumns={{ base: 'auto 1fr' }} gridTemplateColumns={{ base: 'auto 1fr' }}
paddingRight={{ sm: 12 }} paddingRight={{ sm: 12 }}
marginBottom={{ base: 6, sm: 8 }}
> >
<Flex <Flex
alignItems="center" alignItems="center"
...@@ -121,29 +142,49 @@ const MarketplaceAppModal = ({ ...@@ -121,29 +142,49 @@ const MarketplaceAppModal = ({
gridColumn={{ base: '1 / 3', sm: 2 }} gridColumn={{ base: '1 / 3', sm: 2 }}
marginTop={{ base: 6, sm: 0 }} marginTop={{ base: 6, sm: 0 }}
> >
<Box display="flex"> <Flex flexWrap="wrap" gap={ 6 }>
<MarketplaceAppModalLink <Flex width={{ base: '100%', sm: 'auto' }}>
id={ data.id } <MarketplaceAppModalLink
url={ url } id={ data.id }
external={ external } url={ url }
title={ title } external={ external }
/> title={ title }
/>
<IconButton <IconButton
aria-label="Mark as favorite" aria-label="Mark as favorite"
title="Mark as favorite" title="Mark as favorite"
variant="outline" variant="outline"
colorScheme="gray" colorScheme="gray"
w={ 9 } w={ 9 }
h={ 8 } h={ 8 }
onClick={ handleFavoriteClick } onClick={ handleFavoriteClick }
icon={ isFavorite ? icon={ isFavorite ?
<IconSvg name="star_filled" w={ 5 } h={ 5 } color="yellow.400"/> : <IconSvg name="star_filled" w={ 5 } h={ 5 } color="yellow.400"/> :
<IconSvg name="star_outline" w={ 5 } h={ 5 } color="gray.600"/> } <IconSvg name="star_outline" w={ 5 } h={ 5 } color="gray.600"/> }
/> />
</Box> </Flex>
{ securityReport && (
<Flex alignItems="center" gap={ 3 }>
<AppSecurityReport id={ data.id } securityReport={ securityReport } showContractList={ showContractList }/>
<ContractListButton
onClick={ showAllContracts }
variant={ ContractListButtonVariants.ALL_CONTRACTS }
>
{ securityReport.overallInfo.totalContractsNumber }
</ContractListButton>
<ContractListButton
onClick={ showVerifiedContracts }
variant={ ContractListButtonVariants.VERIFIED_CONTRACTS }
>
{ securityReport.overallInfo.verifiedNumber }
</ContractListButton>
</Flex>
) }
</Flex>
</Box> </Box>
</ModalHeader> </Box>
<ModalCloseButton/> <ModalCloseButton/>
......
...@@ -255,6 +255,7 @@ const Marketplace = () => { ...@@ -255,6 +255,7 @@ const Marketplace = () => {
isFavorite={ favoriteApps.includes(selectedApp.id) } isFavorite={ favoriteApps.includes(selectedApp.id) }
onFavoriteClick={ onFavoriteClick } onFavoriteClick={ onFavoriteClick }
data={ selectedApp } data={ selectedApp }
showContractList={ showContractList }
/> />
) } ) }
......
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