From 690ea3480cc92113df300beb8772e651fcf94673 Mon Sep 17 00:00:00 2001 From: Ivan Evans <74743263+Pasithea0@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:08:34 -0600 Subject: [PATCH 1/4] Create MediaBookmark.tsx --- src/components/media/MediaBookmark.tsx | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/components/media/MediaBookmark.tsx diff --git a/src/components/media/MediaBookmark.tsx b/src/components/media/MediaBookmark.tsx new file mode 100644 index 00000000..802fd7f2 --- /dev/null +++ b/src/components/media/MediaBookmark.tsx @@ -0,0 +1,44 @@ +import { useCallback, useMemo } from "react"; + +import { Icons } from "@/components/Icon"; +import { useBookmarkStore } from "@/stores/bookmarks"; +import { PlayerMeta } from "@/stores/player/slices/source"; +import { MediaItem } from "@/utils/mediaTypes"; + +import { IconPatch } from "../buttons/IconPatch"; + +interface MediaBookmarkProps { + media: MediaItem; +} + +export function MediaBookmarkButton({ media }: MediaBookmarkProps) { + const addBookmark = useBookmarkStore((s) => s.addBookmark); + const removeBookmark = useBookmarkStore((s) => s.removeBookmark); + const bookmarks = useBookmarkStore((s) => s.bookmarks); + const meta: PlayerMeta | undefined = useMemo(() => { + return media.year !== undefined + ? { + type: media.type, + title: media.title, + tmdbId: media.id, + releaseYear: media.year, + poster: media.poster, + } + : undefined; + }, [media]); + const isBookmarked = !!bookmarks[meta?.tmdbId ?? ""]; + + const toggleBookmark = useCallback(() => { + if (!meta) return; + if (isBookmarked) removeBookmark(meta.tmdbId); + else addBookmark(meta); + }, [isBookmarked, meta, addBookmark, removeBookmark]); + + return ( + + ); +} From 6a7ea0ea2f547d4456e548f48f2d202d5975b1e6 Mon Sep 17 00:00:00 2001 From: Ivan Evans <74743263+Pasithea0@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:09:11 -0600 Subject: [PATCH 2/4] Update MediaCard.tsx --- src/components/media/MediaCard.tsx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/components/media/MediaCard.tsx b/src/components/media/MediaCard.tsx index 47fbf051..24b131a5 100644 --- a/src/components/media/MediaCard.tsx +++ b/src/components/media/MediaCard.tsx @@ -8,6 +8,7 @@ import { DotList } from "@/components/text/DotList"; import { Flare } from "@/components/utils/Flare"; import { MediaItem } from "@/utils/mediaTypes"; +import { MediaBookmarkButton } from "./MediaBookmark"; import { IconPatch } from "../buttons/IconPatch"; import { Icons } from "../Icon"; @@ -66,7 +67,7 @@ function MediaCardContent({ return (
) : null} + {canLink ? ( +
e.preventDefault()}> + +
+ ) : null} +
closable && onClose?.()} icon={Icons.X} /> From bc4b28fd9ca63ed04ddb96d38157afefd7e1c824 Mon Sep 17 00:00:00 2001 From: Ivan Evans <74743263+Pasithea0@users.noreply.github.com> Date: Sun, 28 Apr 2024 22:16:50 -0600 Subject: [PATCH 3/4] revert sudoflix customs --- src/components/media/MediaCard.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/media/MediaCard.tsx b/src/components/media/MediaCard.tsx index 24b131a5..2152963a 100644 --- a/src/components/media/MediaCard.tsx +++ b/src/components/media/MediaCard.tsx @@ -67,7 +67,7 @@ function MediaCardContent({ return (
closable && onClose?.()} icon={Icons.X} /> From 9a8ecf2e8824ac63459e4e6e9f3c4bff124b5aac Mon Sep 17 00:00:00 2001 From: Ivan Evans <74743263+Pasithea0@users.noreply.github.com> Date: Tue, 30 Apr 2024 09:53:31 -0600 Subject: [PATCH 4/4] Bookmarks only while browsing Disabled bookmarks when there is nothing in the search bar. --- src/components/form/SearchBar.tsx | 2 +- src/components/media/MediaCard.tsx | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/form/SearchBar.tsx b/src/components/form/SearchBar.tsx index 6ac6128f..f3cc15f8 100644 --- a/src/components/form/SearchBar.tsx +++ b/src/components/form/SearchBar.tsx @@ -18,7 +18,7 @@ export const SearchBarInput = forwardRef( const [focused, setFocused] = useState(false); function setSearch(value: string) { - props.onChange(value, false); + props.onChange(value, true); } return ( diff --git a/src/components/media/MediaCard.tsx b/src/components/media/MediaCard.tsx index e1da9d71..c25fc0d5 100644 --- a/src/components/media/MediaCard.tsx +++ b/src/components/media/MediaCard.tsx @@ -6,6 +6,7 @@ import { Link } from "react-router-dom"; import { mediaItemToId } from "@/backend/metadata/tmdb"; import { DotList } from "@/components/text/DotList"; import { Flare } from "@/components/utils/Flare"; +import { useSearchQuery } from "@/hooks/useSearchQuery"; import { MediaItem } from "@/utils/mediaTypes"; import { MediaBookmarkButton } from "./MediaBookmark"; @@ -57,6 +58,8 @@ function MediaCardContent({ const dotListContent = [t(`media.types.${media.type}`)]; + const [searchQuery] = useSearchQuery(); + if (media.year) { dotListContent.push(media.year.toFixed()); } @@ -142,7 +145,7 @@ function MediaCardContent({ ) : null} - {canLink ? ( + {canLink && searchQuery.length > 0 ? (
e.preventDefault()}>