aboutsummaryrefslogtreecommitdiff
path: root/modern/src/components/PositionValue.js
diff options
context:
space:
mode:
Diffstat (limited to 'modern/src/components/PositionValue.js')
-rw-r--r--modern/src/components/PositionValue.js51
1 files changed, 51 insertions, 0 deletions
diff --git a/modern/src/components/PositionValue.js b/modern/src/components/PositionValue.js
new file mode 100644
index 00000000..b9e573fe
--- /dev/null
+++ b/modern/src/components/PositionValue.js
@@ -0,0 +1,51 @@
+import React from 'react';
+import { formatAlarm, formatBoolean, formatCoordinate, formatCourse, formatDistance, formatNumber, formatPercentage, formatSpeed, formatTime } from '../common/formatter';
+import { useAttributePreference, usePreference } from '../common/preferences';
+import { useTranslation } from '../LocalizationProvider';
+
+const PositionValue = ({ position, property, attribute }) => {
+ const t = useTranslation();
+
+ const key = property || attribute;
+ const value = property ? position[property] : position.attributes[attribute];
+
+ const distanceUnit = useAttributePreference('distanceUnit');
+ const speedUnit = useAttributePreference('speedUnit');
+ const coordinateFormat = usePreference('coordinateFormat');
+
+ const formatValue = () => {
+ switch (key) {
+ case 'fixTime':
+ case 'deviceTime':
+ case 'serverTime':
+ return formatTime(value);
+ case 'latitude':
+ return formatCoordinate('latitude', value, coordinateFormat);
+ case 'longitude':
+ return formatCoordinate('longitude', value, coordinateFormat);
+ case 'speed':
+ return formatSpeed(value, speedUnit, t);
+ case 'course':
+ return formatCourse(value);
+ case 'batteryLevel':
+ return formatPercentage(value);
+ case 'alarm':
+ return formatAlarm(value, t);
+ case 'odometer':
+ case 'distance':
+ case 'totalDistance':
+ return formatDistance(value, distanceUnit, t)
+ default:
+ if (typeof value === 'number') {
+ return formatNumber(value);
+ } if (typeof value === 'boolean') {
+ return formatBoolean(value, t);
+ }
+ return value;
+ }
+ }
+
+ return (<>{formatValue(value)}</>);
+};
+
+export default PositionValue;