Skip to content

Commit 0b56d1e

Browse files
committed
Fixed so that "automatic translation" checkbox remembers users choice when being enabled/disabled
1 parent c5e161c commit 0b56d1e

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/bundle/Resources/public/admin/js/ibexa-automated-translation.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,43 @@
11
((doc) => {
22
const translationModals = doc.querySelectorAll('.ibexa-translation');
33

4+
// Store the user's last checked state per modal, so that user's preference can be restored when checkbox is re-enabled
5+
const userCheckedStateMap = new Map();
6+
47
translationModals.forEach((modal) => {
58
const translatorSelect = modal.querySelector('.ibexa-automated-translation-services-container__input');
69
const baseLanguageSelect = modal.querySelector('.ibexa-translation__language-wrapper--base-language');
710
const languageSelect = modal.querySelector('.ibexa-translation__language-wrapper--language');
811

12+
// Initialize userCheckedState to true for this modal
13+
userCheckedStateMap.set(modal, true);
14+
915
const handleLanguageChange = () => {
1016
const translationCheckbox = translatorSelect.closest('.ibexa-input--checkbox');
1117
if (translationCheckbox) {
1218
const supportedLanguages = translationCheckbox.getAttribute(
1319
`data-supported-translation-languages-${translationCheckbox.value}`
1420
);
15-
translationCheckbox.disabled = !(
21+
const shouldBeEnabled = (
1622
baseLanguageSelect.value &&
1723
supportedLanguages.includes(baseLanguageSelect.value) &&
1824
supportedLanguages.includes(languageSelect.value)
1925
);
20-
translationCheckbox.checked = !translationCheckbox.disabled;
2126

27+
// If checkbox is currently enabled, store its state before potentially disabling it
28+
if (!translationCheckbox.disabled) {
29+
userCheckedStateMap.set(modal, translationCheckbox.checked);
30+
}
31+
32+
translationCheckbox.disabled = !shouldBeEnabled;
33+
34+
// Restore the user's last checked state, whether it was checked or unchecked
35+
if (shouldBeEnabled) {
36+
const storedState = userCheckedStateMap.get(modal);
37+
translationCheckbox.checked = storedState == undefined ? true : storedState;
38+
} else {
39+
translationCheckbox.checked = false;
40+
}
2241
}
2342

2443
const translationSelectWrapper = translatorSelect.closest('.ibexa-dropdown');
@@ -28,6 +47,13 @@
2847
};
2948

3049
if (baseLanguageSelect && languageSelect && translatorSelect) {
50+
// Initialize the checkbox state and visibility on page load ( enable if possible by current language selections)
51+
const translationCheckbox = translatorSelect.closest('.ibexa-input--checkbox');
52+
if (translationCheckbox && !translationCheckbox.disabled) {
53+
translationCheckbox.checked = true;
54+
}
55+
handleLanguageChange();
56+
3157
baseLanguageSelect.addEventListener('change', handleLanguageChange);
3258
languageSelect.addEventListener('change', handleLanguageChange);
3359
}

0 commit comments

Comments
 (0)