mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-13 00:57:06 +05:30
Revert "refactor(android): move post save state logic to a Paging transform"
This reverts commit 3829abeb8f
.
This commit is contained in:
parent
e6eaadbaa1
commit
4f60db29bd
6 changed files with 49 additions and 23 deletions
|
@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
- Do not schedule post update job every time the app starts
|
||||
- Improve favicon loading to reduce unnecessary redraws
|
||||
- Fix post lists being reloaded unnecessarily
|
||||
|
||||
## [1.11.0] - 2022-12-07
|
||||
|
||||
|
|
|
@ -179,6 +179,7 @@ fun LobstersApp(
|
|||
NetworkPosts(
|
||||
lazyPagingItems = hottestPosts,
|
||||
listState = hottestListState,
|
||||
isPostSaved = viewModel::isPostSaved,
|
||||
postActions = postActions,
|
||||
)
|
||||
}
|
||||
|
@ -189,6 +190,7 @@ fun LobstersApp(
|
|||
NetworkPosts(
|
||||
lazyPagingItems = newestPosts,
|
||||
listState = newestListState,
|
||||
isPostSaved = viewModel::isPostSaved,
|
||||
postActions = postActions,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import androidx.compose.foundation.lazy.items
|
|||
import androidx.compose.material3.Divider
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import dev.msfjarvis.claw.common.posts.LobstersCard
|
||||
import dev.msfjarvis.claw.common.posts.PostActions
|
||||
import dev.msfjarvis.claw.common.ui.decorations.MonthHeader
|
||||
import dev.msfjarvis.claw.database.local.SavedPost
|
||||
|
@ -34,9 +33,9 @@ fun DatabasePosts(
|
|||
items.forEach { (month, posts) ->
|
||||
stickyHeader { MonthHeader(month = month) }
|
||||
items(posts) { item ->
|
||||
LobstersCard(
|
||||
post = item,
|
||||
isSaved = true,
|
||||
ListItem(
|
||||
item = item,
|
||||
isSaved = { true },
|
||||
postActions = postActions,
|
||||
)
|
||||
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
/*
|
||||
* Copyright © 2021-2022 Harsh Shandilya.
|
||||
* Use of this source code is governed by an MIT-style
|
||||
* license that can be found in the LICENSE file or at
|
||||
* https://opensource.org/licenses/MIT.
|
||||
*/
|
||||
package dev.msfjarvis.claw.android.ui.lists
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.produceState
|
||||
import androidx.compose.ui.Modifier
|
||||
import dev.msfjarvis.claw.common.posts.LobstersCard
|
||||
import dev.msfjarvis.claw.common.posts.PostActions
|
||||
import dev.msfjarvis.claw.database.local.SavedPost
|
||||
|
||||
@Composable
|
||||
fun ListItem(
|
||||
item: SavedPost,
|
||||
isSaved: suspend (SavedPost) -> Boolean,
|
||||
postActions: PostActions,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val saved by produceState(false, item) { value = isSaved(item) }
|
||||
LobstersCard(
|
||||
post = item,
|
||||
isSaved = saved,
|
||||
postActions = postActions,
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
|
@ -27,18 +27,19 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.paging.LoadState
|
||||
import androidx.paging.compose.LazyPagingItems
|
||||
import androidx.paging.compose.items
|
||||
import dev.msfjarvis.claw.common.posts.LobstersCard
|
||||
import dev.msfjarvis.claw.common.posts.PostActions
|
||||
import dev.msfjarvis.claw.common.posts.toDbModel
|
||||
import dev.msfjarvis.claw.common.ui.NetworkError
|
||||
import dev.msfjarvis.claw.common.ui.ProgressBar
|
||||
import dev.msfjarvis.claw.database.local.SavedPost
|
||||
import dev.msfjarvis.claw.model.LobstersPost
|
||||
|
||||
@OptIn(ExperimentalMaterialApi::class)
|
||||
@Composable
|
||||
fun NetworkPosts(
|
||||
lazyPagingItems: LazyPagingItems<Pair<LobstersPost, Boolean>>,
|
||||
lazyPagingItems: LazyPagingItems<LobstersPost>,
|
||||
listState: LazyListState,
|
||||
isPostSaved: suspend (SavedPost) -> Boolean,
|
||||
postActions: PostActions,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
|
@ -58,10 +59,10 @@ fun NetworkPosts(
|
|||
) {
|
||||
items(lazyPagingItems) { item ->
|
||||
if (item != null) {
|
||||
val (post, saved) = item
|
||||
LobstersCard(
|
||||
post = post.toDbModel(),
|
||||
isSaved = saved,
|
||||
val dbModel = item.toDbModel()
|
||||
ListItem(
|
||||
item = dbModel,
|
||||
isSaved = isPostSaved,
|
||||
postActions = postActions,
|
||||
)
|
||||
|
||||
|
|
|
@ -10,8 +10,6 @@ import androidx.lifecycle.ViewModel
|
|||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.paging.Pager
|
||||
import androidx.paging.PagingConfig
|
||||
import androidx.paging.cachedIn
|
||||
import androidx.paging.map
|
||||
import com.deliveryhero.whetstone.viewmodel.ContributesViewModel
|
||||
import com.slack.eithernet.ApiResult.Failure
|
||||
import com.slack.eithernet.ApiResult.Success
|
||||
|
@ -45,16 +43,10 @@ constructor(
|
|||
Pager(PagingConfig(pageSize = 20)) { pagingSourceFactory.create(api::getHottestPosts) }
|
||||
|
||||
val hottestPosts
|
||||
get() =
|
||||
hottestPostsPager.flow
|
||||
.map { pagingData -> pagingData.map { item -> item to isPostSaved(item.shortId) } }
|
||||
.cachedIn(viewModelScope)
|
||||
get() = hottestPostsPager.flow
|
||||
|
||||
val newestPosts
|
||||
get() =
|
||||
newestPostsPager.flow
|
||||
.map { pagingData -> pagingData.map { item -> item to isPostSaved(item.shortId) } }
|
||||
.cachedIn(viewModelScope)
|
||||
get() = newestPostsPager.flow
|
||||
|
||||
private val savedPostsFlow
|
||||
get() = savedPostsRepository.savedPosts
|
||||
|
@ -67,13 +59,13 @@ constructor(
|
|||
return sorted.groupBy { post -> post.createdAt.toLocalDateTime().month }
|
||||
}
|
||||
|
||||
private suspend fun isPostSaved(shortId: String): Boolean {
|
||||
return savedPostsFlow.first().any { savedPost -> savedPost.shortId == shortId }
|
||||
suspend fun isPostSaved(post: SavedPost): Boolean {
|
||||
return savedPostsFlow.first().any { savedPost -> savedPost.shortId == post.shortId }
|
||||
}
|
||||
|
||||
fun toggleSave(post: SavedPost) {
|
||||
viewModelScope.launch(ioDispatcher) {
|
||||
val saved = isPostSaved(post.shortId)
|
||||
val saved = isPostSaved(post)
|
||||
if (saved) {
|
||||
savedPostsRepository.removePost(post)
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue