Skip to content

Commit ce9f81a

Browse files
committed
fix: Load selected trip shapes on trip details
1 parent 36183e6 commit ce9f81a

File tree

3 files changed

+34
-12
lines changed

3 files changed

+34
-12
lines changed

shared/src/commonMain/kotlin/com/mbta/tid/mbta_app/repositories/TripRepository.kt

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ package com.mbta.tid.mbta_app.repositories
33
import co.touchlab.skie.configuration.annotations.DefaultArgumentInterop
44
import com.mbta.tid.mbta_app.json
55
import com.mbta.tid.mbta_app.model.ObjectCollectionBuilder
6-
import com.mbta.tid.mbta_app.model.Route
7-
import com.mbta.tid.mbta_app.model.TripShape
86
import com.mbta.tid.mbta_app.model.response.ApiResult
9-
import com.mbta.tid.mbta_app.model.response.ShapeWithStops
7+
import com.mbta.tid.mbta_app.model.response.MapFriendlyRouteResponse
108
import com.mbta.tid.mbta_app.model.response.TripResponse
119
import com.mbta.tid.mbta_app.model.response.TripSchedulesResponse
1210
import com.mbta.tid.mbta_app.network.MobileBackendClient
@@ -22,7 +20,7 @@ public interface ITripRepository {
2220

2321
public suspend fun getTrip(tripId: String): ApiResult<TripResponse>
2422

25-
public suspend fun getTripShape(tripId: String): ApiResult<TripShape>
23+
public suspend fun getTripShape(tripId: String): ApiResult<MapFriendlyRouteResponse>
2624
}
2725

2826
internal class TripRepository : ITripRepository, KoinComponent {
@@ -52,12 +50,12 @@ internal class TripRepository : ITripRepository, KoinComponent {
5250
return ApiResult.Ok(data = json.decodeFromString(response.body()))
5351
}
5452

55-
override suspend fun getTripShape(tripId: String): ApiResult<TripShape> =
53+
override suspend fun getTripShape(tripId: String): ApiResult<MapFriendlyRouteResponse> =
5654
ApiResult.runCatching {
5755
val response =
5856
mobileBackendClient.get {
5957
url {
60-
path("api/trip/map")
58+
path("api/trip/map-friendly")
6159
parameter("trip_id", tripId)
6260
}
6361
}
@@ -75,7 +73,7 @@ internal open class IdleTripRepository : ITripRepository {
7573
return suspendCancellableCoroutine {}
7674
}
7775

78-
override suspend fun getTripShape(tripId: String): ApiResult<TripShape> {
76+
override suspend fun getTripShape(tripId: String): ApiResult<MapFriendlyRouteResponse> {
7977
return suspendCancellableCoroutine {}
8078
}
8179
}
@@ -89,7 +87,7 @@ internal open class ErroringTripRepository : ITripRepository {
8987
return ApiResult.Error(404, "")
9088
}
9189

92-
override suspend fun getTripShape(tripId: String): ApiResult<TripShape> {
90+
override suspend fun getTripShape(tripId: String): ApiResult<MapFriendlyRouteResponse> {
9391
return ApiResult.Error(404, "")
9492
}
9593
}
@@ -99,8 +97,7 @@ public class MockTripRepository
9997
constructor(
10098
internal var tripSchedulesResponse: TripSchedulesResponse = TripSchedulesResponse.Unknown,
10199
internal var tripResponse: TripResponse = TripResponse(ObjectCollectionBuilder.Single.trip {}),
102-
internal var tripShape: TripShape =
103-
TripShape(ShapeWithStops(0, Route.Id(""), "", null, emptyList())),
100+
internal var tripShape: MapFriendlyRouteResponse = MapFriendlyRouteResponse(emptyList()),
104101
internal val onGetTrip: (String) -> Unit = {},
105102
internal val onGetTripSchedules: (String) -> Unit = {},
106103
) : ITripRepository {
@@ -114,7 +111,7 @@ constructor(
114111
return ApiResult.Ok(tripResponse)
115112
}
116113

117-
override suspend fun getTripShape(tripId: String): ApiResult<TripShape> {
114+
override suspend fun getTripShape(tripId: String): ApiResult<MapFriendlyRouteResponse> {
118115
return ApiResult.Ok(tripShape)
119116
}
120117
}

shared/src/commonMain/kotlin/com/mbta/tid/mbta_app/viewModel/MapViewModel.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.mbta.tid.mbta_app.repositories.IGlobalRepository
2929
import com.mbta.tid.mbta_app.repositories.IRailRouteShapeRepository
3030
import com.mbta.tid.mbta_app.repositories.ISentryRepository
3131
import com.mbta.tid.mbta_app.repositories.IStopRepository
32+
import com.mbta.tid.mbta_app.repositories.ITripRepository
3233
import com.mbta.tid.mbta_app.routes.SheetRoutes
3334
import com.mbta.tid.mbta_app.utils.EasternTimeInstant
3435
import com.mbta.tid.mbta_app.utils.IMapLayerManager
@@ -90,6 +91,7 @@ public class MapViewModel(
9091
private val railRouteShapeRepository: IRailRouteShapeRepository,
9192
private val sentryRepository: ISentryRepository,
9293
private val stopRepository: IStopRepository,
94+
private val tripRepository: ITripRepository,
9395
private val clock: Clock,
9496
private val defaultCoroutineDispatcher: CoroutineDispatcher,
9597
private val iOCoroutineDispatcher: CoroutineDispatcher,
@@ -193,6 +195,8 @@ public class MapViewModel(
193195
var state by remember { mutableStateOf(State(layerState, layersInitialized)) }
194196
val (stopId: String?, stopFilter: StopDetailsFilter?) =
195197
layerState.stop?.id to layerState.stopFilter
198+
val tripId = (layerState as? LayerState.TripSelected)?.tripFilter?.tripId
199+
val followingTrip = (layerState as? LayerState.TripSelected)?.following ?: false
196200

197201
LaunchedEffect(null) { globalRepository.getGlobalData() }
198202
LaunchedEffect(null) { allRailRouteShapes = fetchRailRouteShapes() }
@@ -314,12 +318,32 @@ public class MapViewModel(
314318
LaunchedEffect(
315319
stopId,
316320
stopFilter,
321+
tripId,
317322
allRailRouteShapes,
318323
globalData,
319324
globalMapData,
320325
routeCardData.data,
321326
) {
322-
if (stopId != null) {
327+
if (tripId != null && followingTrip) {
328+
val tripShapes =
329+
withContext(iOCoroutineDispatcher) {
330+
when (val data = tripRepository.getTripShape(tripId)) {
331+
is ApiResult.Ok -> data.data.routesWithSegmentedShapes
332+
is ApiResult.Error -> null
333+
}
334+
}
335+
val resolvedGlobal = globalData
336+
if (tripShapes != null && resolvedGlobal != null) {
337+
routeSourceData =
338+
RouteFeaturesBuilder.generateRouteSources(
339+
tripShapes,
340+
resolvedGlobal,
341+
globalMapData,
342+
)
343+
routeShapes = tripShapes
344+
stopLayerGeneratorState = StopLayerGenerator.State(stopId, stopFilter)
345+
}
346+
} else if (stopId != null) {
323347
val featuresToDisplayForStop =
324348
featuresToDisplayForStop(
325349
globalResponse = globalData,

shared/src/commonMain/kotlin/com/mbta/tid/mbta_app/viewModel/viewModelModule.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public fun viewModelModule(): Module = module {
3333
get(),
3434
get(),
3535
get(),
36+
get(),
3637
get(named("coroutineDispatcherDefault")),
3738
get(named("coroutineDispatcherIO")),
3839
)

0 commit comments

Comments
 (0)