diff --git a/static/js/managers/SettingsManager.js b/static/js/managers/SettingsManager.js index 21c1f345..2e1534fb 100644 --- a/static/js/managers/SettingsManager.js +++ b/static/js/managers/SettingsManager.js @@ -2432,6 +2432,11 @@ export class SettingsManager { || ['vae', 'upscaler', 'text_encoder'] ); + const masterToggle = document.getElementById('enableOtherModels'); + if (masterToggle) { + masterToggle.checked = enableOtherModels; + } + document.querySelectorAll('[data-other-subtype-toggle]').forEach((input) => { input.checked = enabledSubTypes.has(input.value); input.disabled = !enableOtherModels; diff --git a/tests/frontend/managers/settingsManager.library.test.js b/tests/frontend/managers/settingsManager.library.test.js index c9e3eb52..8020306a 100644 --- a/tests/frontend/managers/settingsManager.library.test.js +++ b/tests/frontend/managers/settingsManager.library.test.js @@ -665,6 +665,22 @@ describe('SettingsManager other-model root selects', () => { expect(container.classList.contains('is-disabled')).toBe(false); }); + it('restores the master toggle checked state from settings', () => { + const manager = createManager(); + const masterToggle = document.createElement('input'); + masterToggle.type = 'checkbox'; + masterToggle.id = 'enableOtherModels'; + document.body.appendChild(masterToggle); + + state.global.settings = { enable_other_models: true }; + manager.updateOtherModelsControls(); + expect(masterToggle.checked).toBe(true); + + state.global.settings = { enable_other_models: false }; + manager.updateOtherModelsControls(); + expect(masterToggle.checked).toBe(false); + }); + it('persists the checked sub_types as the whole allow-list', async () => { const manager = createManager(); appendToggles('vae', 'upscaler', 'controlnet');