From 24a2434ccd799f43147191a5279c0ed0845a23d9 Mon Sep 17 00:00:00 2001 From: Myron Blair Date: Tue, 9 Jun 2026 22:13:25 +0000 Subject: [PATCH] Email create modal: split input into local-part + domain dropdown Co-Authored-By: Claude Sonnet 4.6 --- panel/public/assets/js/user.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/panel/public/assets/js/user.js b/panel/public/assets/js/user.js index 21ba508..a507ba4 100644 --- a/panel/public/assets/js/user.js +++ b/panel/public/assets/js/user.js @@ -327,9 +327,21 @@ async function loadEmailList() { } window.loadEmailList = loadEmailList; -window.addEmailAccount = () => { +window.addEmailAccount = async () => { + const dr = await Nova.api('domains', 'list'); + const domains = (dr?.data || []).map(d => d.domain).filter(Boolean); + const domainOpts = domains.length + ? domains.map(d => ``).join('') + : ''; Nova.modal('Add Email Account', ` -
+
+ +
+ + @ + +
+
`, `` @@ -337,8 +349,12 @@ window.addEmailAccount = () => { }; window.submitAddEmail = async () => { + const local = (document.getElementById('em-local')?.value || '').trim(); + const domain = document.getElementById('em-domain')?.value || ''; + if (!local) { Nova.toast('Enter a username', 'error'); return; } + if (!domain) { Nova.toast('Select a domain', 'error'); return; } const res = await Nova.api('email', 'create', { method: 'POST', body: { - email: document.getElementById('em-addr')?.value, + email: `${local}@${domain}`, password: document.getElementById('em-pass')?.value, quota_mb: parseInt(document.getElementById('em-quota')?.value || '0'), }});