import { tc } from "@/utils/textTools"; import { BaseItemDto, MediaSourceInfo, } from "@jellyfin/sdk/lib/generated-client/models"; import { useEffect, useMemo } from "react"; import { TouchableOpacity, View } from "react-native"; import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; interface Props extends React.ComponentProps { item: BaseItemDto; onChange: (value: MediaSourceInfo) => void; selected: MediaSourceInfo | null; } export const MediaSourceSelector: React.FC = ({ item, onChange, selected, ...props }) => { const mediaSources = useMemo(() => { return item.MediaSources; }, [item]); const selectedMediaSource = useMemo( () => mediaSources ?.find((x) => x.Id === selected?.Id) ?.MediaStreams?.find((x) => x.Type === "Video")?.DisplayTitle || "", [mediaSources, selected] ); useEffect(() => { if (mediaSources?.length) onChange(mediaSources[0]); }, [mediaSources]); return ( Video {tc(selectedMediaSource, 7)} Media sources {mediaSources?.map((source, idx: number) => ( { onChange(source); }} > { source.MediaStreams?.find((s) => s.Type === "Video") ?.DisplayTitle } ))} ); };