;
className?: string;
};
-const Ratings = ({ rating, className }: Props) => {
- const { onLiked, onLoved, liked, loved } = useRating(rating);
- const disabled = useMemo(() => rating?.type !== 'Ready', [rating]);
+const Ratings = ({ ratingInfo, className }: Props) => {
+ const { onLiked, onLoved, liked, loved } = useRating(ratingInfo);
+ const disabled = useMemo(() => ratingInfo?.type !== 'Ready', [ratingInfo]);
return (
diff --git a/src/components/MetaPreview/Ratings/useRating.ts b/src/components/MetaPreview/Ratings/useRating.ts
index 7df8bc925..fdf53f551 100644
--- a/src/components/MetaPreview/Ratings/useRating.ts
+++ b/src/components/MetaPreview/Ratings/useRating.ts
@@ -3,10 +3,10 @@
import { useMemo, useCallback } from 'react';
import { useServices } from 'stremio/services';
-const useRating = (rating?: Rating) => {
+const useRating = (ratingInfo?: Loadable) => {
const { core } = useServices();
- const setRating = useCallback((status: 'liked' | 'loved' | null) => {
+ const setRating = useCallback((status: RatingStatus) => {
core.transport.dispatch({
action: 'MetaDetails',
args: {
@@ -16,21 +16,26 @@ const useRating = (rating?: Rating) => {
});
}, []);
+ const status = useMemo(() => {
+ const content = ratingInfo?.type === 'Ready' ? ratingInfo.content as RatingInfo : null;
+ return content?.status;
+ }, [ratingInfo]);
+
const liked = useMemo(() => {
- return rating?.content === 'liked';
- }, [rating]);
+ return status === 'liked';
+ }, [status]);
const loved = useMemo(() => {
- return rating?.content === 'loved';
- }, [rating]);
+ return status === 'loved';
+ }, [status]);
const onLiked = useCallback(() => {
- setRating(rating?.content === 'liked' ? null : 'liked');
- }, [rating]);
+ setRating(status === 'liked' ? null : 'liked');
+ }, [status]);
const onLoved = useCallback(() => {
- setRating(rating?.content === 'loved' ? null : 'loved');
- }, [rating]);
+ setRating(status === 'loved' ? null : 'loved');
+ }, [status]);
return {
onLiked,
diff --git a/src/routes/MetaDetails/MetaDetails.js b/src/routes/MetaDetails/MetaDetails.js
index 1b84eacdb..0150734cf 100644
--- a/src/routes/MetaDetails/MetaDetails.js
+++ b/src/routes/MetaDetails/MetaDetails.js
@@ -167,7 +167,7 @@ const MetaDetails = ({ urlParams, queryParams }) => {
inLibrary={metaDetails.metaItem.content.content.inLibrary}
toggleInLibrary={metaDetails.metaItem.content.content.inLibrary ? removeFromLibrary : addToLibrary}
metaId={metaDetails.metaItem.content.content.id}
- rating={metaDetails.rating}
+ ratingInfo={metaDetails.ratingInfo}
/>
}
diff --git a/src/types/models/MetaDetails.d.ts b/src/types/models/MetaDetails.d.ts
index df615da3e..570ca5e88 100644
--- a/src/types/models/MetaDetails.d.ts
+++ b/src/types/models/MetaDetails.d.ts
@@ -24,6 +24,5 @@ type MetaDetails = {
content: Loadable
}[],
title: string | null,
- like: Loadable | null,
- sentLike: Loadable | null
+ ratingInfo: Loadable | null,
};
diff --git a/src/types/types.d.ts b/src/types/types.d.ts
index ba921e306..5a881f9e0 100644
--- a/src/types/types.d.ts
+++ b/src/types/types.d.ts
@@ -69,7 +69,9 @@ type AudioTrack = {
origin: string,
};
-type Rating = {
- content: 'liked' | 'loved' | null,
- type: 'Ready' | 'Loading' | 'Error',
+type RatingStatus = 'liked' | 'loved' | null;
+
+type RatingInfo = {
+ metaId: string,
+ status: RatingStatus,
};