Skip to content

Commit 347a13b

Browse files
feat: Implement dependency enforcement for feature toggles in Game Server settings
1 parent 12cd34c commit 347a13b

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

  • src/XtremeIdiots.Portal.Web/Views/GameServers

src/XtremeIdiots.Portal.Web/Views/GameServers/Edit.cshtml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,5 +161,48 @@
161161
}
162162
});
163163
}
164+
165+
// Toggle dependency enforcement
166+
// AgentEnabled requires FtpEnabled AND RconEnabled
167+
// BanFileSyncEnabled requires FtpEnabled AND AgentEnabled
168+
function enforceToggleDependencies() {
169+
var ftp = document.getElementById('GameServer_FtpEnabled');
170+
var rcon = document.getElementById('GameServer_RconEnabled');
171+
var agent = document.getElementById('GameServer_AgentEnabled');
172+
var banSync = document.getElementById('GameServer_BanFileSyncEnabled');
173+
174+
if (!ftp || !rcon || !agent || !banSync) return;
175+
176+
// If Agent is checked but prerequisites aren't met, uncheck it
177+
if (agent.checked && (!ftp.checked || !rcon.checked)) {
178+
agent.checked = false;
179+
agent.dispatchEvent(new Event('change'));
180+
}
181+
182+
// If BanFileSync is checked but prerequisites aren't met, uncheck it
183+
if (banSync.checked && (!ftp.checked || !agent.checked)) {
184+
banSync.checked = false;
185+
banSync.dispatchEvent(new Event('change'));
186+
}
187+
188+
// Visual state for Agent
189+
var agentSwitch = agent.closest('.form-check');
190+
if (agentSwitch) {
191+
agentSwitch.classList.toggle('opacity-50', !ftp.checked || !rcon.checked);
192+
}
193+
194+
// Visual state for BanFileSync
195+
var banSyncSwitch = banSync.closest('.form-check');
196+
if (banSyncSwitch) {
197+
banSyncSwitch.classList.toggle('opacity-50', !ftp.checked || !agent.checked);
198+
}
199+
}
200+
201+
enforceToggleDependencies();
202+
203+
['GameServer_FtpEnabled', 'GameServer_RconEnabled', 'GameServer_AgentEnabled'].forEach(function (id) {
204+
var el = document.getElementById(id);
205+
if (el) el.addEventListener('change', enforceToggleDependencies);
206+
});
164207
</script>
165208
}

0 commit comments

Comments
 (0)