diff --git a/__tests__/components/viewers/__snapshots__/nearby-view.js.snap b/__tests__/components/viewers/__snapshots__/nearby-view.js.snap
index bca73d951..10332856d 100644
--- a/__tests__/components/viewers/__snapshots__/nearby-view.js.snap
+++ b/__tests__/components/viewers/__snapshots__/nearby-view.js.snap
@@ -4917,7 +4917,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "79 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -5349,7 +5351,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "85 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -5781,7 +5785,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "112 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -11246,7 +11252,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "135 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -18583,7 +18591,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "161 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -21824,7 +21834,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "171 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -22256,7 +22268,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "187 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -22688,7 +22702,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "187 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -28846,7 +28862,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "302 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -33522,7 +33540,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "377 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -33954,7 +33974,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "387 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -34386,7 +34408,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "397 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -34818,7 +34842,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "469 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -35250,7 +35276,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "495 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -38906,7 +38934,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "502 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -42171,7 +42201,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "512 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -47402,7 +47434,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "512 feet",
+ "localizedDistanceString": ,
}
}
>
@@ -55667,7 +55701,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "0.1 miles",
+ "localizedDistanceString": ,
}
}
>
@@ -62114,7 +62150,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "0.1 miles",
+ "localizedDistanceString": ,
}
}
>
@@ -67579,7 +67617,9 @@ exports[`components > viewers > nearby view renders proper scooter dates 1`] = `
id="components.NearbyView.distanceAway"
values={
Object {
- "localizedDistanceString": "0.1 miles",
+ "localizedDistanceString": ,
}
}
>
diff --git a/example/example-config.yml b/example/example-config.yml
index 04651d8c2..782d37f22 100644
--- a/example/example-config.yml
+++ b/example/example-config.yml
@@ -18,6 +18,9 @@ api:
port: 8080
v2: true
+### The default unit system was historically imperial, but it can now easily be switched to metric:
+# units: metric
+
# Determines if the header brand should be clickable or not. If set to true,
# clicking the header brand will go back to the main trip planner page and wipe out any
# results.
diff --git a/lib/components/util/distance.ts b/lib/components/util/distance.ts
new file mode 100644
index 000000000..37c9ef1f5
--- /dev/null
+++ b/lib/components/util/distance.ts
@@ -0,0 +1,18 @@
+import { connect } from 'react-redux'
+import { Distance } from '@opentripplanner/humanize-distance'
+
+import { AppReduxState } from '../../util/state-types'
+
+// Connect to the redux store for unit system presets
+// (fall back to imperial to not break existing implementations).
+const mapStateToProps = (state: AppReduxState) => {
+ const { units = 'imperial' } = state.otp.config
+ return {
+ // Preset for long units to be consistent with humanizeDistanceString.
+ long: units === 'imperial',
+ units
+ }
+}
+
+// Pass an empty object as mapDispatchToProps to remove dispatch from the rendered HTML.
+export default connect(mapStateToProps, {})(Distance)
diff --git a/lib/components/viewers/nearby/distance-display.tsx b/lib/components/viewers/nearby/distance-display.tsx
index 373e04535..847050cb8 100644
--- a/lib/components/viewers/nearby/distance-display.tsx
+++ b/lib/components/viewers/nearby/distance-display.tsx
@@ -1,19 +1,18 @@
-import { FormattedMessage, useIntl } from 'react-intl'
-import { humanizeDistanceString } from '@opentripplanner/humanize-distance'
+import { FormattedMessage } from 'react-intl'
import React from 'react'
+import Distance from '../../util/distance'
+
import { CardAside } from './styled'
const DistanceDisplay = ({ distance }: { distance?: number }): JSX.Element => {
- const intl = useIntl()
-
if (!distance || distance < 5) return <>>
return (
}}
/>
diff --git a/lib/util/config-types.ts b/lib/util/config-types.ts
index 05acffd68..019a436dd 100644
--- a/lib/util/config-types.ts
+++ b/lib/util/config-types.ts
@@ -10,6 +10,7 @@ import {
ModeSetting,
ModeSettingValues,
TransitOperator,
+ UnitSystem,
VehicleRentalMapOverlaySymbol
} from '@opentripplanner/types'
import { ControlPosition } from 'react-map-gl/maplibre'
@@ -441,6 +442,7 @@ export interface AppConfig {
title?: string
transitOperators?: TransitOperatorConfig[]
translateExternalLinks?: boolean
+ units?: UnitSystem
// Add other config items as needed.
}