|
1 | 1 | ((doc) => { |
2 | 2 | const translationModals = doc.querySelectorAll('.ibexa-translation'); |
3 | 3 |
|
| 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 | + |
4 | 7 | translationModals.forEach((modal) => { |
5 | 8 | const translatorSelect = modal.querySelector('.ibexa-automated-translation-services-container__input'); |
6 | 9 | const baseLanguageSelect = modal.querySelector('.ibexa-translation__language-wrapper--base-language'); |
7 | 10 | const languageSelect = modal.querySelector('.ibexa-translation__language-wrapper--language'); |
8 | 11 |
|
| 12 | + // Initialize userCheckedState to true for this modal |
| 13 | + userCheckedStateMap.set(modal, true); |
| 14 | + |
9 | 15 | const handleLanguageChange = () => { |
10 | 16 | const translationCheckbox = translatorSelect.closest('.ibexa-input--checkbox'); |
11 | 17 | if (translationCheckbox) { |
12 | 18 | const supportedLanguages = translationCheckbox.getAttribute( |
13 | 19 | `data-supported-translation-languages-${translationCheckbox.value}` |
14 | 20 | ); |
15 | | - translationCheckbox.disabled = !( |
| 21 | + const shouldBeEnabled = ( |
16 | 22 | baseLanguageSelect.value && |
17 | 23 | supportedLanguages.includes(baseLanguageSelect.value) && |
18 | 24 | supportedLanguages.includes(languageSelect.value) |
19 | 25 | ); |
20 | | - translationCheckbox.checked = !translationCheckbox.disabled; |
21 | 26 |
|
| 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 | + } |
22 | 41 | } |
23 | 42 |
|
24 | 43 | const translationSelectWrapper = translatorSelect.closest('.ibexa-dropdown'); |
|
28 | 47 | }; |
29 | 48 |
|
30 | 49 | 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 | + |
31 | 57 | baseLanguageSelect.addEventListener('change', handleLanguageChange); |
32 | 58 | languageSelect.addEventListener('change', handleLanguageChange); |
33 | 59 | } |
|
0 commit comments