diff --git a/src/components/Cars/Status/__snapshots__/DigitalTwinTab.test.jsx.snap b/src/components/Cars/Status/__snapshots__/DigitalTwinTab.test.jsx.snap
index 2f68f73..f12a979 100644
--- a/src/components/Cars/Status/__snapshots__/DigitalTwinTab.test.jsx.snap
+++ b/src/components/Cars/Status/__snapshots__/DigitalTwinTab.test.jsx.snap
@@ -55,6 +55,13 @@ exports[`DigitalTwinTab Render 1`] = `
:
12000 km
+
+
+ Voltage
+
+ :
+ 12.5 V
+
Max Range
diff --git a/src/components/Contexts/__mocks__/VehicleContext.jsx b/src/components/Contexts/__mocks__/VehicleContext.jsx
index cfa6f0d..8e6034a 100644
--- a/src/components/Contexts/__mocks__/VehicleContext.jsx
+++ b/src/components/Contexts/__mocks__/VehicleContext.jsx
@@ -39,6 +39,7 @@ let vehicleState = {
battery: {
total_mileage_odometer: 12000,
percent: 95,
+ battery_voltage: 12.5,
},
max_range: {
max_miles: 577,
diff --git a/src/components/DigitalTwin/index.js b/src/components/DigitalTwin/index.js
index 8548dc5..21b1709 100644
--- a/src/components/DigitalTwin/index.js
+++ b/src/components/DigitalTwin/index.js
@@ -8,6 +8,11 @@ const UNKNOWN = "unknown";
const LOCKED = "Locked";
const UNLOCKED = "Unlocked";
+const appendUnits = (value, units) => {
+ if (value || value === 0) return `${value}${units}`;
+ return UNKNOWN;
+}
+
const keyValueTemplate = (key, value) => (
{key}: {value}
@@ -37,16 +42,17 @@ const DigitalTwin = (props) => {
{(battery || max_range) && (
Battery
- {keyValueTemplate("Percentage", `${battery?.percent || 0}%`)}
- {keyValueTemplate("Total Mileage", `${battery?.total_mileage_odometer} km` || UNKNOWN)}
- {keyValueTemplate("Max Range", `${max_range?.max_miles} km` || UNKNOWN)}
+ {keyValueTemplate("Percentage", appendUnits(battery?.percent || 0, "%"))}
+ {keyValueTemplate("Total Mileage", appendUnits(battery?.total_mileage_odometer, " km"))}
+ {keyValueTemplate("Voltage", appendUnits(battery?.battery_voltage, " V"))}
+ {keyValueTemplate("Max Range", appendUnits(max_range?.max_miles, " km"))}
)}
{(vcu0x260 || charging_metrics) && (
Charging
{keyValueTemplate("Charge Type", vcu0x260?.charge_type || UNKNOWN)}
- {keyValueTemplate("Remaining Time", `${charging_metrics?.remaining_charging_time} min` || UNKNOWN)}
+ {keyValueTemplate("Remaining Time", appendUnits(charging_metrics?.remaining_charging_time, " min"))}
)}
{doors && (
@@ -95,9 +101,9 @@ const DigitalTwin = (props) => {
return keyValueTemplate(value[0], "Invalid")
}
if (value[0] === "altitude") {
- return keyValueTemplate(value[0], `${value[1]} m`);
+ return keyValueTemplate(value[0], appendUnits(value[1], " m"));
} else {
- return keyValueTemplate(value[0], `${value[1]}°`);
+ return keyValueTemplate(value[0], appendUnits(value[1], "°"));
}
})}
@@ -124,7 +130,7 @@ const DigitalTwin = (props) => {
)}
{vehicle_speed && (
- {keyValueTemplate("Vehicle Speed", `${vehicle_speed.speed} km/h`)}
+ {keyValueTemplate("Vehicle Speed", appendUnits(vehicle_speed?.speed, " km/h"))}
)}