From db1f6b8bb8c8432f73097a7794234d24b1054f88 Mon Sep 17 00:00:00 2001 From: Myron Blair Date: Tue, 9 Jun 2026 11:12:29 +0000 Subject: [PATCH] =?UTF-8?q?Fix=20proxy=20settings=20modal=20never=20saving?= =?UTF-8?q?=20=E2=80=94=20wrong=20third=20arg=20to=20Nova.modal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nova.modal(title, bodyHtml, footerHtml) expects footerHtml as an HTML string, but an async callback was passed instead. The function got stringified as garbage text in the footer with no save button, so nothing ever saved regardless of mode chosen. Replaced with proper footer HTML (Cancel + Save buttons) and wired the save logic as an event listener on the save button. Co-Authored-By: Claude Sonnet 4.6 --- panel/public/assets/js/admin.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/panel/public/assets/js/admin.js b/panel/public/assets/js/admin.js index d23bc77..f7bd846 100644 --- a/panel/public/assets/js/admin.js +++ b/panel/public/assets/js/admin.js @@ -3054,7 +3054,13 @@ window.proxySettings = async () => { - `, async () => { + `, + ` + ` + ); + ov.querySelector('#ps-save-btn').addEventListener('click', async () => { + const btn = ov.querySelector('#ps-save-btn'); + btn.disabled = true; btn.textContent = 'Saving…'; const mode = document.getElementById('ps-mode')?.value; const pass = document.getElementById('ps-pass')?.value; const body = { @@ -3066,7 +3072,8 @@ window.proxySettings = async () => { }; const r = await Nova.api('proxy', 'settings', { method: 'POST', body }); Nova.toast(r?.success ? 'Settings saved' : (r?.message || 'Failed'), r?.success ? 'success' : 'error'); - if (r?.success) Nova.loadPage('nginx-proxy', window._novaPages); + if (r?.success) { ov.remove(); Nova.loadPage('nginx-proxy', window._novaPages); } + else { btn.disabled = false; btn.textContent = 'Save Settings'; } }); };