fix(awareness): show a 999.6 m contact marker as 1.0 km, not 1000 m

The on-globe Contacts markers picked metres before rounding, so a contact
999.5 m or more away read "1000 m" while the Contacts panel read
"1.0 km". The marker label now rounds first, as the panel does.
This commit is contained in:
Aditya committed 2026-10-27 15:55:30 +05:30
1 parent 15de9d738c
commit 83c4388e64
3 files changed
+13 -4

No files matched your search

+4 -2
View File
@@ -47,8 +47,10 @@ export function findByDoublingRadius(
/** @param {number} meters @returns {string} */
export function formatAwarenessDistance(meters) {
if (!Number.isFinite(meters) || meters < 0) return '—';
return meters < 1000
? `${Math.round(meters)} m`
// Round before the kilometre cut. 999.6 m was printed as "1000 m".
const wholeMeters = Math.round(meters);
return wholeMeters < 1000
? `${wholeMeters} m`
: `${(meters / 1000).toFixed(meters < 10000 ? 1 : 0)} km`;
}
@@ -24,6 +24,12 @@ test('awareness formatters preserve valid zeroes and replace missing or invalid
assert.equal(formatAwarenessLabel(undefined), '—');
});
test('a contact marker moves a distance that rounds to 1,000 m into kilometres', () => {
assert.equal(formatAwarenessDistance(999.4), '999 m');
assert.equal(formatAwarenessDistance(999.6), '1.0 km');
assert.equal(formatAwarenessDistance(4600), '4.6 km');
});
test('awareness cohorts sort nearest-first and do not turn empty data into out of range', () => {
const result = summarizeAwarenessCohort([{ id: 'far', distance: 9000 }, { id: 'near', distanceM: 1000 }]);
assert.equal(result.relationship, 'NEARBY');