BIT-1724: No folder vault section (#1021)

This commit is contained in:
Ramsey Smith
2024-02-15 16:03:24 -07:00
committed by Álison Fernandes
parent e9fba5b99c
commit 6b4e367c66
6 changed files with 120 additions and 24 deletions

View File

@@ -952,7 +952,10 @@ data class VaultItemListingState(
// The folderName will always initially be an empty string
val folderName: String = "",
) : Vault() {
override val titleText: Text get() = folderName.asText()
override val titleText: Text
get() = folderId
?.let { folderName.asText() }
?: R.string.folder_none.asText()
override val hasFab: Boolean get() = false
}

View File

@@ -888,14 +888,6 @@ data class VaultState(
val message: Text,
) : DialogState()
}
companion object {
/**
* The maximum number of no folder items that can be displayed before the UI creates a
* no folder "folder".
*/
private const val NO_FOLDER_ITEM_THRESHOLD: Int = 100
}
}
/**

View File

@@ -20,6 +20,12 @@ import com.x8bit.bitwarden.ui.vault.model.findVaultCardBrandWithNameOrNull
private const val ANDROID_URI = "androidapp://"
private const val IOS_URI = "iosapp://"
/**
* The maximum number of no folder items that can be displayed before the UI creates a
* no folder "folder".
*/
private const val NO_FOLDER_ITEM_THRESHOLD: Int = 100
/**
* Transforms [VaultData] into [VaultState.ViewState] using the given [vaultFilterType].
*/
@@ -38,6 +44,8 @@ fun VaultData.toViewState(
.filter { it.deletedDate == null }
val filteredFolderViewList = folderViewList.toFilteredList(vaultFilterType)
val filteredCollectionViewList = collectionViewList.toFilteredList(vaultFilterType)
val noFolderItems = filteredCipherViewList
.filter { it.folderId.isNullOrBlank() }
return if (filteredCipherViewList.isEmpty()) {
VaultState.ViewState.NoItems
@@ -61,25 +69,40 @@ fun VaultData.toViewState(
baseIconUrl = baseIconUrl,
)
},
folderItems = filteredFolderViewList.map { folderView ->
VaultState.ViewState.FolderItem(
id = folderView.id,
name = folderView.name.asText(),
itemCount = filteredCipherViewList
.count {
!it.id.isNullOrBlank() &&
folderView.id == it.folderId
},
)
},
noFolderItems = filteredCipherViewList
.filter { it.folderId.isNullOrBlank() }
folderItems = filteredFolderViewList
.map { folderView ->
VaultState.ViewState.FolderItem(
id = folderView.id,
name = folderView.name.asText(),
itemCount = filteredCipherViewList
.count {
!it.id.isNullOrBlank() &&
folderView.id == it.folderId
},
)
}
.let { folderItems ->
if (noFolderItems.size < NO_FOLDER_ITEM_THRESHOLD) {
folderItems
} else {
folderItems.plus(
VaultState.ViewState.FolderItem(
id = null,
name = R.string.folder_none.asText(),
itemCount = noFolderItems.size,
),
)
}
},
noFolderItems = noFolderItems
.mapNotNull {
it.toVaultItemOrNull(
isIconLoadingDisabled = isIconLoadingDisabled,
baseIconUrl = baseIconUrl,
)
},
}
.takeIf { it.size < NO_FOLDER_ITEM_THRESHOLD }
.orEmpty(),
collectionItems = filteredCollectionViewList
.filter { it.id != null }
.map { collectionView ->