import { Platform, TouchableOpacity, View } from "react-native"; const DropdownMenu = !Platform.isTV ? require("zeego/dropdown-menu") : null; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Text } from "./common/Text"; export type Bitrate = { key: string; value: number | undefined; }; 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, }, { key: "1 Mb/s", value: 1000000, }, { key: "500 Kb/s", value: 500000, }, { key: "250 Kb/s", value: 250000, }, ].sort( (a, b) => (b.value || Number.POSITIVE_INFINITY) - (a.value || Number.POSITIVE_INFINITY), ); interface Props extends React.ComponentProps { onChange: (value: Bitrate) => void; selected?: Bitrate | null; inverted?: boolean | null; } export const BitrateSelector: React.FC = ({ onChange, selected, inverted, ...props }) => { const isTv = Platform.isTV; const sorted = useMemo(() => { if (inverted) return BITRATES.slice().sort( (a, b) => (a.value || Number.POSITIVE_INFINITY) - (b.value || Number.POSITIVE_INFINITY), ); return BITRATES.slice().sort( (a, b) => (b.value || Number.POSITIVE_INFINITY) - (a.value || Number.POSITIVE_INFINITY), ); }, [inverted]); const { t } = useTranslation(); if (isTv) return null; return ( {t("item_card.quality")} {BITRATES.find((b) => b.value === selected?.value)?.key} Bitrates {sorted.map((b) => ( { onChange(b); }} > {b.key} ))} ); };