diff --git a/dashboard/app.js b/dashboard/app.js index c2e95e3..68d879e 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -588,6 +588,7 @@ class DashboardApp { this.updateSessionUser(); this.sendGetCars(); this.sendGetChargers(); + this.fetchChargingSessions(); } onAuthenticationFailed(reason) { @@ -1117,11 +1118,14 @@ class DashboardApp { return; } + const carId = this.elements.carFilter ? this.elements.carFilter.value : ''; + const carName = carId && this.cars.has(carId) ? this.cars.get(carId).name : ''; + const carSuffix = carName ? `-${this.sanitizeFilename(carName)}` : ''; const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; - link.download = `charging-sessions-${new Date().toISOString().slice(0, 10)}.csv`; + link.download = `charging-sessions${carSuffix}-${new Date().toISOString().slice(0, 10)}.csv`; document.body.appendChild(link); link.click(); setTimeout(() => { @@ -1242,6 +1246,21 @@ class DashboardApp { return stringValue; } + sanitizeFilename(value) { + if (typeof value !== 'string') + return ''; + + const trimmed = value.trim(); + if (!trimmed.length) + return ''; + + return trimmed + .replace(/[^a-z0-9-_]+/gi, '-') + .replace(/-+/g, '-') + .replace(/^-|-$/g, '') + .toLowerCase(); + } + updateConnectionStatus(text, state) { if (this.elements.connectionStatus) this.elements.connectionStatus.textContent = text; diff --git a/dashboard/index.html b/dashboard/index.html index ffc0448..14b3dc2 100644 --- a/dashboard/index.html +++ b/dashboard/index.html @@ -26,7 +26,7 @@ body { margin: 0; font-family: "UniversLTStd", "Segoe UI", Roboto, sans-serif; - background: var(--background-color); + background: var(--surface-color); color: var(--text-color); min-height: 100vh; display: flex; @@ -49,7 +49,7 @@ header { grid-area: header; - background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + background: var(--background-color); color: #ffffff; padding: 2rem 1.5rem; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); @@ -409,10 +409,10 @@ grid-area: footer; text-align: center; padding: 1.25rem 1rem; - background: #ffffff; - border-top: 1px solid #d3dce6; + background: var(--background-color); + border-top: 1px solid rgba(0, 0, 0, 0.08); font-size: 0.9rem; - color: var(--muted-text-color); + color: #ffffff; position: relative; z-index: 2; } @@ -621,7 +621,6 @@

Workspace

Overview

-

Switch between live status and built-in documentation.

@@ -715,8 +714,6 @@ -

Raw session payload (for debugging).

-
No charging sessions fetched yet.
@@ -752,6 +749,17 @@
No messages received yet.
+
+
+
+

Debugging

+

Charging sessions payload

+
+

Raw session JSON for troubleshooting.

+
+
No charging sessions fetched yet.
+
+