feat(common): add swipe action for saving posts

This commit is contained in:
Harsh Shandilya 2023-11-07 13:09:05 +05:30
parent c721b8b1da
commit 7a648a77b0
No known key found for this signature in database
3 changed files with 35 additions and 48 deletions

View file

@ -8,10 +8,15 @@ package dev.msfjarvis.claw.android.ui.lists
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Reply
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import dev.msfjarvis.claw.common.posts.LobstersCard
@ -29,20 +34,37 @@ fun LobstersListItem(
modifier: Modifier = Modifier,
) {
val read by produceState(false, item.shortId) { value = isRead(item.shortId) }
var saved by remember(item.shortId) { mutableStateOf(isSaved(item)) }
val commentsAction =
SwipeAction(
icon = rememberVectorPainter(Icons.AutoMirrored.Filled.Reply),
background = MaterialTheme.colorScheme.tertiary,
onSwipe = { postActions.viewCommentsPage(item.commentsUrl) },
)
val saveAction =
SwipeAction(
icon =
rememberVectorPainter(if (saved) Icons.Filled.Favorite else Icons.Filled.FavoriteBorder),
background = MaterialTheme.colorScheme.tertiary,
onSwipe = {
postActions.toggleSave(item)
saved = isSaved(item)
},
)
SwipeableActionsBox(
startActions = listOf(saveAction),
endActions = listOf(commentsAction),
) {
LobstersCard(
post = item,
isSaved = isSaved(item),
isSaved = saved,
isRead = read,
postActions = postActions,
viewComments = postActions::viewComments,
toggleSave = { post ->
postActions.toggleSave(post)
saved = isSaved(post)
},
viewPost = postActions::viewPost,
modifier = modifier,
)
}