Commit d8ec4dad authored by tom's avatar tom

more button layout

parent 628f069c
...@@ -4,6 +4,7 @@ import React from 'react'; ...@@ -4,6 +4,7 @@ import React from 'react';
import type { AddressParam } from 'types/api/addressParams'; import type { AddressParam } from 'types/api/addressParams';
import type { TokenInfo } from 'types/api/token'; import type { TokenInfo } from 'types/api/token';
import appConfig from 'configs/app/config';
import useIsMobile from 'lib/hooks/useIsMobile'; import useIsMobile from 'lib/hooks/useIsMobile';
import AddressAddToMetaMask from 'ui/address/details/AddressAddToMetaMask'; import AddressAddToMetaMask from 'ui/address/details/AddressAddToMetaMask';
import AddressFavoriteButton from 'ui/address/details/AddressFavoriteButton'; import AddressFavoriteButton from 'ui/address/details/AddressFavoriteButton';
...@@ -16,9 +17,10 @@ interface Props { ...@@ -16,9 +17,10 @@ interface Props {
address: Pick<AddressParam, 'hash' | 'is_contract' | 'implementation_name' | 'watchlist_names'>; address: Pick<AddressParam, 'hash' | 'is_contract' | 'implementation_name' | 'watchlist_names'>;
token?: TokenInfo | null; token?: TokenInfo | null;
isLinkDisabled?: boolean; isLinkDisabled?: boolean;
after?: React.ReactNode;
} }
const AddressHeadingInfo = ({ address, token, isLinkDisabled }: Props) => { const AddressHeadingInfo = ({ address, token, isLinkDisabled, after }: Props) => {
const isMobile = useIsMobile(); const isMobile = useIsMobile();
return ( return (
...@@ -35,10 +37,11 @@ const AddressHeadingInfo = ({ address, token, isLinkDisabled }: Props) => { ...@@ -35,10 +37,11 @@ const AddressHeadingInfo = ({ address, token, isLinkDisabled }: Props) => {
/> />
<CopyToClipboard text={ address.hash }/> <CopyToClipboard text={ address.hash }/>
{ address.is_contract && token && <AddressAddToMetaMask ml={ 2 } token={ token }/> } { address.is_contract && token && <AddressAddToMetaMask ml={ 2 } token={ token }/> }
{ !address.is_contract && ( { !address.is_contract && appConfig.isAccountSupported && (
<AddressFavoriteButton hash={ address.hash } isAdded={ Boolean(address.watchlist_names?.length) } ml={ 3 }/> <AddressFavoriteButton hash={ address.hash } isAdded={ Boolean(address.watchlist_names?.length) } ml={ 3 }/>
) } ) }
<AddressQrCode hash={ address.hash } ml={ 2 }/> <AddressQrCode hash={ address.hash } ml={ 2 }/>
{ after }
</Flex> </Flex>
); );
}; };
......
...@@ -5,9 +5,12 @@ import React from 'react'; ...@@ -5,9 +5,12 @@ import React from 'react';
import type { TokenInfo } from 'types/api/token'; import type { TokenInfo } from 'types/api/token';
import appConfig from 'configs/app/config';
import useApiQuery from 'lib/api/useApiQuery'; import useApiQuery from 'lib/api/useApiQuery';
import AddressHeadingInfo from 'ui/shared/AddressHeadingInfo'; import AddressHeadingInfo from 'ui/shared/AddressHeadingInfo';
import TokenDetailsActions from './TokenDetails/TokenDetailsActions';
interface Props { interface Props {
tokenQuery: UseQueryResult<TokenInfo>; tokenQuery: UseQueryResult<TokenInfo>;
} }
...@@ -44,7 +47,13 @@ const TokenContractInfo = ({ tokenQuery }: Props) => { ...@@ -44,7 +47,13 @@ const TokenContractInfo = ({ tokenQuery }: Props) => {
watchlist_names: [], watchlist_names: [],
}; };
return <AddressHeadingInfo address={ address } token={ contractQuery.data?.token }/>; return (
<AddressHeadingInfo
address={ address }
token={ contractQuery.data?.token }
after={ appConfig.isAccountSupported ? <TokenDetailsActions/> : null }
/>
);
}; };
export default React.memo(TokenContractInfo); export default React.memo(TokenContractInfo);
import { Button, Menu, MenuButton, MenuItem, MenuList, Icon, Flex } from '@chakra-ui/react';
import React from 'react';
import iconArrow from 'icons/arrows/east-mini.svg';
const TokenDetailsActions = () => {
return (
<Menu>
<MenuButton
as={ Button }
size="sm"
variant="outline"
ml={ 2 }
>
<Flex alignItems="center">
<span>More</span>
<Icon as={ iconArrow } transform="rotate(-90deg)" boxSize={ 5 } ml={ 1 }/>
</Flex>
</MenuButton>
<MenuList minWidth="180px" zIndex="popover">
<MenuItem py={ 2 } px={ 4 }>
Add token info
</MenuItem>
<MenuItem py={ 2 } px={ 4 }>
Add public tag
</MenuItem>
<MenuItem py={ 2 } px={ 4 }>
Add private tag
</MenuItem>
</MenuList>
</Menu>
);
};
export default React.memo(TokenDetailsActions);
...@@ -78,7 +78,7 @@ const TokenDetailsVerifiedInfo = ({ data }: Props) => { ...@@ -78,7 +78,7 @@ const TokenDetailsVerifiedInfo = ({ data }: Props) => {
<Flex alignItems={{ base: 'flex-start', lg: 'center' }} flexDir={{ base: 'column', lg: 'row' }} rowGap={ 2 } columnGap={ 6 }> <Flex alignItems={{ base: 'flex-start', lg: 'center' }} flexDir={{ base: 'column', lg: 'row' }} rowGap={ 2 } columnGap={ 6 }>
{ websiteName && <LinkExternal href={ data.projectWebsite } fontSize="md">{ websiteName }</LinkExternal> } { websiteName && <LinkExternal href={ data.projectWebsite } fontSize="md">{ websiteName }</LinkExternal> }
{ socialLinks.length > 0 && ( { socialLinks.length > 0 && (
<Flex columnGap={ 2 }> <Flex columnGap={ 2 } flexWrap="wrap">
{ socialLinks.map((link) => ( { socialLinks.map((link) => (
<Link <Link
key={ link.field } key={ link.field }
......
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