mirror of
https://github.com/bitwarden/android.git
synced 2025-02-17 12:30:00 +03:00
BIT-1501: Apply vault item list filters (#673)
This commit is contained in:
parent
02aad8f215
commit
c7abbd17dc
4 changed files with 26 additions and 5 deletions
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue