Files
Cockatrice/webclient/src/components/Message/CardCallout.tsx
T
Jeremy Letto 26d7fe2ff0 Webatrice: update deps (#4700)
* save work

* fix reset styling

* fix toast reducer

* update non-react deps

* update react libraries

* remove jquery, use sanitize-html instead

* add missing change

* fix deps and dev deps

* update workflow to target Node 16

* run @mui/codemod to remove @mui/styles

* add default body font size

* update react 17 to 18

* declare enum before use

* add rel attr to links

* fix font sizing issue

* trailing commas

* refactor deep destructuring

Co-authored-by: Jeremy Letto <jeremy.letto@datasite.com>
2022-11-01 12:41:42 -05:00

95 lines
2.2 KiB
TypeScript

// eslint-disable-next-line
import React, { useMemo, useState } from 'react';
import { styled } from '@mui/material/styles';
import Popover from '@mui/material/Popover';
import { CardDTO, TokenDTO } from 'services';
import CardDetails from '../CardDetails/CardDetails';
import TokenDetails from '../TokenDetails/TokenDetails';
import './CardCallout.css';
const PREFIX = 'CardCallout';
const classes = {
popover: `${PREFIX}-popover`,
popoverContent: `${PREFIX}-popoverContent`
};
const Root = styled('span')(({ theme }) => ({
[`& .${classes.popover}`]: {
pointerEvents: 'none',
},
[`& .${classes.popoverContent}`]: {
pointerEvents: 'none',
}
}));
const CardCallout = ({ name }) => {
const [card, setCard] = useState<CardDTO>(null);
const [token, setToken] = useState<TokenDTO>(null);
const [anchorEl, setAnchorEl] = useState<Element>(null);
useMemo(async () => {
const card = await CardDTO.get(name);
if (card) {
return setCard(card)
}
const token = await TokenDTO.get(name);
if (token) {
return setToken(token);
}
}, [name]);
const handlePopoverOpen = (event) => {
setAnchorEl(event.currentTarget);
};
const handlePopoverClose = () => {
setAnchorEl(null);
};
const open = Boolean(anchorEl);
return (
<Root className='callout'>
<span
onMouseEnter={handlePopoverOpen}
onMouseLeave={handlePopoverClose}
>{card?.name || token?.name?.value || name}</span>
{
(card || token) && (
<Popover
open={open}
anchorEl={anchorEl}
onClose={handlePopoverClose}
className={classes.popover}
classes={{
paper: classes.popoverContent,
}}
anchorOrigin={{
vertical: 'top',
horizontal: 'right',
}}
transformOrigin={{
vertical: 'bottom',
horizontal: 'left',
}}
>
<div className="callout-card">
{ card && (<CardDetails card={card} />) }
{ token && (<TokenDetails token={token} />) }
</div>
</Popover>
)
}
</Root>
);
};
export default CardCallout;