import { Ionicons } from "@expo/vector-icons"; import { MediaSourceInfo } from "@jellyfin/sdk/lib/generated-client/models"; import { useMemo, useState } from "react"; import { Modal, TouchableOpacity, View } from "react-native"; import { Text } from "./common/Text"; interface Props extends React.ComponentProps { source?: MediaSourceInfo; onChange: (value: number) => void; selected?: number | undefined; } export const AudioTrackSelector: React.FC = ({ source, onChange, selected, ...props }) => { const [isModalVisible, setIsModalVisible] = useState(false); const audioStreams = useMemo( () => source?.MediaStreams?.filter((x) => x.Type === "Audio"), [source] ); const selectedAudioSteam = useMemo( () => audioStreams?.find((x) => x.Index === selected), [audioStreams, selected] ); return ( <> Audio setIsModalVisible(true)} > {selectedAudioSteam?.DisplayTitle} setIsModalVisible(false)} > setIsModalVisible(false)} > Audio Streams {audioStreams?.map((audio, idx: number) => ( { if (audio.Index !== null && audio.Index !== undefined) { onChange(audio.Index); setIsModalVisible(false); } }} > {audio.DisplayTitle} {audio.Index === selected && ( )} ))} setIsModalVisible(false)} > Cancel ); };