diff --git a/src/components/media/MediaCard.tsx b/src/components/media/MediaCard.tsx index 14a7ea8a..b9cb21d8 100644 --- a/src/components/media/MediaCard.tsx +++ b/src/components/media/MediaCard.tsx @@ -50,9 +50,13 @@ function MediaCardContent({ onClose, overlayVisible, setOverlayVisible, + handleMouseEnter, + handleMouseLeave, }: MediaCardProps & { overlayVisible: boolean; setOverlayVisible: React.Dispatch>; + handleMouseEnter: () => void; + handleMouseLeave: () => void; }) { const { t } = useTranslation(); const percentageString = `${Math.round(percentage ?? 0).toFixed(0)}%`; @@ -85,12 +89,8 @@ function MediaCardContent({ window.open(url, "_blank"); }; - const handleMouseLeave = () => { - setOverlayVisible(false); - }; - return ( -
+
{!overlayVisible ? ( ) : ( -
- - - + + +
-
- {series ? ( -
+

-

- {t("media.episodeDisplay", { - season: series.season || 1, - episode: series.episode, - })} -

-
- ) : null} + {t("media.episodeDisplay", { + season: series.season || 1, + episode: series.episode, + })} +

+
+ ) : null} - {percentage !== undefined ? ( - <> -
-
-
-
-
-
+ {percentage !== undefined ? ( + <> +
+
+
+
+
- - ) : null} -
-

- {media.title} -

-
- -
- - -
+
+ + ) : null} +
+

+ {media.title} +

+
+ +
+ + )}
); @@ -314,12 +311,29 @@ function MediaCardContent({ export function MediaCard(props: MediaCardProps) { const [overlayVisible, setOverlayVisible] = useState(false); + const [timeoutId, setTimeoutId] = useState(null); + + const handleMouseLeave = () => { + const id = setTimeout(() => { + setOverlayVisible(false); + }, 1500); // 1.5 seconds + setTimeoutId(id); + }; + + const handleMouseEnter = () => { + if (timeoutId) { + clearTimeout(timeoutId); + setTimeoutId(null); + } + }; const content = ( );