fix: Recent request slider initial loading

This commit is contained in:
herrrta
2025-03-05 20:07:21 -05:00
parent 88efb09317
commit 66f61c3c38
4 changed files with 25 additions and 19 deletions

View File

@@ -13,7 +13,7 @@ import {TvDetails} from "@/utils/jellyseerr/server/models/Tv";
import {MovieDetails} from "@/utils/jellyseerr/server/models/Movie";
interface Props extends TouchableOpacityProps {
result: MovieResult | TvResult | MovieDetails | TvDetails;
result?: MovieResult | TvResult | MovieDetails | TvDetails;
mediaTitle: string;
releaseYear: number;
canRequest: boolean;
@@ -47,11 +47,13 @@ export const TouchableJellyseerrRouter: React.FC<PropsWithChildren<Props>> = ({
}, [jellyseerrApi, jellyseerrUser]);
const request = useCallback(
() =>
() => {
if (!result) return;
requestMedia(mediaTitle, {
mediaId: result.id,
mediaType,
}),
})
},
[jellyseerrApi, result]
);
@@ -62,6 +64,8 @@ export const TouchableJellyseerrRouter: React.FC<PropsWithChildren<Props>> = ({
<ContextMenu.Trigger>
<TouchableOpacity
onPress={() => {
if (!result) return;
// @ts-ignore
router.push({
pathname: `/(auth)/(tabs)/${from}/jellyseerr/page`,

View File

@@ -34,7 +34,7 @@ const RequestCard: React.FC<{request: MediaRequest}> = ({request}) => {
});
return (
details && <JellyseerrPoster horizontal showDownloadInfo item={details} mediaRequest={refreshedRequest} />
<JellyseerrPoster horizontal showDownloadInfo item={details} mediaRequest={refreshedRequest} />
)
}
@@ -50,7 +50,7 @@ const RecentRequestsSlide: React.FC<SlideProps & ViewProps> = ({ slide, ...props
});
return (
requests && (
requests && requests.results.length > 0 && (
<Slide
{...props}
slide={slide}

View File

@@ -20,7 +20,7 @@ import {Colors} from "@/constants/Colors";
import {Tags} from "@/components/GenreTags";
interface Props extends ViewProps {
item: MovieResult | TvResult | MovieDetails | TvDetails;
item?: MovieResult | TvResult | MovieDetails | TvDetails;
horizontal?: boolean;
showDownloadInfo?: boolean;
mediaRequest?: MediaRequest;
@@ -48,12 +48,12 @@ const JellyseerrPoster: React.FC<Props> = ({
};
const backdropSrc = useMemo(
() => jellyseerrApi?.imageProxy(item.backdropPath, "w1920_and_h800_multi_faces"),
() => jellyseerrApi?.imageProxy(item?.backdropPath, "w1920_and_h800_multi_faces"),
[item, jellyseerrApi, horizontal]
);
const posterSrc = useMemo(
() => jellyseerrApi?.imageProxy(item.posterPath, "w300_and_h450_face",),
() => jellyseerrApi?.imageProxy(item?.posterPath, "w300_and_h450_face",),
[item, jellyseerrApi, horizontal]
);
@@ -122,8 +122,8 @@ const JellyseerrPoster: React.FC<Props> = ({
<Animated.View style={imageAnimatedStyle}>
<Image
className="w-full"
key={item.id}
id={item.id.toString()}
key={item?.id}
id={item?.id.toString()}
source={{ uri: horizontal ? backdropSrc : posterSrc }}
cachePolicy={"memory-disk"}
contentFit="cover"
@@ -184,10 +184,12 @@ const JellyseerrPoster: React.FC<Props> = ({
/>
</View>
</View>
<View className={`mt-2 flex flex-col ${horizontal ? 'w-44' : 'w-28'}`}>
<Text numberOfLines={2}>{title}</Text>
<Text className="text-xs opacity-50 align-bottom">{releaseYear}</Text>
</View>
{item && (
<View className={`mt-2 flex flex-col ${horizontal ? 'w-44' : 'w-28'}`}>
<Text numberOfLines={2}>{title}</Text>
<Text className="text-xs opacity-50 align-bottom">{releaseYear}</Text>
</View>
)}
</TouchableJellyseerrRouter>
);
};

View File

@@ -464,22 +464,22 @@ export const useJellyseerr = () => {
)
};
const getTitle = (item: TvResult | TvDetails | MovieResult | MovieDetails) => {
const getTitle = (item?: TvResult | TvDetails | MovieResult | MovieDetails) => {
return isJellyseerrResult(item)
? (item.mediaType == MediaType.MOVIE ? item?.title : item?.name)
: (item.mediaInfo.mediaType == MediaType.MOVIE ? (item as MovieDetails)?.title : (item as TvDetails)?.name)
: (item?.mediaInfo.mediaType == MediaType.MOVIE ? (item as MovieDetails)?.title : (item as TvDetails)?.name)
};
const getYear = (item: TvResult | TvDetails | MovieResult | MovieDetails) => {
const getYear = (item?: TvResult | TvDetails | MovieResult | MovieDetails) => {
return new Date((
isJellyseerrResult(item)
? (item.mediaType == MediaType.MOVIE ? item?.releaseDate : item?.firstAirDate)
: (item.mediaInfo.mediaType == MediaType.MOVIE ? (item as MovieDetails)?.releaseDate : (item as TvDetails)?.firstAirDate))
: (item?.mediaInfo.mediaType == MediaType.MOVIE ? (item as MovieDetails)?.releaseDate : (item as TvDetails)?.firstAirDate))
|| ""
)?.getFullYear?.()
};
const getMediaType = (item: TvResult | TvDetails | MovieResult | MovieDetails): MediaType => {
const getMediaType = (item?: TvResult | TvDetails | MovieResult | MovieDetails): MediaType => {
return isJellyseerrResult(item)
? item.mediaType
: item?.mediaInfo?.mediaType