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,
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<OwnProps & StateProps> = ({
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<HTMLInputElement>) => {
const { value, checked } = event.currentTarget;
@ -156,9 +152,8 @@ const SettingsDoNotTranslate: FC<OwnProps & StateProps> = ({
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}
/>

View File

@ -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<OwnProps & StateProps> = ({
}, [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);

View File

@ -599,10 +599,9 @@ export default memo(withGlobal<OwnProps>(
? 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;