aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/admin-page.js
diff options
context:
space:
mode:
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.js50
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`