commit 08e584269481da48737642df54cb5a3448ac4fe4
parent 358d813264969e3ff353adced117ad87f4bfc773
Author: Joris Hartog <jorishartog@hotmail.com>
Date: Mon, 7 Sep 2026 20:58:36 +0200
Improve dashboard status details
Diffstat:
3 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/src/adapters/http/index_html.rs b/src/adapters/http/index_html.rs
@@ -100,7 +100,8 @@ pub(super) const INDEX_HTML: &str = concat!(
.dashboard-card-label { margin-bottom: 6px; color: #8d989f; font-size: 10px; font-weight: 850; text-transform: uppercase; }
.dashboard-card-value { color: #d5f55f; font-size: 14px; font-weight: 850; font-variant-numeric: tabular-nums; line-height: 1.25; overflow-wrap: anywhere; }
.dashboard-card.balance { padding-inline: 10px; }
- .dashboard-card.balance .dashboard-card-value { font-size: clamp(10px, 1.25vw, 13px); letter-spacing: -.015em; white-space: nowrap; }
+ .dashboard-card.balance .dashboard-card-value, .dashboard-card.burning .dashboard-status { font-size: clamp(10px, 1.25vw, 13px); letter-spacing: -.015em; white-space: nowrap; }
+ .dashboard-card.burning .dashboard-status { width: 100%; text-align: center; }
.dashboard-status { color: #8d989f; font-size: 14px; font-weight: 850; font-variant-numeric: tabular-nums; line-height: 1.25; overflow-wrap: anywhere; }
.dashboard-card.good .dashboard-status { color: #d5f55f; }
.dashboard-card.warning .dashboard-status { color: #ffd070; }
@@ -663,15 +664,15 @@ pub(super) const INDEX_HTML: &str = concat!(
<div class="dashboard-card-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="m14 13-8.381 8.38a1 1 0 0 1-3.001-3L11 9.999"></path><path d="M15.973 4.027A13 13 0 0 0 5.902 2.373c-1.398.342-1.092 2.158.277 2.601a19.9 19.9 0 0 1 5.822 3.024"></path><path d="M16.001 11.999a19.9 19.9 0 0 1 3.024 5.824c.444 1.369 2.26 1.676 2.603.278A13 13 0 0 0 20 8.069"></path><path d="M18.352 3.352a1.205 1.205 0 0 0-1.704 0l-5.296 5.296a1.205 1.205 0 0 0 0 1.704l2.296 2.296a1.205 1.205 0 0 0 1.704 0l5.296-5.296a1.205 1.205 0 0 0 0-1.704z"></path></svg></div>
<div class="dashboard-card-copy">
<div class="dashboard-card-label">Mining</div>
- <div class="dashboard-status" x-text="powMiningEnabled ? 'On' : 'Off'"></div>
+ <div class="dashboard-status" x-text="dashboardMiningLabel()"></div>
</div>
</article>
- <article class="dashboard-card" :class="dashboardBurnState()">
+ <article class="dashboard-card burning" :class="dashboardBurnState()">
<div class="dashboard-card-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M12 12c2-3 0-7-1-8 0 3-1.8 4.7-3 6s-2 3.2-2 5a6 6 0 1 0 12 0c0-1.5-1.1-3.9-2-5 0 3-1.7 4-3 4s-2-1-1-2Z"></path></svg></div>
<div class="dashboard-card-copy">
<div class="dashboard-card-label">Burning</div>
- <div class="dashboard-status" x-text="miningEnabled ? 'On' : 'Off'"></div>
+ <div class="dashboard-status" x-text="dashboardBurnLabel()"></div>
</div>
</article>
diff --git a/src/main_tests.rs b/src/main_tests.rs
@@ -103,10 +103,17 @@ fn management_ui_opens_on_the_dashboard_and_exposes_chain_health_thresholds() {
assert!(html.contains("@click=\"setTab('dashboard')\""));
assert!(html.contains("Current balance"));
assert!(html.contains("dashboardLastBlockLabel()"));
+ assert!(html.contains("dashboardMiningLabel()"));
+ assert!(html.contains("dashboardBurnLabel()"));
+ assert!(html.contains(".dashboard-card.burning .dashboard-status"));
assert!(html.contains("basicNetworkStatusLabel()"));
assert!(javascript.contains("tab: \"dashboard\""));
- assert!(javascript.contains("ageMs < 10 * 60 * 1000"));
+ assert!(javascript.contains("ageMs < 15 * 60 * 1000"));
assert!(javascript.contains("ageMs < 20 * 60 * 1000"));
+ assert!(javascript.contains(
+ "`${this.powMiningWorkers} worker${this.powMiningWorkers === 1 ? \"\" : \"s\"}`"
+ ));
+ assert!(javascript.contains("`IUNA ${this.amountLabel(this.burnAmount)} / blk`"));
let dashboard_network_state = javascript
.split_once("dashboardNetworkState()")
.and_then(|(_, rest)| rest.split_once("\n },"))
diff --git a/www/assets/iuna-ui.js b/www/assets/iuna-ui.js
@@ -3491,14 +3491,24 @@ window.iunaApp = function iunaApp() {
return this.powMiningEnabled ? "good" : "neutral";
},
+ dashboardMiningLabel() {
+ if (!this.powMiningEnabled) return "Off";
+ return `${this.powMiningWorkers} worker${this.powMiningWorkers === 1 ? "" : "s"}`;
+ },
+
dashboardBurnState() {
return this.miningEnabled ? "good" : "neutral";
},
+ dashboardBurnLabel() {
+ if (!this.miningEnabled) return "Off";
+ return `IUNA ${this.amountLabel(this.burnAmount)} / blk`;
+ },
+
dashboardBlockState() {
const ageMs = this.networkHealth.last_block_age_ms;
if (typeof ageMs !== "number" || !Number.isFinite(ageMs)) return "neutral";
- if (ageMs < 10 * 60 * 1000) return "good";
+ if (ageMs < 15 * 60 * 1000) return "good";
if (ageMs < 20 * 60 * 1000) return "warning";
return "bad";
},