mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-15 00:37:03 +05:30
feat(android): switch comments page to a swipe action
This commit is contained in:
parent
45b6f3c4d5
commit
bae671ad23
4 changed files with 26 additions and 12 deletions
|
@ -77,6 +77,7 @@ dependencies {
|
||||||
implementation(libs.napier)
|
implementation(libs.napier)
|
||||||
implementation(libs.soloader)
|
implementation(libs.soloader)
|
||||||
implementation(libs.sqldelight.extensions.coroutines)
|
implementation(libs.sqldelight.extensions.coroutines)
|
||||||
|
implementation(libs.swipe)
|
||||||
implementation(libs.unfurl)
|
implementation(libs.unfurl)
|
||||||
implementation(projects.api)
|
implementation(projects.api)
|
||||||
implementation(projects.common)
|
implementation(projects.common)
|
||||||
|
|
|
@ -1,18 +1,24 @@
|
||||||
/*
|
/*
|
||||||
* Copyright © 2021-2022 Harsh Shandilya.
|
* Copyright © 2021-2023 Harsh Shandilya.
|
||||||
* Use of this source code is governed by an MIT-style
|
* Use of this source code is governed by an MIT-style
|
||||||
* license that can be found in the LICENSE file or at
|
* license that can be found in the LICENSE file or at
|
||||||
* https://opensource.org/licenses/MIT.
|
* https://opensource.org/licenses/MIT.
|
||||||
*/
|
*/
|
||||||
package dev.msfjarvis.claw.android.ui.lists
|
package dev.msfjarvis.claw.android.ui.lists
|
||||||
|
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.Reply
|
||||||
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.produceState
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||||
import dev.msfjarvis.claw.common.posts.LobstersCard
|
import dev.msfjarvis.claw.common.posts.LobstersCard
|
||||||
import dev.msfjarvis.claw.common.posts.PostActions
|
import dev.msfjarvis.claw.common.posts.PostActions
|
||||||
import dev.msfjarvis.claw.database.local.SavedPost
|
import dev.msfjarvis.claw.database.local.SavedPost
|
||||||
|
import me.saket.swipe.SwipeAction
|
||||||
|
import me.saket.swipe.SwipeableActionsBox
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ListItem(
|
fun ListItem(
|
||||||
|
@ -22,10 +28,20 @@ fun ListItem(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
val saved by produceState(false, item) { value = isSaved(item) }
|
val saved by produceState(false, item) { value = isSaved(item) }
|
||||||
|
val commentsAction =
|
||||||
|
SwipeAction(
|
||||||
|
icon = rememberVectorPainter(Icons.Filled.Reply),
|
||||||
|
background = MaterialTheme.colorScheme.tertiary,
|
||||||
|
onSwipe = { postActions.viewCommentsPage(item.commentsUrl) },
|
||||||
|
)
|
||||||
|
SwipeableActionsBox(
|
||||||
|
endActions = listOf(commentsAction),
|
||||||
|
) {
|
||||||
LobstersCard(
|
LobstersCard(
|
||||||
post = item,
|
post = item,
|
||||||
isSaved = saved,
|
isSaved = saved,
|
||||||
postActions = postActions,
|
postActions = postActions,
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
)
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,8 @@
|
||||||
package dev.msfjarvis.claw.common.posts
|
package dev.msfjarvis.claw.common.posts
|
||||||
|
|
||||||
import androidx.compose.animation.Crossfade
|
import androidx.compose.animation.Crossfade
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.combinedClickable
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
@ -62,7 +60,6 @@ import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
|
||||||
fun LobstersCard(
|
fun LobstersCard(
|
||||||
post: SavedPost,
|
post: SavedPost,
|
||||||
isSaved: Boolean,
|
isSaved: Boolean,
|
||||||
|
@ -102,10 +99,9 @@ fun LobstersCard(
|
||||||
CommentsButton(
|
CommentsButton(
|
||||||
commentCount = post.commentCount,
|
commentCount = post.commentCount,
|
||||||
modifier =
|
modifier =
|
||||||
Modifier.combinedClickable(
|
Modifier.clickable(
|
||||||
role = Role.Button,
|
role = Role.Button,
|
||||||
onClick = { postActions.viewComments(post.shortId) },
|
onClick = { postActions.viewComments(post.shortId) },
|
||||||
onLongClick = { postActions.viewCommentsPage(post.commentsUrl) },
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,7 @@ sqldelight-extensions-coroutines = { module = "app.cash.sqldelight:coroutines-ex
|
||||||
sqldelight-jvmDriver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" }
|
sqldelight-jvmDriver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" }
|
||||||
sqldelight-primitiveAdapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqldelight" }
|
sqldelight-primitiveAdapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqldelight" }
|
||||||
sqlite-android = "com.github.requery:sqlite-android:3.42.0"
|
sqlite-android = "com.github.requery:sqlite-android:3.42.0"
|
||||||
|
swipe = "me.saket.swipe:swipe:1.2.0"
|
||||||
testparameterinjector = "com.google.testparameterinjector:test-parameter-injector:1.12"
|
testparameterinjector = "com.google.testparameterinjector:test-parameter-injector:1.12"
|
||||||
truth = "com.google.truth:truth:1.1.5"
|
truth = "com.google.truth:truth:1.1.5"
|
||||||
unfurl = "me.saket.unfurl:unfurl:1.7.0"
|
unfurl = "me.saket.unfurl:unfurl:1.7.0"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue