diff --git a/src/components/left/settings/SettingsDoNotTranslate.tsx b/src/components/left/settings/SettingsDoNotTranslate.tsx index d83746a8d..0332ef802 100644 --- a/src/components/left/settings/SettingsDoNotTranslate.tsx +++ b/src/components/left/settings/SettingsDoNotTranslate.tsx @@ -82,14 +82,9 @@ const SettingsDoNotTranslate: FC = ({ label: translatedName, subLabel: originalName, value: langCode, - disabled: langCode === language, })); }, [language]); - const allSelected = useMemo(() => { - return unique([...doNotTranslate, language]); - }, [doNotTranslate, language]); - useEffect(() => { if (!isActive) setSearch(''); }, [isActive]); @@ -98,12 +93,13 @@ const SettingsDoNotTranslate: FC = ({ if (prevIsActive === isActive) return; if (isActive && displayedOptions.length) return; - const [selected, unselected] = partition(options, (option) => allSelected.includes(option.value)); - const current = selected.find((option) => option.value === language); - const selectedFiltered = selected.filter((option) => option.value !== language); + const current = options.find((option) => option.value === language); + const otherLanguages = options.filter((option) => option.value !== language); - setDisplayedOptions([current!, ...selectedFiltered, ...unselected]); - }, [isActive, allSelected, displayedOptions.length, language, options]); + const [selected, unselected] = partition(otherLanguages, (option) => doNotTranslate.includes(option.value)); + + setDisplayedOptions([current!, ...selected, ...unselected]); + }, [isActive, doNotTranslate, displayedOptions.length, language, options]); const handleChange = useCallback((event: React.ChangeEvent) => { const { value, checked } = event.currentTarget; @@ -156,9 +152,8 @@ const SettingsDoNotTranslate: FC = ({ className={styles.checkbox} label={option.label} subLabel={option.subLabel} - checked={allSelected.includes(option.value)} + checked={doNotTranslate.includes(option.value)} value={option.value} - disabled={option.disabled} key={option.value} onChange={handleChange} /> diff --git a/src/components/left/settings/SettingsLanguage.tsx b/src/components/left/settings/SettingsLanguage.tsx index cda78b0d1..b30f912c4 100644 --- a/src/components/left/settings/SettingsLanguage.tsx +++ b/src/components/left/settings/SettingsLanguage.tsx @@ -9,7 +9,6 @@ import type { ISettings, LangCode } from '../../../types'; import type { ApiLanguage } from '../../../api/types'; import { setLanguage } from '../../../util/langProvider'; -import { unique } from '../../../util/iteratees'; import useFlag from '../../../hooks/useFlag'; import useHistoryBack from '../../../hooks/useHistoryBack'; @@ -79,17 +78,20 @@ const SettingsLanguage: FC = ({ }, [setSettingOption]); const doNotTranslateText = useMemo(() => { - const allDoNotTranslateLanguages = unique([...doNotTranslate, language]); + if (!doNotTranslate.length) { + return undefined; + } + // Do not translate current language - if (allDoNotTranslateLanguages.length === 1) { + if (doNotTranslate.length === 1) { if (!languages) { return lang('Loading'); } - return languages.find(({ langCode }) => langCode === language)?.nativeName; + return languages.find(({ langCode }) => langCode === doNotTranslate[0])?.nativeName; } - return lang('Languages', allDoNotTranslateLanguages.length); - }, [doNotTranslate, lang, language, languages]); + return lang('Languages', doNotTranslate.length); + }, [doNotTranslate, lang, languages]); const handleDoNotSelectOpen = useCallback(() => { onScreenSelect(SettingsScreens.DoNotTranslate); diff --git a/src/components/middle/message/ContextMenuContainer.tsx b/src/components/middle/message/ContextMenuContainer.tsx index 5e5acc8e7..f58120acd 100644 --- a/src/components/middle/message/ContextMenuContainer.tsx +++ b/src/components/middle/message/ContextMenuContainer.tsx @@ -599,10 +599,9 @@ export default memo(withGlobal( ? Boolean(selectMessageTranslations(global, message.chatId, translationRequestLanguage)[message.id]?.text) : undefined; - const { canTranslate: isTranslationEnabled, language, doNotTranslate } = global.settings.byKey; + const { canTranslate: isTranslationEnabled, doNotTranslate } = global.settings.byKey; - const canTranslateLanguage = !detectedLanguage - || (!doNotTranslate.includes(detectedLanguage) && language !== detectedLanguage); + const canTranslateLanguage = !detectedLanguage || !doNotTranslate.includes(detectedLanguage); const canTranslate = IS_TRANSLATION_SUPPORTED && isTranslationEnabled && message.content.text && canTranslateLanguage && !isLocal && !isScheduled && !isAction && !hasTranslation && !message.emojiOnlyCount;