Settings: Allow unmarking current language in "Do not translate" (#2798)

This commit is contained in:
Alexander Zinchuk 2023-03-19 22:31:05 -05:00
parent 6c9e54aaf1
commit 1f401378ea
3 changed files with 17 additions and 21 deletions

View File

@ -82,14 +82,9 @@ const SettingsDoNotTranslate: FC<OwnProps & StateProps> = ({
label: translatedName, label: translatedName,
subLabel: originalName, subLabel: originalName,
value: langCode, value: langCode,
disabled: langCode === language,
})); }));
}, [language]); }, [language]);
const allSelected = useMemo(() => {
return unique([...doNotTranslate, language]);
}, [doNotTranslate, language]);
useEffect(() => { useEffect(() => {
if (!isActive) setSearch(''); if (!isActive) setSearch('');
}, [isActive]); }, [isActive]);
@ -98,12 +93,13 @@ const SettingsDoNotTranslate: FC<OwnProps & StateProps> = ({
if (prevIsActive === isActive) return; if (prevIsActive === isActive) return;
if (isActive && displayedOptions.length) return; if (isActive && displayedOptions.length) return;
const [selected, unselected] = partition(options, (option) => allSelected.includes(option.value)); const current = options.find((option) => option.value === language);
const current = selected.find((option) => option.value === language); const otherLanguages = options.filter((option) => option.value !== language);
const selectedFiltered = selected.filter((option) => option.value !== language);
setDisplayedOptions([current!, ...selectedFiltered, ...unselected]); const [selected, unselected] = partition(otherLanguages, (option) => doNotTranslate.includes(option.value));
}, [isActive, allSelected, displayedOptions.length, language, options]);
setDisplayedOptions([current!, ...selected, ...unselected]);
}, [isActive, doNotTranslate, displayedOptions.length, language, options]);
const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => { const handleChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {
const { value, checked } = event.currentTarget; const { value, checked } = event.currentTarget;
@ -156,9 +152,8 @@ const SettingsDoNotTranslate: FC<OwnProps & StateProps> = ({
className={styles.checkbox} className={styles.checkbox}
label={option.label} label={option.label}
subLabel={option.subLabel} subLabel={option.subLabel}
checked={allSelected.includes(option.value)} checked={doNotTranslate.includes(option.value)}
value={option.value} value={option.value}
disabled={option.disabled}
key={option.value} key={option.value}
onChange={handleChange} onChange={handleChange}
/> />

View File

@ -9,7 +9,6 @@ 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 { unique } from '../../../util/iteratees';
import useFlag from '../../../hooks/useFlag'; import useFlag from '../../../hooks/useFlag';
import useHistoryBack from '../../../hooks/useHistoryBack'; import useHistoryBack from '../../../hooks/useHistoryBack';
@ -79,17 +78,20 @@ const SettingsLanguage: FC<OwnProps & StateProps> = ({
}, [setSettingOption]); }, [setSettingOption]);
const doNotTranslateText = useMemo(() => { const doNotTranslateText = useMemo(() => {
const allDoNotTranslateLanguages = unique([...doNotTranslate, language]); if (!doNotTranslate.length) {
return undefined;
}
// Do not translate current language // Do not translate current language
if (allDoNotTranslateLanguages.length === 1) { if (doNotTranslate.length === 1) {
if (!languages) { if (!languages) {
return lang('Loading'); return lang('Loading');
} }
return languages.find(({ langCode }) => langCode === language)?.nativeName; return languages.find(({ langCode }) => langCode === doNotTranslate[0])?.nativeName;
} }
return lang('Languages', allDoNotTranslateLanguages.length); return lang('Languages', doNotTranslate.length);
}, [doNotTranslate, lang, language, languages]); }, [doNotTranslate, lang, languages]);
const handleDoNotSelectOpen = useCallback(() => { const handleDoNotSelectOpen = useCallback(() => {
onScreenSelect(SettingsScreens.DoNotTranslate); onScreenSelect(SettingsScreens.DoNotTranslate);

View File

@ -599,10 +599,9 @@ export default memo(withGlobal<OwnProps>(
? Boolean(selectMessageTranslations(global, message.chatId, translationRequestLanguage)[message.id]?.text) ? Boolean(selectMessageTranslations(global, message.chatId, translationRequestLanguage)[message.id]?.text)
: undefined; : undefined;
const { canTranslate: isTranslationEnabled, language, doNotTranslate } = global.settings.byKey; const { canTranslate: isTranslationEnabled, doNotTranslate } = global.settings.byKey;
const canTranslateLanguage = !detectedLanguage const canTranslateLanguage = !detectedLanguage || !doNotTranslate.includes(detectedLanguage);
|| (!doNotTranslate.includes(detectedLanguage) && language !== detectedLanguage);
const canTranslate = IS_TRANSLATION_SUPPORTED && isTranslationEnabled && message.content.text const canTranslate = IS_TRANSLATION_SUPPORTED && isTranslationEnabled && message.content.text
&& canTranslateLanguage && !isLocal && !isScheduled && !isAction && !hasTranslation && !message.emojiOnlyCount; && canTranslateLanguage && !isLocal && !isScheduled && !isAction && !hasTranslation && !message.emojiOnlyCount;