diff --git a/components/series/SeasonPicker.tsx b/components/series/SeasonPicker.tsx index e91f1e56..3f161782 100644 --- a/components/series/SeasonPicker.tsx +++ b/components/series/SeasonPicker.tsx @@ -1,26 +1,28 @@ import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models"; import { useQuery } from "@tanstack/react-query"; -import { router } from "expo-router"; -import { useAtom } from "jotai"; -import { useEffect, useState } from "react"; +import { useRouter } from "expo-router"; +import { atom, useAtom } from "jotai"; +import { useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; import * as DropdownMenu from "zeego/dropdown-menu"; -import { HorizontalScroll } from "../common/HorrizontalScroll"; -import { Text } from "../common/Text"; import ContinueWatchingPoster from "../ContinueWatchingPoster"; import { ItemCardText } from "../ItemCardText"; +import { HorizontalScroll } from "../common/HorrizontalScroll"; +import { Text } from "../common/Text"; type Props = { item: BaseItemDto; }; +export const seasonIndexAtom = atom(1); + export const SeasonPicker: React.FC = ({ item }) => { const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); + const [seasonIndex, setSeasonIndex] = useAtom(seasonIndexAtom); - const [selectedSeason, setSelectedSeason] = useState(null); - const [selectedSeasonId, setSelectedSeasonId] = useState(null); + const router = useRouter(); const { data: seasons } = useQuery({ queryKey: ["seasons", item.Id], @@ -38,7 +40,7 @@ export const SeasonPicker: React.FC = ({ item }) => { headers: { Authorization: `MediaBrowser DeviceId="${api.deviceInfo.id}", Token="${api.accessToken}"`, }, - } + }, ); return response.data.Items; @@ -46,6 +48,12 @@ export const SeasonPicker: React.FC = ({ item }) => { enabled: !!api && !!user?.Id && !!item.Id, }); + const selectedSeasonId: string | null = useMemo( + () => + seasons?.find((season: any) => season.IndexNumber === seasonIndex)?.Id, + [seasons, seasonIndex], + ); + const { data: episodes } = useQuery({ queryKey: ["episodes", item.Id, selectedSeasonId], queryFn: async () => { @@ -62,7 +70,7 @@ export const SeasonPicker: React.FC = ({ item }) => { headers: { Authorization: `MediaBrowser DeviceId="${api.deviceInfo.id}", Token="${api.accessToken}"`, }, - } + }, ); return response.data.Items as BaseItemDto[]; @@ -70,22 +78,13 @@ export const SeasonPicker: React.FC = ({ item }) => { enabled: !!api && !!user?.Id && !!item.Id && !!selectedSeasonId, }); - useEffect(() => { - if (!seasons || seasons.length === 0) return; - - setSelectedSeasonId( - seasons.find((season: any) => season.IndexNumber === 1)?.Id - ); - setSelectedSeason(1); - }, [seasons]); - return ( - Season {selectedSeason} + Season {seasonIndex} @@ -103,8 +102,7 @@ export const SeasonPicker: React.FC = ({ item }) => { { - setSelectedSeason(season.IndexNumber); - setSelectedSeasonId(season.Id); + setSeasonIndex(season.IndexNumber); }} > {season.Name}