From 5baeacc5e10b07acdae4e54e1e4c921e13e6640d Mon Sep 17 00:00:00 2001 From: dquilter Date: Tue, 25 Feb 2025 21:31:39 +0000 Subject: [PATCH] Add Preview to Sub Cards (#128) Adds preview to subcards: https://github.com/user-attachments/assets/aff8c769-2542-4992-910a-59b56fc8567e --------- Co-authored-by: dquilter --- .../_sharedcomponents/Cards/GameCard.tsx | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/app/_components/_sharedcomponents/Cards/GameCard.tsx b/src/app/_components/_sharedcomponents/Cards/GameCard.tsx index c41d205d..718ac55f 100644 --- a/src/app/_components/_sharedcomponents/Cards/GameCard.tsx +++ b/src/app/_components/_sharedcomponents/Cards/GameCard.tsx @@ -26,22 +26,30 @@ const GameCard: React.FC = ({ const cardInOpponentsHand = card.controller?.id !== connectedPlayer && card.zone === 'hand'; const [anchorElement, setAnchorElement] = React.useState(null); + const [previewImage, setPreviewImage] = React.useState(null); const hoverTimeout = React.useRef(undefined); const open = Boolean(anchorElement); const handlePreviewOpen = (event: React.MouseEvent) => { const target = event.currentTarget; + const imageUrl = target.getAttribute('data-card-url'); + + if (!imageUrl) return; + if (cardInOpponentsHand) { return; } + hoverTimeout.current = window.setTimeout(() => { setAnchorElement(target); + setPreviewImage(`url(${imageUrl})`); }, 500); }; const handlePreviewClose = () => { clearTimeout(hoverTimeout.current); setAnchorElement(null); + setPreviewImage(null); }; const popoverConfig = (): { anchorOrigin: PopoverOrigin, transformOrigin: PopoverOrigin } => { @@ -301,7 +309,6 @@ const GameCard: React.FC = ({ }, cardPreview: { borderRadius: '.38em', - backgroundImage: `url(${s3CardImageURL(card)})`, backgroundSize: 'cover', backgroundRepeat: 'no-repeat', aspectRatio: '1 / 1.4', @@ -314,10 +321,9 @@ const GameCard: React.FC = ({ @@ -374,7 +380,7 @@ const GameCard: React.FC = ({ slotProps={{ paper: { sx: { backgroundColor: 'transparent' } } }} {...popoverConfig()} > - + {otherUpgradeCards.map((subcard) => ( @@ -385,6 +391,9 @@ const GameCard: React.FC = ({ border: subcard.selectable ? `2px solid ${getBorderColor(subcard, connectedPlayer)}` : 'none' }} onClick={() => subcardClick(subcard)} + onMouseEnter={handlePreviewOpen} + onMouseLeave={handlePreviewClose} + data-card-url={s3CardImageURL(subcard)} > {subcard.name} @@ -395,7 +404,7 @@ const GameCard: React.FC = ({ Captured - {capturedCards.map((capturedCard) => ( + {capturedCards.map((capturedCard: ICardData) => ( = ({ border: capturedCard.selectable ? `2px solid ${getBorderColor(capturedCard, connectedPlayer)}` : 'none' }} onClick={() => subcardClick(capturedCard)} + onMouseEnter={handlePreviewOpen} + onMouseLeave={handlePreviewClose} + data-card-url={s3CardImageURL(capturedCard)} > {capturedCard.name}