import type { SheetProps } from "tamagui"; import { useState } from "react"; import { Ionicons, MaterialCommunityIcons } from "@expo/vector-icons"; import { useQuery } from "@tanstack/react-query"; import { useTheme, View } from "tamagui"; import { fetchMediaDetails, fetchSeasonDetails } from "@movie-web/tmdb"; import { usePlayerStore } from "~/stores/player/store"; import { MWButton } from "../ui/Button"; import { Controls } from "./Controls"; import { Settings } from "./settings/Sheet"; const EpisodeSelector = ({ seasonNumber, setSelectedSeason, ...props }: SheetProps & { seasonNumber: number; setSelectedSeason: (season: number | null) => void; }) => { const theme = useTheme(); const meta = usePlayerStore((state) => state.meta); const setMeta = usePlayerStore((state) => state.setMeta); const { data, isLoading } = useQuery({ queryKey: ["seasonEpisodes", meta!.tmdbId, seasonNumber], queryFn: async () => { return fetchSeasonDetails(meta!.tmdbId, seasonNumber); }, enabled: meta !== null, }); if (!meta) return null; return ( { setSelectedSeason(null); props.onOpenChange?.(false); }} /> } title={`Season ${data?.season_number}`} /> {data?.episodes.map((episode) => ( E{episode.episode_number} } title={episode.name} onPress={() => { setMeta({ ...meta, episode: { number: episode.episode_number, tmdbId: episode.id.toString(), }, }); }} /> ))} ); }; export const SeasonSelector = () => { const theme = useTheme(); const [open, setOpen] = useState(false); const [episodeOpen, setEpisodeOpen] = useState(false); const [selectedSeason, setSelectedSeason] = useState(null); const meta = usePlayerStore((state) => state.meta); const { data, isLoading } = useQuery({ queryKey: ["seasons", meta!.tmdbId], queryFn: async () => { return fetchMediaDetails(meta!.tmdbId, "tv"); }, enabled: meta !== null, }); if (meta?.type !== "show") return null; return ( <> } onPress={() => setOpen(true)} > Episodes {episodeOpen && selectedSeason ? ( ) : ( <> setOpen(false)} /> } title={data?.result.name ?? ""} /> {data?.result.seasons.map((season) => ( } onPress={() => { setSelectedSeason(season.season_number); setEpisodeOpen(true); }} /> ))} )} ); };