Language Settings: Fix error in old browsers (#2891)

This commit is contained in:
Alexander Zinchuk 2023-03-30 18:25:56 -05:00
parent 31e8a934e5
commit 0c2e40d8be
2 changed files with 25 additions and 26 deletions

View File

@ -9,6 +9,7 @@ import type { ISettings, LangCode } from '../../../types';
import type { ApiLanguage } from '../../../api/types'; import type { ApiLanguage } from '../../../api/types';
import { setLanguage } from '../../../util/langProvider'; import { setLanguage } from '../../../util/langProvider';
import { IS_TRANSLATION_SUPPORTED } from '../../../util/windowEnvironment';
import useFlag from '../../../hooks/useFlag'; import useFlag from '../../../hooks/useFlag';
import useHistoryBack from '../../../hooks/useHistoryBack'; import useHistoryBack from '../../../hooks/useHistoryBack';
@ -78,20 +79,17 @@ const SettingsLanguage: FC<OwnProps & StateProps> = ({
}, [setSettingOption]); }, [setSettingOption]);
const doNotTranslateText = useMemo(() => { const doNotTranslateText = useMemo(() => {
if (!doNotTranslate.length) { if (!IS_TRANSLATION_SUPPORTED || !doNotTranslate.length) {
return undefined; return undefined;
} }
// Do not translate current language
if (doNotTranslate.length === 1) { if (doNotTranslate.length === 1) {
if (!languages) { const originalNames = new Intl.DisplayNames([language], { type: 'language' });
return lang('Loading'); return originalNames.of(doNotTranslate[0])!;
}
return languages.find(({ langCode }) => langCode === doNotTranslate[0])?.nativeName;
} }
return lang('Languages', doNotTranslate.length); return lang('Languages', doNotTranslate.length);
}, [doNotTranslate, lang, languages]); }, [doNotTranslate, lang, language]);
const handleDoNotSelectOpen = useCallback(() => { const handleDoNotSelectOpen = useCallback(() => {
onScreenSelect(SettingsScreens.DoNotTranslate); onScreenSelect(SettingsScreens.DoNotTranslate);
@ -104,24 +102,26 @@ const SettingsLanguage: FC<OwnProps & StateProps> = ({
return ( return (
<div className="settings-content settings-language custom-scroll"> <div className="settings-content settings-language custom-scroll">
<div className="settings-item"> {IS_TRANSLATION_SUPPORTED && (
<Checkbox <div className="settings-item">
label={lang('ShowTranslateButton')} <Checkbox
checked={canTranslate} label={lang('ShowTranslateButton')}
onCheck={handleShouldTranslateChange} checked={canTranslate}
/> onCheck={handleShouldTranslateChange}
{canTranslate && ( />
<ListItem {canTranslate && (
onClick={handleDoNotSelectOpen} <ListItem
> onClick={handleDoNotSelectOpen}
{lang('DoNotTranslate')} >
<span className="settings-item__current-value">{doNotTranslateText}</span> {lang('DoNotTranslate')}
</ListItem> <span className="settings-item__current-value">{doNotTranslateText}</span>
)} </ListItem>
<p className="settings-item-description mb-0 mt-1"> )}
{lang('lng_translate_settings_about')} <p className="settings-item-description mb-0 mt-1">
</p> {lang('lng_translate_settings_about')}
</div> </p>
</div>
)}
<div className="settings-item"> <div className="settings-item">
{options ? ( {options ? (
<RadioGroup <RadioGroup

View File

@ -105,7 +105,6 @@ function renderWithVirtual<T extends VirtualElement | undefined>(
} }
if (DEBUG && $new) { if (DEBUG && $new) {
// @ts-ignore TS 4.9 bug https://github.com/microsoft/TypeScript/issues/51501
const newTarget = 'target' in $new && $new.target; const newTarget = 'target' in $new && $new.target;
if (newTarget && (!$current || ('target' in $current && newTarget !== $current.target))) { if (newTarget && (!$current || ('target' in $current && newTarget !== $current.target))) {
throw new Error('[Teact] Cached virtual element was moved within tree'); throw new Error('[Teact] Cached virtual element was moved within tree');