refactor(bulk-selection): optimize selectAll/reverseSelection logic (#898)

This commit is contained in:
Cuong-Tran 2025-05-10 01:05:25 +07:00
parent 78f03f8207
commit 4fcbd88618
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
9 changed files with 56 additions and 81 deletions

View file

@ -56,20 +56,16 @@ fun GlobalSearchScreen(
onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode,
onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite,
onSelectAll = {
state.filteredItems.forEach { (_, result) ->
if (result is SearchItemResult.Success) {
result.result.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
}
}
},
onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection(
state.filteredItems.values
.filterIsInstance<SearchItemResult.Success>()
.flatMap { it.result },
)
.flatMap { it.result }
.forEach { bulkFavoriteScreenModel.select(it) }
},
onReverseSelection = {
state.filteredItems.values
.filterIsInstance<SearchItemResult.Success>()
.flatMap { it.result }
.let { bulkFavoriteScreenModel.reverseSelection(it) }
},
)
} else {

View file

@ -46,23 +46,16 @@ fun MigrateSearchScreen(
onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode,
onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite,
onSelectAll = {
state.filteredItems.forEach { (_, result) ->
when (result) {
is SearchItemResult.Success -> {
result.result.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
}
else -> {}
}
}
},
onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection(
state.filteredItems.values
.filterIsInstance<SearchItemResult.Success>()
.flatMap { it.result },
)
.flatMap { it.result }
.forEach { bulkFavoriteScreenModel.select(it) }
},
onReverseSelection = {
state.filteredItems.values
.filterIsInstance<SearchItemResult.Success>()
.flatMap { it.result }
.let { bulkFavoriteScreenModel.reverseSelection(it) }
},
)
} else {

View file

@ -124,17 +124,14 @@ fun SourceFeedScreen(
onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode,
onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite,
onSelectAll = {
items.forEach {
it.results?.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
}
items.mapNotNull { it.results }
.flatten()
.forEach { bulkFavoriteScreenModel.select(it) }
},
onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection(
items.mapNotNull { it.results }
.flatten(),
)
.flatten()
.let { bulkFavoriteScreenModel.reverseSelection(it) }
},
)
} else {

View file

@ -65,17 +65,18 @@ fun TabbedScreen(
onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode,
onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite,
onSelectAll = {
feedState.items?.forEach {
it.results?.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
feedState.items?.let { result ->
result.mapNotNull { it.results }
.flatten()
.forEach { bulkFavoriteScreenModel.select(it) }
}
},
onReverseSelection = {
feedState.items
?.mapNotNull { it.results }
?.flatten()
?.let { bulkFavoriteScreenModel.reverseSelection(it) }
feedState.items?.let { result ->
result.mapNotNull { it.results }
.flatten()
.let { bulkFavoriteScreenModel.reverseSelection(it) }
}
},
)
} else {

View file

@ -89,15 +89,12 @@ data class SourceSearchScreen(
onSelectAll = {
mangaList.itemSnapshotList.items
.map { it.value.first }
.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
.forEach { bulkFavoriteScreenModel.select(it) }
},
onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection(
mangaList.itemSnapshotList.items
.map { it.value.first },
)
.map { it.value.first }
.let { bulkFavoriteScreenModel.reverseSelection(it) }
},
)
} else {

View file

@ -202,15 +202,12 @@ data class BrowseSourceScreen(
onSelectAll = {
mangaList.itemSnapshotList.items
.map { it.value.first }
.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
.forEach { bulkFavoriteScreenModel.select(it) }
},
onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection(
mangaList.itemSnapshotList.items
.map { it.value.first },
)
.map { it.value.first }
.let { bulkFavoriteScreenModel.reverseSelection(it) }
},
)
} else {

View file

@ -54,18 +54,18 @@ fun RelatedMangasScreen(
onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode,
onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite,
onSelectAll = {
successState.relatedMangasSorted?.forEach {
val relatedManga = it as RelatedManga.Success
relatedManga.mangaList.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
successState.relatedMangasSorted?.let { result ->
result.map { it as RelatedManga.Success }
.flatMap { it.mangaList }
.forEach { bulkFavoriteScreenModel.select(it) }
}
},
onReverseSelection = {
successState.relatedMangasSorted
?.map { it as RelatedManga.Success }
?.flatMap { it.mangaList }
?.let { bulkFavoriteScreenModel.reverseSelection(it) }
successState.relatedMangasSorted?.let { result ->
result.map { it as RelatedManga.Success }
.flatMap { it.mangaList }
.let { bulkFavoriteScreenModel.reverseSelection(it) }
}
},
)
} else {

View file

@ -77,15 +77,12 @@ class MangaDexFollowsScreen(private val sourceId: Long) : Screen() {
onSelectAll = {
mangaList.itemSnapshotList.items
.map { it.value.first }
.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
.forEach { bulkFavoriteScreenModel.select(it) }
},
onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection(
mangaList.itemSnapshotList.items
.map { it.value.first },
)
.map { it.value.first }
.let { bulkFavoriteScreenModel.reverseSelection(it) }
},
)
} else {

View file

@ -94,15 +94,12 @@ class BrowseRecommendsScreen(
onSelectAll = {
mangaList.itemSnapshotList.items
.map { it.value.first }
.forEach { manga ->
bulkFavoriteScreenModel.select(manga)
}
.forEach { bulkFavoriteScreenModel.select(it) }
},
onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection(
mangaList.itemSnapshotList.items
.map { it.value.first },
)
.map { it.value.first }
.let { bulkFavoriteScreenModel.reverseSelection(it) }
},
)
} else {