diff --git a/components/ItemContent.tv.tsx b/components/ItemContent.tv.tsx index 4f467b9a..7caffb0b 100644 --- a/components/ItemContent.tv.tsx +++ b/components/ItemContent.tv.tsx @@ -816,15 +816,20 @@ export const ItemContentTV: React.FC = React.memo( gap: 24, }} > - {seasonEpisodes.map((episode, index) => ( - handleEpisodePress(episode)} - disabled={episode.Id === item.Id} - refSetter={index === 0 ? setFirstEpisodeRef : undefined} - /> - ))} + {seasonEpisodes.map((episode, index) => { + const isCurrentEpisode = episode.Id === item.Id; + return ( + handleEpisodePress(episode)} + disabled={isCurrentEpisode} + focusableWhenDisabled={isCurrentEpisode} + isCurrent={isCurrentEpisode} + refSetter={index === 0 ? setFirstEpisodeRef : undefined} + /> + ); + })} )} diff --git a/components/series/TVEpisodeCard.tsx b/components/series/TVEpisodeCard.tsx index 1fb22993..60039346 100644 --- a/components/series/TVEpisodeCard.tsx +++ b/components/series/TVEpisodeCard.tsx @@ -1,3 +1,4 @@ +import { Ionicons } from "@expo/vector-icons"; import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { Image } from "expo-image"; import { useAtomValue } from "jotai"; @@ -16,6 +17,10 @@ interface TVEpisodeCardProps { episode: BaseItemDto; hasTVPreferredFocus?: boolean; disabled?: boolean; + /** When true, the item remains focusable even when disabled (for navigation purposes) */ + focusableWhenDisabled?: boolean; + /** Shows a "Now Playing" badge on the card */ + isCurrent?: boolean; onPress: () => void; onFocus?: () => void; onBlur?: () => void; @@ -27,6 +32,8 @@ export const TVEpisodeCard: React.FC = ({ episode, hasTVPreferredFocus = false, disabled = false, + focusableWhenDisabled = false, + isCurrent = false, onPress, onFocus, onBlur, @@ -68,11 +75,17 @@ export const TVEpisodeCard: React.FC = ({ }, [episode.ParentIndexNumber, episode.IndexNumber]); return ( - + = ({ )} + + {/* Now Playing badge */} + {isCurrent && ( + + + + Now Playing + + + )}