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"))}
)}