diff --git a/src/components/MetaPreview/MetaPreview.js b/src/components/MetaPreview/MetaPreview.js index c0e9fb165..b1124e9ab 100644 --- a/src/components/MetaPreview/MetaPreview.js +++ b/src/components/MetaPreview/MetaPreview.js @@ -17,6 +17,7 @@ const ActionButton = require('./ActionButton'); const MetaLinks = require('./MetaLinks'); const MetaPreviewPlaceholder = require('./MetaPreviewPlaceholder'); const styles = require('./styles'); +const { default: useRating } = require('./useRating'); const ALLOWED_LINK_REDIRECTS = [ routesRegexp.search.regexp, @@ -24,8 +25,9 @@ const ALLOWED_LINK_REDIRECTS = [ routesRegexp.metadetails.regexp ]; -const MetaPreview = React.forwardRef(({ className, compact, name, logo, background, runtime, releaseInfo, released, description, deepLinks, links, trailerStreams, inLibrary, toggleInLibrary }, ref) => { +const MetaPreview = React.forwardRef(({ className, compact, name, logo, background, runtime, releaseInfo, released, description, deepLinks, links, trailerStreams, inLibrary, toggleInLibrary, metaDetails }, ref) => { const { t } = useTranslation(); + const { onLiked, onLoved, like } = useRating(metaDetails); const [shareModalOpen, openShareModal, closeShareModal] = useBinaryState(false); const linksGroups = React.useMemo(() => { return Array.isArray(links) ? @@ -220,6 +222,30 @@ const MetaPreview = React.forwardRef(({ className, compact, name, logo, backgrou : null } + { + !compact ? + + : + null + } + { + !compact ? + + : + null + } { typeof showHref === 'string' && compact ? { + const { core } = useServices(); + + const like = useMemo(() => { + return metaDetails.like !== null && metaDetails.like.type === 'Ready' ? metaDetails.like.content : null; + }, [metaDetails.like]); + const setRating = useCallback( + (status: string) => { + if (!metaDetails.metaItem || !metaDetails.metaItem.content) { + return; + } + core.transport.dispatch({ + action: 'MetaDetails', + args: { + action: 'Rate', + args: { + id: metaDetails?.metaItem.content.content?.id, + status: status, + }, + }, + }); + }, + [metaDetails], + ); + + const onLiked = () => { + setRating(like === 'liked' ? null : 'liked'); + }; + + const onLoved = () => { + setRating(like === 'loved' ? null : 'loved'); + }; + + return { + onLiked, + onLoved, + like, + }; +}; + +export default useRating; diff --git a/src/routes/MetaDetails/MetaDetails.js b/src/routes/MetaDetails/MetaDetails.js index 8a50b59c1..bb8789be0 100644 --- a/src/routes/MetaDetails/MetaDetails.js +++ b/src/routes/MetaDetails/MetaDetails.js @@ -166,6 +166,7 @@ const MetaDetails = ({ urlParams, queryParams }) => { trailerStreams={metaDetails.metaItem.content.content.trailerStreams} inLibrary={metaDetails.metaItem.content.content.inLibrary} toggleInLibrary={metaDetails.metaItem.content.content.inLibrary ? removeFromLibrary : addToLibrary} + metaDetails={metaDetails} /> } diff --git a/src/types/models/MetaDetails.d.ts b/src/types/models/MetaDetails.d.ts index c7eeafb1b..df615da3e 100644 --- a/src/types/models/MetaDetails.d.ts +++ b/src/types/models/MetaDetails.d.ts @@ -24,4 +24,6 @@ type MetaDetails = { content: Loadable }[], title: string | null, + like: Loadable | null, + sentLike: Loadable | null };