From 60a872acf2e581e9e14da3813d1b2986a610425c Mon Sep 17 00:00:00 2001 From: arpitagarwal1301 Date: Sun, 26 Jul 2026 01:31:42 +0530 Subject: [PATCH] fix: show add LOI button when zoomed out --- .../HomeScreenMapContainerViewModel.kt | 9 +++------ .../HomeScreenMapContainerViewModelTest.kt | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModel.kt b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModel.kt index c78ce13b7d..e027d2bf6f 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModel.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModel.kt @@ -130,10 +130,7 @@ internal constructor( /** [Feature] clicked by the user. */ val featureClicked: MutableStateFlow = MutableStateFlow(null) - /** - * List of [Job]s which allow LOIs to be added during field collection, populated only when zoomed - * in far enough. - */ + /** List of [Job]s which allow LOIs to be added during field collection. */ private val adHocLoiJobs: Flow> private val showJobSelectionModal = MutableStateFlow(false) @@ -179,8 +176,8 @@ internal constructor( .stateIn(viewModelScope, SharingStarted.Lazily, listOf()) adHocLoiJobs = - activeSurvey.combine(isZoomedInFlow) { survey, isZoomedIn -> - if (survey == null || !isZoomedIn) listOf() + activeSurvey.map { survey -> + if (survey == null) listOf() else survey.jobs.filter { it.canDataCollectorsAddLois && it.getAddLoiTask() != null } } diff --git a/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt b/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt index ab90ff792a..ce49d7c4ad 100644 --- a/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt @@ -35,6 +35,7 @@ import org.groundplatform.android.FakeData.LOCATION_OF_INTEREST_LOI_REPORT import org.groundplatform.android.FakeData.SURVEY import org.groundplatform.android.FakeData.USER import org.groundplatform.android.R +import org.groundplatform.android.common.Constants.CLUSTERING_ZOOM_THRESHOLD import org.groundplatform.android.data.remote.FakeRemoteDataStore import org.groundplatform.android.di.LocationOfInterestRepositoryModule import org.groundplatform.android.system.auth.FakeAuthenticationManager @@ -158,6 +159,20 @@ class HomeScreenMapContainerViewModelTest : BaseHiltTest() { assertThat(addLoiState.jobs.map { it.job }).containsExactly(ADHOC_JOB) } + @Test + fun `job component state is AddLoiButton below clustering threshold`() = runWithTestDispatcher { + viewModel.onMapCameraMoved( + CAMERA_POSITION.copy(zoomLevel = CLUSTERING_ZOOM_THRESHOLD - 1f) + ) + advanceUntilIdle() + + val state = viewModel.processJobMapComponentState().first() + + assertThat(state).isInstanceOf(JobMapComponentState.AddLoiButton::class.java) + assertThat((state as JobMapComponentState.AddLoiButton).jobs.map { it.job }) + .containsExactly(ADHOC_JOB) + } + @Test fun `setJobSelectionModalVisibility hides map actions when modal is shown`() = runWithTestDispatcher {