From 52531d4cea2770591bd73d8b60482dcb257d6723 Mon Sep 17 00:00:00 2001 From: cukmekerb Date: Fri, 10 Dec 2021 00:03:00 -0800 Subject: [PATCH] remember followRoads per-segment --- src/current-run.spec.ts | 7 ++++--- src/current-run.ts | 4 +++- src/index.ts | 7 ++++--- src/next-segment-service.ts | 6 ++++-- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/current-run.spec.ts b/src/current-run.spec.ts index 68297ce..958f2b3 100644 --- a/src/current-run.spec.ts +++ b/src/current-run.spec.ts @@ -24,15 +24,16 @@ describe('CurrentRun class', () => { let currentRun = new CurrentRun(new RunStart({} as LngLat)); let initialExpectedDistance = 500; - let firstSegment = new RunSegment('some-uuid', {} as LngLat, initialExpectedDistance, {} as LineString); + let firstSegment = new RunSegment('some-uuid', {} as LngLat, initialExpectedDistance, {} as LineString, false); let marker = getMockMarker(); currentRun.addSegment(firstSegment, marker); expect(currentRun.distance).toBe(initialExpectedDistance, 'Distance was not set correctly from the distance response.'); expect(firstSegment.marker).toBe(marker); + expect(firstSegment.followsRoads).toBe(false); let secondDistance = 1337; - let secondSegment = new RunSegment('different-uuid', {} as LngLat, secondDistance, {} as LineString); + let secondSegment = new RunSegment('different-uuid', {} as LngLat, secondDistance, {} as LineString, true); currentRun.addSegment(secondSegment, getMockMarker()); expect(currentRun.distance).toBe(initialExpectedDistance + secondDistance, 'Distance did not correctly add the incoming distance response value.'); }); @@ -52,7 +53,7 @@ describe('CurrentRun class', () => { let expectedLngLat = { lng: 101, lat: 202 } as LngLat; let expectedDistance = 100; - let segment = new RunSegment('some-uuid', expectedLngLat, expectedDistance, {} as LineString); + let segment = new RunSegment('some-uuid', expectedLngLat, expectedDistance, {} as LineString, false); let marker = getMockMarker(); spyOn(marker, 'remove').and.stub(); currentRun.addSegment(segment, marker); diff --git a/src/current-run.ts b/src/current-run.ts index d6c228b..051e295 100644 --- a/src/current-run.ts +++ b/src/current-run.ts @@ -27,12 +27,14 @@ export class RunSegment extends RunStart { public id: string; public distance: number; // in meters public geometry: LineString; + public followsRoads: boolean; - constructor(id: string, lngLat: LngLat, distance: number, geometry: LineString) { + constructor(id: string, lngLat: LngLat, distance: number, geometry: LineString, followsRoads: boolean) { super(lngLat); this.id = id; this.distance = distance; this.geometry = geometry; + this.followsRoads = followsRoads; } } diff --git a/src/index.ts b/src/index.ts index 20eec81..8030cbc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -157,8 +157,9 @@ function runToJson(run: CurrentRun): string { for (let i in run.segments) { runJSON.segments.push({ lng: run.segments[i].lngLat.lng, - lat: run.segments[i].lngLat.lat - }) + lat: run.segments[i].lngLat.lat, + followsRoads: run.segments[i].followsRoads + }); } return JSON.stringify(runJSON); } @@ -172,7 +173,7 @@ function jsonToRun(json: string) { let prev = lngLat; for (let i = 0; i < runJSON.segments.length; i++) { let lngLat = new LngLat(runJSON.segments[i].lng, runJSON.segments[i].lat); - if (runJSON.followRoads) { + if (runJSON.segments[i].followsRoads) { addSegmentFromDirectionsResponse(prev, lngLat, false); } else { addSegmentFromStraightLine(prev, lngLat, false); diff --git a/src/next-segment-service.ts b/src/next-segment-service.ts index 7fbfadb..058674f 100644 --- a/src/next-segment-service.ts +++ b/src/next-segment-service.ts @@ -49,7 +49,8 @@ export class NextSegmentService { uuid(), nextLngLat, route.distance, - route.geometry as LineString + route.geometry as LineString, + true ); } else { throw new Error(`Non-successful status code when getting directions: ${JSON.stringify(res)}`); @@ -76,7 +77,8 @@ export class NextSegmentService { uuid(), nextLngLat, distance, - line + line, + false ); } }