"use client"; import { ENDPOINTS } from "#/api/config"; import { useEffect } from "react"; import { _fetchAPI } from "./PlayerParsing"; import { useUserPlayerPreferencesStore } from "#/store/player"; import { numberDeclension } from "#/api/utils"; import { Voiceover } from "./VoiceoverSelectorMenu"; export interface Source { id: number; name: string; episodes_count: number; } interface SourceSelectorMenuProps { release_id: number; setSource: (state) => void; voiceover: Voiceover; source: Source; sourceList: Source[]; setPlayerError: (state) => void; } export const SourceSelectorMenu = ({ release_id, setSource, voiceover, source, sourceList, setPlayerError, }: SourceSelectorMenuProps) => { const playerPreferenceStore = useUserPlayerPreferencesStore(); const preferredSource = playerPreferenceStore.getPreferredPlayer(release_id); useEffect(() => { const __getInfo = async () => { let url = `${ENDPOINTS.release.episode}/${release_id}/${voiceover.id}`; const src = await _fetchAPI( url, "Не удалось получить информацию о источниках", setPlayerError ); if (src) { const selectedSrc = src.sources.find( (source: Source) => source.name === preferredSource ) || src.sources[0]; if (selectedSrc.episodes_count == 0) { const remSources = src.sources.filter( (source: any) => source.id !== selectedSrc.id ); setSource({ selected: remSources[0], available: remSources, }); return; } setSource({ selected: selectedSrc, available: src.sources, }); } }; if (voiceover) { __getInfo(); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [voiceover]); if (!voiceover || !source || !sourceList || sourceList.length <= 1) return <> return (

Источник

{sourceList && sourceList.length > 0 ? sourceList.map((src: Source) => { return ( ); }) : ""}
); };