diff --git a/components/series/NextUp.tsx b/components/series/NextUp.tsx index cd7c3efd7..50b792268 100644 --- a/components/series/NextUp.tsx +++ b/components/series/NextUp.tsx @@ -3,6 +3,7 @@ import { FlashList } from "@shopify/flash-list"; import { useQuery } from "@tanstack/react-query"; import { useAtom } from "jotai"; import type React from "react"; +import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { View } from "react-native"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; @@ -33,13 +34,16 @@ export const NextUp: React.FC<{ seriesId: string }> = ({ seriesId }) => { staleTime: 0, }); - if (!items?.length) - return ( - - {t("item_card.next_up")} - {t("item_card.no_items_to_display")} - - ); + // Defensive client-side filter: some Jellyfin server versions ignore the + // `seriesId` query param on /Shows/NextUp and return next-up items across all + // series (the same content as the home tab's Next Up row). Filter to ensure + // we only ever show episodes belonging to this series. + const filteredItems = useMemo( + () => items?.filter((item) => item.SeriesId === seriesId) ?? [], + [items, seriesId], + ); + + if (!filteredItems.length) return null; return ( @@ -50,7 +54,7 @@ export const NextUp: React.FC<{ seriesId: string }> = ({ seriesId }) => { contentContainerStyle={{ paddingLeft: 16 }} horizontal showsHorizontalScrollIndicator={false} - data={items} + data={filteredItems} renderItem={({ item, index }) => (