import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { Platform, TouchableOpacity, View, type ViewProps } from "react-native"; import { APP_LANGUAGES } from "@/i18n"; import { useSettings } from "@/utils/atoms/settings"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; import { type OptionGroup, PlatformOptionsMenu } from "../PlatformOptionsMenu"; interface Props extends ViewProps {} export const AppLanguageSelector: React.FC = () => { const isTv = Platform.isTV; const { settings, updateSettings } = useSettings(); const { t } = useTranslation(); const [open, setOpen] = useState(false); const optionGroups: OptionGroup[] = useMemo(() => { const options = [ { id: "system", type: "radio" as const, groupId: "languages", label: t("home.settings.languages.system"), selected: !settings?.preferedLanguage, }, ...APP_LANGUAGES.map((lang) => ({ id: lang.value, type: "radio" as const, groupId: "languages", label: lang.label, selected: lang.value === settings?.preferedLanguage, })), ]; return [ { id: "languages", title: t("home.settings.languages.title"), options, }, ]; }, [settings?.preferedLanguage, t]); const handleOptionSelect = (optionId: string) => { if (optionId === "system") { updateSettings({ preferedLanguage: undefined }); } else { updateSettings({ preferedLanguage: optionId }); } setOpen(false); }; const trigger = ( setOpen(true)} > {APP_LANGUAGES.find((l) => l.value === settings?.preferedLanguage) ?.label || t("home.settings.languages.system")} ); if (isTv) return null; if (!settings) return null; return ( ); };