Settings: Allow unmarking current language in "Do not translate" (#2798)
This commit is contained in:
parent
6c9e54aaf1
commit
1f401378ea
@ -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}
|
||||
/>
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user