From 25ceaf8c0b5c078ea469b761966aac8dbaef3f92 Mon Sep 17 00:00:00 2001 From: Caleb Derosier <125901828+caleb-livefront@users.noreply.github.com> Date: Tue, 26 Mar 2024 11:21:39 -0600 Subject: [PATCH] BIT-2131: Display folders when filtering by org in vault (#1170) --- .../itemlisting/VaultItemListingViewModel.kt | 4 +--- .../util/VaultItemListingDataExtensions.kt | 4 +++- .../feature/vault/util/VaultDataExtensions.kt | 16 ++++++++++++---- .../vault/util/VaultDataExtensionsTest.kt | 13 +++++++++++-- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt index 2b7420a0fe..221a5db315 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt @@ -672,9 +672,7 @@ class VaultItemListingViewModel @Inject constructor( itemListingType = currentState .itemListingType .updateWithAdditionalDataIfNecessary( - folderList = vaultData - .folderViewList - .toFilteredList(state.vaultFilterType), + folderList = vaultData.folderViewList, collectionList = vaultData .collectionViewList .toFilteredList(state.vaultFilterType), diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt index d5ae625e3c..c3fe0cbf13 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt @@ -209,7 +209,9 @@ fun List.toViewState( ) } -/** * Updates a [VaultItemListingState.ItemListingType] with the given data if necessary. */ +/** + * Updates a [VaultItemListingState.ItemListingType] with the given data if necessary. + */ fun VaultItemListingState.ItemListingType.updateWithAdditionalDataIfNecessary( folderList: List, collectionList: List, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt index b9d10906df..9de39fc006 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt @@ -46,7 +46,12 @@ fun VaultData.toViewState( val filteredCipherViewList = filteredCipherViewListWithDeletedItems .filter { it.deletedDate == null } - val filteredFolderViewList = folderViewList.toFilteredList(vaultFilterType).getFilteredFolders() + val filteredFolderViewList = folderViewList + .toFilteredList( + cipherList = filteredCipherViewList, + vaultFilterType = vaultFilterType, + ) + .getFilteredFolders() val filteredCollectionViewList = collectionViewList .toFilteredList(vaultFilterType) @@ -257,17 +262,20 @@ fun List.toFilteredList( */ @JvmName("toFilteredFolderList") fun List.toFilteredList( + cipherList: List, vaultFilterType: VaultFilterType, ): List = this - .filter { + .filter { folder -> when (vaultFilterType) { - // Folders are only included when including the user's personal data. VaultFilterType.AllVaults, VaultFilterType.MyVault, -> true - is VaultFilterType.OrganizationVault -> false + // Only include folders containing an item associated with this organization. + is VaultFilterType.OrganizationVault -> { + cipherList.any { it.folderId == folder.id } + } } } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt index 6b628edf7f..2aa2f8c8d1 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt @@ -152,7 +152,10 @@ class VaultDataExtensionsTest { createMockCollectionView(number = 1), createMockCollectionView(number = 2), ), - folderViewList = listOf(createMockFolderView(number = 1)), + folderViewList = listOf( + createMockFolderView(number = 1), + createMockFolderView(number = 3), + ), sendViewList = listOf(createMockSendView(number = 1)), ) @@ -173,7 +176,13 @@ class VaultDataExtensionsTest { identityItemsCount = 0, secureNoteItemsCount = 0, favoriteItems = listOf(), - folderItems = listOf(), + folderItems = listOf( + VaultState.ViewState.FolderItem( + id = "mockId-1", + name = "mockName-1".asText(), + itemCount = 1, + ), + ), collectionItems = listOf( VaultState.ViewState.CollectionItem( id = "mockId-1",