import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { View, ViewProps } from "react-native"; import { Badge } from "./Badge"; import { Ionicons } from "@expo/vector-icons"; import { Image } from "expo-image"; import {MovieResult, TvResult} from "@/utils/jellyseerr/server/models/Search"; import {useJellyseerr} from "@/hooks/useJellyseerr"; import {useQuery} from "@tanstack/react-query"; import {MediaType} from "@/utils/jellyseerr/server/constants/media"; interface Props extends ViewProps { item?: BaseItemDto | null; } export const Ratings: React.FC = ({ item, ...props }) => { if (!item) return null; return ( {item.OfficialRating && ( )} {item.CommunityRating && ( } /> )} {item.CriticRating && ( } /> )} ); }; export const JellyserrRatings: React.FC<{result: MovieResult | TvResult}> = ({ result }) => { const {jellyseerrApi} = useJellyseerr(); const { data, isLoading } = useQuery({ queryKey: ['jellyseerr', result.id, result.mediaType, 'ratings'], queryFn: async () => { return result.mediaType === MediaType.MOVIE ? jellyseerrApi?.movieRatings(result.id) : jellyseerrApi?.tvRatings(result.id) }, staleTime: (5).minutesToMilliseconds(), retry: false, enabled: !!jellyseerrApi, }); return (isLoading || !!result.voteCount || (data?.criticsRating && !!data?.criticsScore) || (data?.audienceRating && !!data?.audienceScore)) && ( {data?.criticsRating && !!data?.criticsScore && ( } /> )} {data?.audienceRating && !!data?.audienceScore && ( } /> )} {!!result.voteCount && ( } /> )} ) }