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,
|
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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user