Commit 54642351 authored by lynn's avatar lynn Committed by GitHub

feat: Web 2233 erc 1155 card redesign (#5249)

* init

* init

* remove unnecessary style changes

* ensure no pointer events on tooltip
parent b13acb33
...@@ -8,6 +8,7 @@ import { Z_INDEX } from 'theme/zIndex' ...@@ -8,6 +8,7 @@ import { Z_INDEX } from 'theme/zIndex'
const PopoverContainer = styled.div<{ show: boolean }>` const PopoverContainer = styled.div<{ show: boolean }>`
z-index: ${Z_INDEX.popover}; z-index: ${Z_INDEX.popover};
pointer-events: none;
visibility: ${(props) => (props.show ? 'visible' : 'hidden')}; visibility: ${(props) => (props.show ? 'visible' : 'hidden')};
opacity: ${(props) => (props.show ? 1 : 0)}; opacity: ${(props) => (props.show ? 1 : 0)};
transition: visibility 150ms linear, opacity 150ms linear; transition: visibility 150ms linear, opacity 150ms linear;
......
...@@ -6,6 +6,7 @@ import Popover, { PopoverProps } from '../Popover' ...@@ -6,6 +6,7 @@ import Popover, { PopoverProps } from '../Popover'
export const TooltipContainer = styled.div` export const TooltipContainer = styled.div`
max-width: 256px; max-width: 256px;
cursor: default;
padding: 0.6rem 1rem; padding: 0.6rem 1rem;
font-weight: 400; font-weight: 400;
word-break: break-word; word-break: break-word;
...@@ -18,6 +19,9 @@ export const TooltipContainer = styled.div` ...@@ -18,6 +19,9 @@ export const TooltipContainer = styled.div`
interface TooltipProps extends Omit<PopoverProps, 'content'> { interface TooltipProps extends Omit<PopoverProps, 'content'> {
text: ReactNode text: ReactNode
open?: () => void
close?: () => void
noOp?: () => void
disableHover?: boolean // disable the hover and content display disableHover?: boolean // disable the hover and content display
} }
...@@ -29,8 +33,19 @@ interface TooltipContentProps extends Omit<PopoverProps, 'content'> { ...@@ -29,8 +33,19 @@ interface TooltipContentProps extends Omit<PopoverProps, 'content'> {
disableHover?: boolean // disable the hover and content display disableHover?: boolean // disable the hover and content display
} }
export default function Tooltip({ text, ...rest }: TooltipProps) { export default function Tooltip({ text, open, close, noOp, disableHover, ...rest }: TooltipProps) {
return <Popover content={text && <TooltipContainer>{text}</TooltipContainer>} {...rest} /> return (
<Popover
content={
text && (
<TooltipContainer onMouseEnter={disableHover ? noOp : open} onMouseLeave={disableHover ? noOp : close}>
{text}
</TooltipContainer>
)
}
{...rest}
/>
)
} }
function TooltipContent({ content, wrap = false, ...rest }: TooltipContentProps) { function TooltipContent({ content, wrap = false, ...rest }: TooltipContentProps) {
...@@ -44,7 +59,15 @@ export function MouseoverTooltip({ text, disableHover, children, ...rest }: Omit ...@@ -44,7 +59,15 @@ export function MouseoverTooltip({ text, disableHover, children, ...rest }: Omit
const close = useCallback(() => setShow(false), [setShow]) const close = useCallback(() => setShow(false), [setShow])
const noOp = () => null const noOp = () => null
return ( return (
<Tooltip {...rest} show={show} text={disableHover ? null : text}> <Tooltip
{...rest}
open={open}
close={close}
noOp={noOp}
disableHover={disableHover}
show={show}
text={disableHover ? null : text}
>
<div onMouseEnter={disableHover ? noOp : open} onMouseLeave={disableHover ? noOp : close}> <div onMouseEnter={disableHover ? noOp : open} onMouseLeave={disableHover ? noOp : close}>
{children} {children}
</div> </div>
......
...@@ -157,8 +157,13 @@ const RankingContainer = styled.div` ...@@ -157,8 +157,13 @@ const RankingContainer = styled.div`
z-index: 2; z-index: 2;
` `
const StyledImageContainer = styled.div` const StyledImageContainer = styled.div<{ isDisabled?: boolean }>`
position: relative; position: relative;
pointer-events: auto;
&:hover {
opacity: ${({ isDisabled, theme }) => (isDisabled ? theme.opacity.disabled : theme.opacity.enabled)};
}
cursor: ${({ isDisabled }) => (isDisabled ? 'default' : 'pointer')};
` `
/* -------- ASSET CARD -------- */ /* -------- ASSET CARD -------- */
...@@ -222,8 +227,6 @@ const Container = ({ ...@@ -222,8 +227,6 @@ const Container = ({
onMouseEnter={() => toggleHovered()} onMouseEnter={() => toggleHovered()}
onMouseLeave={() => toggleHovered()} onMouseLeave={() => toggleHovered()}
transition="250" transition="250"
opacity={isDisabled ? '0.5' : '1'}
cursor={isDisabled ? 'default' : 'pointer'}
onClick={isDisabled ? () => null : onClick ?? handleAssetInBag} onClick={isDisabled ? () => null : onClick ?? handleAssetInBag}
> >
{children} {children}
...@@ -232,8 +235,8 @@ const Container = ({ ...@@ -232,8 +235,8 @@ const Container = ({
) )
} }
const ImageContainer = ({ children }: { children: ReactNode }) => ( const ImageContainer = ({ children, isDisabled = false }: { children: ReactNode; isDisabled?: boolean }) => (
<StyledImageContainer>{children}</StyledImageContainer> <StyledImageContainer isDisabled={isDisabled}>{children}</StyledImageContainer>
) )
/* -------- CARD IMAGE -------- */ /* -------- CARD IMAGE -------- */
......
...@@ -98,22 +98,7 @@ export const ViewMyNftsAsset = ({ ...@@ -98,22 +98,7 @@ export const ViewMyNftsAsset = ({
onClick={onCardClick} onClick={onCardClick}
isDisabled={isDisabled} isDisabled={isDisabled}
> >
<MouseoverTooltip <Card.ImageContainer isDisabled={isDisabled}>
text={
<Box as="span" className={bodySmall} style={{ color: themeVars.colors.textPrimary }}>
{asset.asset_contract.tokenType === TokenType.ERC1155 ? (
<Trans>ERC-1155 support coming soon</Trans>
) : (
<Trans>Blocked from trading</Trans>
)}
</Box>
}
placement="bottom"
offsetX={0}
offsetY={-100}
style={{ display: 'block' }}
disableHover={!isDisabled}
>
<Tooltip <Tooltip
text={ text={
<Box as="span" className={bodySmall} color="textPrimary"> <Box as="span" className={bodySmall} color="textPrimary">
...@@ -123,15 +108,30 @@ export const ViewMyNftsAsset = ({ ...@@ -123,15 +108,30 @@ export const ViewMyNftsAsset = ({
show={showTooltip} show={showTooltip}
style={{ display: 'block' }} style={{ display: 'block' }}
offsetX={0} offsetX={0}
offsetY={-52} offsetY={-68}
hideArrow={true} hideArrow={true}
placement="bottom" placement="bottom"
> >
<Card.ImageContainer> <MouseoverTooltip
text={
<Box as="span" className={bodySmall} style={{ color: themeVars.colors.textPrimary }}>
{asset.asset_contract.tokenType === TokenType.ERC1155 ? (
<Trans>ERC-1155 support coming soon</Trans>
) : (
<Trans>Blocked from trading</Trans>
)}
</Box>
}
placement="bottom"
offsetX={0}
offsetY={-100}
style={{ display: 'block' }}
disableHover={!isDisabled}
>
{getNftDisplayComponent(assetMediaType, mediaShouldBePlaying, setCurrentTokenPlayingMedia)} {getNftDisplayComponent(assetMediaType, mediaShouldBePlaying, setCurrentTokenPlayingMedia)}
</Card.ImageContainer> </MouseoverTooltip>
</Tooltip> </Tooltip>
</MouseoverTooltip> </Card.ImageContainer>
<Card.DetailsContainer> <Card.DetailsContainer>
<Card.ProfileNftDetails asset={asset} hideDetails={hideDetails} /> <Card.ProfileNftDetails asset={asset} hideDetails={hideDetails} />
</Card.DetailsContainer> </Card.DetailsContainer>
......
...@@ -44,6 +44,8 @@ const transitions = { ...@@ -44,6 +44,8 @@ const transitions = {
const opacities = { const opacities = {
hover: 0.6, hover: 0.6,
click: 0.4, click: 0.4,
disabled: 0.5,
enabled: 1,
} }
const deprecated_mediaWidthTemplates: { [width in keyof typeof MEDIA_WIDTHS]: typeof css } = Object.keys( const deprecated_mediaWidthTemplates: { [width in keyof typeof MEDIA_WIDTHS]: typeof css } = Object.keys(
......
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