From 3f0f0090af069fac66a956a2ad878eabde7c4684 Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Sun, 5 Jan 2025 11:55:41 +0100 Subject: [PATCH] fix: refactor permissions --- components/posters/JellyseerrPoster.tsx | 81 +++++++++++-------------- 1 file changed, 37 insertions(+), 44 deletions(-) diff --git a/components/posters/JellyseerrPoster.tsx b/components/posters/JellyseerrPoster.tsx index ad3df50f..5f363d42 100644 --- a/components/posters/JellyseerrPoster.tsx +++ b/components/posters/JellyseerrPoster.tsx @@ -1,53 +1,47 @@ -import {View, ViewProps} from "react-native"; -import {Image} from "expo-image"; -import {Text} from "@/components/common/Text"; -import {useMemo} from "react"; -import {MovieResult, TvResult} from "@/utils/jellyseerr/server/models/Search"; -import {MediaStatus, MediaType} from "@/utils/jellyseerr/server/constants/media"; -import {useJellyseerr} from "@/hooks/useJellyseerr"; -import {hasPermission, Permission} from "@/utils/jellyseerr/server/lib/permissions"; -import {TouchableJellyseerrRouter} from "@/components/common/JellyseerrItemRouter"; +import { View, ViewProps } from "react-native"; +import { Image } from "expo-image"; +import { Text } from "@/components/common/Text"; +import { useMemo } from "react"; +import { MovieResult, TvResult } from "@/utils/jellyseerr/server/models/Search"; +import { + MediaStatus, + MediaType, +} from "@/utils/jellyseerr/server/constants/media"; +import { useJellyseerr } from "@/hooks/useJellyseerr"; +import { + hasPermission, + Permission, +} from "@/utils/jellyseerr/server/lib/permissions"; +import { TouchableJellyseerrRouter } from "@/components/common/JellyseerrItemRouter"; import JellyseerrStatusIcon from "@/components/jellyseerr/JellyseerrStatusIcon"; import JellyseerrMediaIcon from "@/components/jellyseerr/JellyseerrMediaIcon"; +import { useJellyseerrCanRequest } from "@/utils/_jellyseerr/useJellyseerrCanRequest"; interface Props extends ViewProps { item: MovieResult | TvResult; } -const JellyseerrPoster: React.FC = ({ - item, - ...props -}) => { - const {jellyseerrUser, jellyseerrApi} = useJellyseerr(); - // const imageSource = +const JellyseerrPoster: React.FC = ({ item, ...props }) => { + const { jellyseerrApi } = useJellyseerr(); const imageSrc = useMemo( - () => jellyseerrApi?.imageProxy(item.posterPath, 'w300_and_h450_face'), + () => jellyseerrApi?.imageProxy(item.posterPath, "w300_and_h450_face"), [item, jellyseerrApi] - ) - const title = useMemo(() => item.mediaType === MediaType.MOVIE ? item.title : item.name, [item]) - const releaseYear = useMemo(() => - new Date(item.mediaType === MediaType.MOVIE ? item.releaseDate : item.firstAirDate).getFullYear(), + ); + const title = useMemo( + () => (item.mediaType === MediaType.MOVIE ? item.title : item.name), [item] - ) + ); + const releaseYear = useMemo( + () => + new Date( + item.mediaType === MediaType.MOVIE + ? item.releaseDate + : item.firstAirDate + ).getFullYear(), + [item] + ); - const showRequestButton = useMemo(() => - jellyseerrUser && hasPermission( - [ - Permission.REQUEST, - item.mediaType === 'movie' - ? Permission.REQUEST_MOVIE - : Permission.REQUEST_TV, - ], - jellyseerrUser.permissions, - {type: 'or'} - ), - [item, jellyseerrUser] - ) - - const canRequest = useMemo(() => { - const status = item?.mediaInfo?.status - return showRequestButton && !status || status === MediaStatus.UNKNOWN - }, [item]) + const canRequest = useJellyseerrCanRequest(item); return ( = ({ = ({ - ) -} + ); +}; - -export default JellyseerrPoster; \ No newline at end of file +export default JellyseerrPoster;