diff options
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/admin-page.js')
| -rw-r--r-- | packages/meshbay-hub/src/meshbay_hub/static/admin-page.js | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/admin-page.js b/packages/meshbay-hub/src/meshbay_hub/static/admin-page.js index 3cc42db..8800615 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/admin-page.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/admin-page.js @@ -105,7 +105,11 @@ export function AdminPage({ token, role }) { useEffect(() => { setError(''); if (tab === 'general') loadSettings(); - else if (tab === 'stats') loadStats(); + else if (tab === 'stats') { + loadStats(); + hubFetch('/v1/admin/mail', { token }) + .then(setMailStatus).catch(() => { /* the cards still render */ }); + } else if (tab === 'users') loadUsers(userSearch); else if (tab === 'groups') loadGroups(); else if (tab === 'nodes') { @@ -225,18 +229,7 @@ const TABS = ['general', 'stats', 'users', 'groups', 'nodes', 'logs', 'blocklist <h3 class="settings-heading">${t('admin.mail_heading')}</h3> <p class="settings-hint">${t('admin.mail_hint')}</p> - ${mailStatus && html` - <div class="settings-row"> - <span class="settings-label">${t('admin.mail_this_hour')}</span> - <span>${mailStatus.hourly_used} / ${mailStatus.hourly_budget}</span> - </div> - <p class="settings-hint"> - ${t('admin.mail_remaining', { - general: mailStatus.general_remaining, - recovery: mailStatus.recovery_remaining, - })} - </p> - `} + <p class="settings-hint">${t('admin.mail_state_is_in_stats')}</p> ${mailDraft && MAIL_FIELDS.map(key => html` <div class="settings-row" key=${key}> @@ -279,6 +272,37 @@ const TABS = ['general', 'stats', 'users', 'groups', 'nodes', 'logs', 'blocklist </div> `)} </div> + + ${mailStatus && html` + <div class="settings-section"> + <h3 class="settings-heading">${t('admin.mail_heading')}</h3> + + ${mailStatus.all_exhausted && html` + <div class="error-msg">${t('admin.mail_alert_all')}</div>`} + ${!mailStatus.all_exhausted && mailStatus.general_exhausted && html` + <div class="warn-msg">${t('admin.mail_alert_general')}</div>`} + + <div class="admin-stats"> + <div class="stat-card"> + <div class="stat-value">${mailStatus.hourly_used} / ${mailStatus.hourly_budget}</div> + <div class="stat-label">${t('admin.mail_this_hour')}</div> + </div> + <div class="stat-card"> + <div class="stat-value">${mailStatus.general_remaining}</div> + <div class="stat-label">${t('admin.mail_left_signups')}</div> + </div> + <div class="stat-card"> + <div class="stat-value">${mailStatus.recovery_remaining}</div> + <div class="stat-label">${t('admin.mail_left_recovery')}</div> + </div> + <div class="stat-card"> + <div class="stat-value">${mailStatus.recipients_tracked}</div> + <div class="stat-label">${t('admin.mail_recipients')}</div> + </div> + </div> + <p class="settings-hint">${t('admin.mail_state_hint')}</p> + </div> + `} `} ${tab === 'users' && html` |