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 { 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"; type Props = { item: BaseItemDto; }; export const SeasonPicker: React.FC = ({ item }) => { const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); const [selectedSeason, setSelectedSeason] = useState(null); const [selectedSeasonId, setSelectedSeasonId] = useState(null); const { data: seasons } = useQuery({ queryKey: ["seasons", item.Id], queryFn: async () => { if (!api || !user?.Id || !item.Id) return []; const response = await api.axiosInstance.get( `${api.basePath}/Shows/${item.Id}/Seasons`, { params: { userId: user?.Id, itemId: item.Id, Fields: "ItemCounts,PrimaryImageAspectRatio,CanDelete,MediaSourceCount", }, headers: { Authorization: `MediaBrowser DeviceId="${api.deviceInfo.id}", Token="${api.accessToken}"`, }, } ); return response.data.Items; }, enabled: !!api && !!user?.Id && !!item.Id, }); const { data: episodes } = useQuery({ queryKey: ["episodes", item.Id, selectedSeasonId], queryFn: async () => { if (!api || !user?.Id || !item.Id) return []; const response = await api.axiosInstance.get( `${api.basePath}/Shows/${item.Id}/Episodes`, { params: { userId: user?.Id, seasonId: selectedSeasonId, Fields: "ItemCounts,PrimaryImageAspectRatio,CanDelete,MediaSourceCount,Overview", }, headers: { Authorization: `MediaBrowser DeviceId="${api.deviceInfo.id}", Token="${api.accessToken}"`, }, } ); return response.data.Items as BaseItemDto[]; }, 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} Seasons {seasons?.map((season: any) => ( { setSelectedSeason(season.IndexNumber); setSelectedSeasonId(season.Id); }} > {season.Name} ))} {episodes && ( data={episodes} renderItem={(item, index) => ( { router.push(`/(auth)/items/${item.Id}/page`); }} className="flex flex-col w-48" > )} /> )} ); };