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, onClickClearSelection = bulkFavoriteScreenModel::toggleSelectionMode,
onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite, onChangeCategoryClick = bulkFavoriteScreenModel::addFavorite,
onSelectAll = { onSelectAll = {
state.filteredItems.forEach { (_, result) -> state.filteredItems.values
if (result is SearchItemResult.Success) { .filterIsInstance<SearchItemResult.Success>()
result.result.forEach { manga -> .flatMap { it.result }
bulkFavoriteScreenModel.select(manga) .forEach { bulkFavoriteScreenModel.select(it) }
}
}
}
}, },
onReverseSelection = { onReverseSelection = {
bulkFavoriteScreenModel.reverseSelection( state.filteredItems.values
state.filteredItems.values .filterIsInstance<SearchItemResult.Success>()
.filterIsInstance<SearchItemResult.Success>() .flatMap { it.result }
.flatMap { it.result }, .let { bulkFavoriteScreenModel.reverseSelection(it) }
)
}, },
) )
} else { } else {

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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