BIT-1501: Apply vault item list filters (#673)

This commit is contained in:
David Perez 2024-01-18 20:06:03 -06:00 committed by Álison Fernandes
parent 02aad8f215
commit c7abbd17dc
4 changed files with 26 additions and 5 deletions

View file

@ -21,6 +21,8 @@ import com.x8bit.bitwarden.ui.vault.feature.itemlisting.util.determineListingPre
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.util.toItemListingType
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.util.toViewState
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.util.updateWithAdditionalDataIfNecessary
import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType
import com.x8bit.bitwarden.ui.vault.feature.vault.util.toFilteredList
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@ -46,6 +48,7 @@ class VaultItemListingViewModel @Inject constructor(
.vaultItemListingType
.toItemListingType(),
viewState = VaultItemListingState.ViewState.Loading,
vaultFilterType = vaultRepository.vaultFilterType,
baseWebSendUrl = environmentRepository.environment.environmentUrlData.baseWebSendUrl,
baseIconUrl = environmentRepository.environment.environmentUrlData.baseIconUrl,
isIconLoadingDisabled = settingsRepository.isIconLoadingDisabled,
@ -242,9 +245,11 @@ class VaultItemListingViewModel @Inject constructor(
.itemListingType
.updateWithAdditionalDataIfNecessary(
folderList = vaultData
.folderViewList,
.folderViewList
.toFilteredList(state.vaultFilterType),
collectionList = vaultData
.collectionViewList,
.collectionViewList
.toFilteredList(state.vaultFilterType),
),
viewState = when (val listingType = currentState.itemListingType) {
is VaultItemListingState.ItemListingType.Vault -> {
@ -253,6 +258,7 @@ class VaultItemListingViewModel @Inject constructor(
.filter { cipherView ->
cipherView.determineListingPredicate(listingType)
}
.toFilteredList(state.vaultFilterType)
.toViewState(
baseIconUrl = state.baseIconUrl,
isIconLoadingDisabled = state.isIconLoadingDisabled,
@ -280,6 +286,7 @@ class VaultItemListingViewModel @Inject constructor(
data class VaultItemListingState(
val itemListingType: ItemListingType,
val viewState: ViewState,
val vaultFilterType: VaultFilterType,
val baseWebSendUrl: String,
val baseIconUrl: String,
val isIconLoadingDisabled: Boolean,

View file

@ -170,8 +170,11 @@ private fun CipherView.toVaultItemOrNull(
}
}
/**
* Filters out all [CipherView]s that are not part of the given [VaultFilterType].
*/
@JvmName("toFilteredCipherList")
private fun List<CipherView>.toFilteredList(
fun List<CipherView>.toFilteredList(
vaultFilterType: VaultFilterType,
): List<CipherView> =
this
@ -187,8 +190,11 @@ private fun List<CipherView>.toFilteredList(
}
}
/**
* Filters out all [FolderView]s that are not part of the given [VaultFilterType].
*/
@JvmName("toFilteredFolderList")
private fun List<FolderView>.toFilteredList(
fun List<FolderView>.toFilteredList(
vaultFilterType: VaultFilterType,
): List<FolderView> =
this
@ -203,8 +209,11 @@ private fun List<FolderView>.toFilteredList(
}
}
/**
* Filters out all [CollectionView]s that are not part of the given [VaultFilterType].
*/
@JvmName("toFilteredCollectionList")
private fun List<CollectionView>.toFilteredList(
fun List<CollectionView>.toFilteredList(
vaultFilterType: VaultFilterType,
): List<CollectionView> =
this

View file

@ -28,6 +28,7 @@ import com.x8bit.bitwarden.ui.platform.components.model.IconData
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
import com.x8bit.bitwarden.ui.util.assertNoDialogExists
import com.x8bit.bitwarden.ui.util.isProgressBar
import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
@ -627,6 +628,7 @@ class VaultItemListingScreenTest : BaseComposeTest() {
private val DEFAULT_STATE = VaultItemListingState(
itemListingType = VaultItemListingState.ItemListingType.Vault.Login,
viewState = VaultItemListingState.ViewState.Loading,
vaultFilterType = VaultFilterType.AllVaults,
baseWebSendUrl = Environment.Us.environmentUrlData.baseWebSendUrl,
isIconLoadingDisabled = false,
baseIconUrl = Environment.Us.environmentUrlData.baseIconUrl,

View file

@ -21,6 +21,7 @@ import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
import com.x8bit.bitwarden.ui.platform.base.util.asText
import com.x8bit.bitwarden.ui.platform.base.util.concat
import com.x8bit.bitwarden.ui.vault.feature.itemlisting.util.createMockDisplayItemForCipher
import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType
import com.x8bit.bitwarden.ui.vault.model.VaultItemListingType
import io.mockk.every
import io.mockk.just
@ -43,6 +44,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
private val mutableVaultDataStateFlow =
MutableStateFlow<DataState<VaultData>>(DataState.Loading)
private val vaultRepository: VaultRepository = mockk {
every { vaultFilterType } returns VaultFilterType.AllVaults
every { vaultDataStateFlow } returns mutableVaultDataStateFlow
every { sync() } just runs
}
@ -648,6 +650,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() {
VaultItemListingState(
itemListingType = itemListingType,
viewState = viewState,
vaultFilterType = vaultRepository.vaultFilterType,
baseWebSendUrl = Environment.Us.environmentUrlData.baseWebSendUrl,
baseIconUrl = environmentRepository.environment.environmentUrlData.baseIconUrl,
isIconLoadingDisabled = settingsRepository.isIconLoadingDisabled,