import { TouchableOpacity, View } from "react-native"; import * as DropdownMenu from "zeego/dropdown-menu"; import { Text } from "./common/Text"; import { useEffect, useMemo } from "react"; import { usePlaySettings } from "@/providers/PlaySettingsProvider"; export type Bitrate = { key: string; value: number | undefined; height?: number; }; export const BITRATES: Bitrate[] = [ { key: "Max", value: undefined, }, { key: "8 Mb/s", value: 8000000, height: 1080, }, { key: "4 Mb/s", value: 4000000, height: 1080, }, { key: "2 Mb/s", value: 2000000, height: 720, }, { key: "500 Kb/s", value: 500000, height: 480, }, { key: "250 Kb/s", value: 250000, height: 480, }, ]; interface Props extends React.ComponentProps { inverted?: boolean; } export const BitrateSelector: React.FC = ({ inverted, ...props }) => { const { setPlaySettings, playSettings } = usePlaySettings(); const sorted = useMemo(() => { if (inverted) return BITRATES.sort( (a, b) => (a.value || Infinity) - (b.value || Infinity) ); return BITRATES.sort( (a, b) => (b.value || Infinity) - (a.value || Infinity) ); }, []); const selected = useMemo(() => { return sorted.find((b) => b.value === playSettings?.bitrate?.value); }, [playSettings?.bitrate]); // Set default bitrate on load useEffect(() => { setPlaySettings((prev) => ({ ...prev, bitrate: BITRATES[0], })); }, []); return ( Quality {selected?.key} Bitrates {sorted.map((b) => ( { setPlaySettings((prev) => ({ ...prev, bitrate: b, })); }} > {b.key} ))} ); };