diff --git a/src/components/overlays/DetailsModal.tsx b/src/components/overlays/DetailsModal.tsx index c0706bc3..8bf542d9 100644 --- a/src/components/overlays/DetailsModal.tsx +++ b/src/components/overlays/DetailsModal.tsx @@ -4,6 +4,7 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { Helmet } from "react-helmet-async"; import { Trans } from "react-i18next"; import { Link } from "react-router-dom"; +import { useCopyToClipboard } from "react-use"; import { getMediaBackdrop, @@ -151,6 +152,8 @@ function DetailsContent({ const enableImageLogos = usePreferencesStore( (state) => state.enableImageLogos, ); + const [, copyToClipboard] = useCopyToClipboard(); + const [hasCopiedShare, setHasCopiedShare] = useState(false); const showProgress = useMemo(() => { if (!data.id) return null; @@ -423,8 +426,31 @@ function DetailsContent({ setShowEpisodeMenu(false); }; + const handleShareClick = () => { + const shareUrl = + data.type === "movie" + ? `${window.location.origin}/media/tmdb-movie-${data.id}-${data.title.toLowerCase().replace(/[^a-z0-9]+/g, "-")}` + : `${window.location.origin}/media/tmdb-tv-${data.id}-${data.title.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`; + + copyToClipboard(shareUrl); + setHasCopiedShare(true); + setTimeout(() => setHasCopiedShare(false), 2000); + }; + return (
+ {/* Share notification popup */} + {hasCopiedShare && ( +
+
+ + + Link copied to clipboard! + +
+
+ )} + {/* Backdrop - Even taller */}
{imdbData?.trailer_url ? ( @@ -537,8 +563,8 @@ function DetailsContent({ )}
-
-
+
+
{!minimal && ( )} -
+
+
+ + {/* Genres on the right side of the button row for larger screens */} {data.genres && data.genres.length > 0 && ( -
+
{data.genres.map((genre, index) => ( + {/* Genres below for small screens */} + {data.genres && data.genres.length > 0 && ( +
+ {data.genres.map((genre, index) => ( + + {genre.name} + + ))} +
+ )} + {/* Two Column Layout - Stacked on Mobile */}
{/* Left Column - Description */} @@ -1097,7 +1156,7 @@ export function DetailsModal(props: { "group -m-[0.705em] rounded-3xl bg-background-main transition-colors duration-300 focus:relative focus:z-10", "max-h-[900px] max-w-[1200px]", "bg-mediaCard-hoverBackground bg-opacity-60 backdrop-filter backdrop-blur-lg shadow-lg overflow-hidden", - detailsData?.type === "movie" || props.minimal + props.minimal ? "h-[90%] md:h-[70%] lg:h-fit w-[90%] md:w-[70%] lg:w-[50%]" : "h-[90%] w-[90%] md:w-[70%] lg:w-[60%]", )} @@ -1109,17 +1168,17 @@ export function DetailsModal(props: { backgroundClass="bg-mediaCard-hoverBackground duration-100" className="rounded-3xl bg-background-main group-hover:opacity-100" /> - +
-
+
{isLoading || !detailsData ? ( ) : (