From d3808bc19628b5cd91bbbe9954367738843c6f80 Mon Sep 17 00:00:00 2001 From: Alex Kim Date: Sat, 6 Jun 2026 00:18:06 +1000 Subject: [PATCH] fix(series): filter Next Up items by SeriesId client-side Some Jellyfin server versions ignore the seriesId query parameter on /Shows/NextUp and return the global next-up list, causing the series detail page to show episodes from unrelated series (matching the home tab's Next Up row). Defensively filter the response by SeriesId on the client and hide the section entirely when there are no matching items, instead of rendering an empty 'No items to display' block. --- components/series/NextUp.tsx | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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 }) => (