From 309e9118d1ebed03990cf7d3aa46878abd00a6ac Mon Sep 17 00:00:00 2001 From: FifthWit Date: Sun, 1 Jun 2025 11:51:18 -0500 Subject: [PATCH] Fixed up DetailsModal to be more consistent with the conventions of MediaCard --- src/assets/css/index.css | 15 ++++++ src/components/overlays/DetailsModal.tsx | 67 ++++++++++-------------- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/src/assets/css/index.css b/src/assets/css/index.css index 4548b003..67c5a178 100644 --- a/src/assets/css/index.css +++ b/src/assets/css/index.css @@ -334,3 +334,18 @@ input[type=range].styled-slider.slider-progress::-ms-fill-lower { --mask-fade-distance: 20px; } } + +/* DetailsModal staggered scaling anime */ +@keyframes scaleIn { + 0% { + transform: scale(0); + opacity: 0; + } + 50% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + opacity: 1; + } +} diff --git a/src/components/overlays/DetailsModal.tsx b/src/components/overlays/DetailsModal.tsx index 08b12c34..c0706bc3 100644 --- a/src/components/overlays/DetailsModal.tsx +++ b/src/components/overlays/DetailsModal.tsx @@ -1,6 +1,6 @@ import classNames from "classnames"; import { t } from "i18next"; -import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { Helmet } from "react-helmet-async"; import { Trans } from "react-i18next"; import { Link } from "react-router-dom"; @@ -17,8 +17,8 @@ import { } from "@/backend/metadata/types/tmdb"; import { Dropdown } from "@/components/form/Dropdown"; import { Icon, Icons } from "@/components/Icon"; +import { MediaBookmarkButton } from "@/components/media/MediaBookmark"; import { hasAired } from "@/components/player/utils/aired"; -import { useBookmarkStore } from "@/stores/bookmarks"; import { useLanguageStore } from "@/stores/language"; import { usePreferencesStore } from "@/stores/preferences"; import { useProgressStore } from "@/stores/progress"; @@ -148,10 +148,6 @@ function DetailsContent({ const [showVolumeBar, setShowVolumeBar] = useState(false); const [volume, setVolume] = useState(0.5); - const addBookmark = useBookmarkStore((s) => s.addBookmark); - const removeBookmark = useBookmarkStore((s) => s.removeBookmark); - const bookmarks = useBookmarkStore((s) => s.bookmarks); - const isBookmarked = !!bookmarks[data.id?.toString() ?? ""]; const enableImageLogos = usePreferencesStore( (state) => state.enableImageLogos, ); @@ -178,23 +174,6 @@ function DetailsContent({ } }, [showProgress]); - const toggleBookmark = useCallback(() => { - if (!data.id) return; - if (isBookmarked) { - removeBookmark(data.id.toString()); - } else { - addBookmark({ - tmdbId: data.id.toString(), - type: data.type ?? "movie", - title: data.title, - releaseYear: data.releaseDate - ? new Date(data.releaseDate).getFullYear() - : 0, - poster: data.backdrop, - }); - } - }, [data, isBookmarked, addBookmark, removeBookmark]); - const toggleMute = () => { if (videoRef.current) { const newMuted = !videoRef.current.muted; @@ -580,7 +559,11 @@ function DetailsContent({ } } }} - theme="glass" + theme="purple" + className={classNames( + "gap-2 h-12 rounded-lg px-4 py-2 my-1 transition-transform hover:scale-105 duration-100", + "text-md text-white flex items-center justify-center", + )} > @@ -597,25 +580,31 @@ function DetailsContent({ )} -
- +
+
{data.genres && data.genres.length > 0 && (
- {data.genres.map((genre) => ( + {data.genres.map((genre, index) => ( {genre.name} @@ -656,7 +645,7 @@ function DetailsContent({
{/* Right Column - Details */} -
+
{data.runtime && (
@@ -1115,7 +1104,7 @@ export function DetailsModal(props: { >