"use client"; import { ENDPOINTS } from "#/api/config"; import { useEffect, useState } from "react"; import { _fetchAPI } from "./PlayerParsing"; import { Voiceover } from "./VoiceoverSelectorMenu"; import { Source } from "./SourceSelectorMenu"; import { getAnonEpisodesWatched } from "./ReleasePlayer"; export interface Episode { position: number; name: string; is_watched: boolean; } interface EpisodeSelectorMenuProps { release_id: number; voiceover: Voiceover; source: Source; token: string | null; setEpisode: (state) => void; episode: Episode; episodeList: Episode[]; setPlayerError: (state) => void; } export const EpisodeSelectorMenu = ({ release_id, token, voiceover, source, setEpisode, episode, episodeList, setPlayerError, }: EpisodeSelectorMenuProps) => { const [watchedEpisodes, setWatchedEpisodes] = useState([]); useEffect(() => { const __getInfo = async () => { let url = `${ENDPOINTS.release.episode}/${release_id}/${voiceover.id}/${source.id}`; if (token) { url += `?token=${token}`; } const episodes = await _fetchAPI( url, "Не удалось получить информацию о эпизодах", setPlayerError ); if (episodes) { let anonEpisodesWatched = getAnonEpisodesWatched( release_id, source.id, voiceover.id ); let lastEpisodeWatched = Math.max.apply( 0, Object.keys(anonEpisodesWatched[release_id][source.id][voiceover.id]) ); let selectedEpisode = episodes.episodes.find( (episode: Episode) => episode.position == lastEpisodeWatched ) || episodes.episodes[0]; setEpisode({ selected: selectedEpisode, available: episodes.episodes, }); } }; if (source) { __getInfo(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [source]); useEffect(() => { if (release_id && source && voiceover) { const anonEpisodesWatched = getAnonEpisodesWatched( release_id, source.id, voiceover.id ); setWatchedEpisodes( anonEpisodesWatched[release_id][source.id][voiceover.id] ); } }, [release_id, source, voiceover]); if (!voiceover || !source || !episode) return <>> return (
Эпизод