android: move sorting and grouping of saved posts to ViewModel

This commit is contained in:
Harsh Shandilya 2022-05-09 17:07:20 +05:30
parent d659d04bd4
commit 692e294528
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
3 changed files with 17 additions and 8 deletions

View file

@ -73,7 +73,7 @@ fun LobstersApp(
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
val savedPosts by viewModel.savedPosts.collectAsState(emptyList())
val savedPosts by viewModel.savedPosts.collectAsState(emptyMap())
LobstersTheme(
providedValues =

View file

@ -6,28 +6,26 @@ import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import dev.msfjarvis.claw.android.ui.asZonedDateTime
import dev.msfjarvis.claw.android.ui.decorations.MonthHeader
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.ui.Divider
import dev.msfjarvis.claw.database.local.SavedPost
import java.time.Month
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun DatabasePosts(
items: List<SavedPost>,
items: Map<Month, List<SavedPost>>,
listState: LazyListState,
isSaved: suspend (SavedPost) -> Boolean,
postActions: PostActions,
modifier: Modifier = Modifier,
) {
val sorted = items.sortedByDescending { post -> post.createdAt.asZonedDateTime() }
val grouped = sorted.groupBy { post -> post.createdAt.asZonedDateTime().month }
LazyColumn(
state = listState,
modifier = modifier,
) {
grouped.forEach { (month, posts) ->
items.forEach { (month, posts) ->
stickyHeader { MonthHeader(month = month) }
items(posts) { item ->
ListItem(

View file

@ -6,12 +6,15 @@ import androidx.paging.Pager
import androidx.paging.PagingConfig
import dagger.hilt.android.lifecycle.HiltViewModel
import dev.msfjarvis.claw.android.paging.LobstersPagingSource
import dev.msfjarvis.claw.android.ui.asZonedDateTime
import dev.msfjarvis.claw.api.LobstersApi
import dev.msfjarvis.claw.database.local.SavedPost
import java.time.Month
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@ -41,11 +44,19 @@ constructor(
val newestPosts
get() = newestPostsPager.flow
val savedPosts
private val savedPostsFlow
get() = repository.savedPosts
val savedPosts
get() = savedPostsFlow.map(::mapSavedPosts)
private fun mapSavedPosts(items: List<SavedPost>): Map<Month, List<SavedPost>> {
val sorted = items.sortedByDescending { post -> post.createdAt.asZonedDateTime() }
return sorted.groupBy { post -> post.createdAt.asZonedDateTime().month }
}
suspend fun isPostSaved(post: SavedPost): Boolean {
return savedPosts
return savedPostsFlow
.mapLatest { posts -> posts.map { it.shortId } }
.mapLatest { shortIds -> post.shortId in shortIds }
.first()