refactor(bulk-selection): optimize selectAll/reverseSelection logic (#898)
This commit is contained in:
parent
78f03f8207
commit
4fcbd88618
9 changed files with 56 additions and 81 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue