From c26e522a2e7285f8e51f4f1958ad622b4062e675 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jul 2025 22:31:26 +1000 Subject: [PATCH] refactor: split out mapstate --- .../commonMain/kotlin/moe/lava/banksia/App.kt | 5 +++-- .../moe/lava/banksia/ui/BanksiaViewModel.kt | 22 ++++++++----------- .../moe/lava/banksia/ui/state/MapState.kt | 9 ++++++++ 3 files changed, 21 insertions(+), 15 deletions(-) create mode 100644 composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/state/MapState.kt diff --git a/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt b/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt index 2a52c64..786d85d 100644 --- a/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt +++ b/composeApp/src/commonMain/kotlin/moe/lava/banksia/App.kt @@ -74,6 +74,7 @@ fun App( val state by viewModel.state.collectAsStateWithLifecycle() val infoState by viewModel.infoState.collectAsStateWithLifecycle() + val mapState by viewModel.mapState.collectAsStateWithLifecycle() val scaffoldState = rememberBottomSheetScaffoldState( bottomSheetState = rememberStandardBottomSheetState( @@ -139,9 +140,9 @@ fun App( extInsets = WindowInsets(top = with(LocalDensity.current) { SearchBarDefaults.InputFieldHeight.roundToPx() }, bottom = extInsets), - markers = state.markers, + markers = mapState.markers, setLastKnownLocation = viewModel::setLastKnownLocation, - polylines = state.polylines, + polylines = mapState.polylines, ) Searcher( routes = state.routes, diff --git a/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/BanksiaViewModel.kt b/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/BanksiaViewModel.kt index 8ab10f9..28b9a49 100644 --- a/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/BanksiaViewModel.kt +++ b/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/BanksiaViewModel.kt @@ -26,6 +26,7 @@ import moe.lava.banksia.native.maps.MarkerType import moe.lava.banksia.native.maps.Point import moe.lava.banksia.native.maps.Polyline import moe.lava.banksia.ui.state.InfoPanelState +import moe.lava.banksia.ui.state.MapState import moe.lava.banksia.util.BoxedValue import moe.lava.banksia.util.BoxedValue.Companion.box @@ -33,8 +34,6 @@ sealed class BanksiaEvent {} data class BanksiaViewState( val routes: List = listOf(), - val markers: List = listOf(), - val polylines: List = listOf(), ) class BanksiaViewModel : ViewModel() { @@ -44,13 +43,15 @@ class BanksiaViewModel : ViewModel() { private val iInfoState = MutableStateFlow(InfoPanelState.None) val infoState = iInfoState.asStateFlow() + private val iMapState = MutableStateFlow(MapState()) + val mapState = iMapState.asStateFlow() + private val iCameraChangeEmitter = MutableSharedFlow>() + val cameraChangeEmitter = iCameraChangeEmitter.asSharedFlow() + private val ptvService = PtvService() private var locationTrackerJob: Job? = null private var lastKnownLocation: Point? = null - private val iCameraChangeEmitter = MutableSharedFlow>() - val cameraChangeEmitter = iCameraChangeEmitter.asSharedFlow() - init { viewModelScope.launch { requestRoutes() @@ -90,12 +91,7 @@ class BanksiaViewModel : ViewModel() { } fun switchRoute(route: PtvRoute?) { - iState.update { - it.copy( - markers = listOf(), - polylines = listOf(), - ) - } + iMapState.update { MapState() } iInfoState.update { if (route == null) InfoPanelState.None @@ -197,7 +193,7 @@ class BanksiaViewModel : ViewModel() { else null - iState.update { it.copy(polylines = polylines) } + iMapState.update { it.copy(polylines = polylines) } newCameraPosition?.let { iCameraChangeEmitter.emit(it.box()) } } @@ -241,7 +237,7 @@ class BanksiaViewModel : ViewModel() { } } - iState.update { it.copy(markers = markers) } + iMapState.update { it.copy(markers = markers) } } private fun buildBounds(points: List): CameraPositionBounds { diff --git a/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/state/MapState.kt b/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/state/MapState.kt new file mode 100644 index 0000000..4f14013 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/moe/lava/banksia/ui/state/MapState.kt @@ -0,0 +1,9 @@ +package moe.lava.banksia.ui.state + +import moe.lava.banksia.native.maps.Marker +import moe.lava.banksia.native.maps.Polyline + +data class MapState( + val markers: List = listOf(), + val polylines: List = listOf(), +)