refactor: make PostComments non-nullable
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright © 2021-2023 Harsh Shandilya.
|
||||
* Copyright © 2021-2024 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.
|
||||
@@ -22,7 +22,10 @@ constructor(
|
||||
) {
|
||||
|
||||
suspend fun getSeenComments(postId: String) =
|
||||
withContext(dbDispatcher) { postCommentsQueries.getCommentIds(postId).executeAsOneOrNull() }
|
||||
withContext(dbDispatcher) {
|
||||
postCommentsQueries.getCommentIds(postId).executeAsOneOrNull()
|
||||
?: PostComments(postId = postId, commentIds = emptyList())
|
||||
}
|
||||
|
||||
suspend fun markSeenComments(postId: String, comments: List<Comment>) {
|
||||
withContext(dbDispatcher) {
|
||||
|
||||
@@ -38,10 +38,10 @@ internal data class CommentNode(
|
||||
|
||||
internal fun createListNode(
|
||||
comments: List<Comment>,
|
||||
commentState: PostComments?,
|
||||
commentState: PostComments,
|
||||
): MutableList<CommentNode> {
|
||||
val commentNodes = mutableListOf<CommentNode>()
|
||||
val isUnread = { id: String -> commentState?.commentIds?.contains(id) == false }
|
||||
val isUnread = { id: String -> !commentState.commentIds.contains(id) }
|
||||
|
||||
for (i in comments.indices) {
|
||||
if (comments[i].parentComment == null) {
|
||||
|
||||
@@ -32,7 +32,7 @@ fun CommentsPage(
|
||||
postId: String,
|
||||
postActions: PostActions,
|
||||
htmlConverter: HTMLConverter,
|
||||
getSeenComments: suspend (String) -> PostComments?,
|
||||
getSeenComments: suspend (String) -> PostComments,
|
||||
markSeenComments: (String, List<Comment>) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
openUserProfile: (String) -> Unit,
|
||||
@@ -46,7 +46,9 @@ fun CommentsPage(
|
||||
)
|
||||
}
|
||||
val commentState by
|
||||
produceState<PostComments?>(initialValue = null) { value = getSeenComments(postId) }
|
||||
produceState(initialValue = PostComments(postId, emptyList())) {
|
||||
value = getSeenComments(postId)
|
||||
}
|
||||
|
||||
when (postDetails) {
|
||||
is Success<*> -> {
|
||||
|
||||
@@ -49,7 +49,7 @@ internal fun CommentsPageInternal(
|
||||
details: UIPost,
|
||||
postActions: PostActions,
|
||||
htmlConverter: HTMLConverter,
|
||||
commentState: PostComments?,
|
||||
commentState: PostComments,
|
||||
markSeenComments: (String, List<Comment>) -> Unit,
|
||||
openUserProfile: (String) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
@@ -57,8 +57,8 @@ internal fun CommentsPageInternal(
|
||||
val context = LocalContext.current
|
||||
val commentNodes = createListNode(details.comments, commentState)
|
||||
LaunchedEffect(key1 = commentNodes) {
|
||||
if (details.comments.isNotEmpty() && !commentState?.commentIds.isNullOrEmpty()) {
|
||||
val unreadCount = details.comments.size - (commentState?.commentIds?.size ?: 0)
|
||||
if (details.comments.isNotEmpty() && commentState.commentIds.isNotEmpty()) {
|
||||
val unreadCount = details.comments.size - commentState.commentIds.size
|
||||
if (unreadCount > 0) {
|
||||
val text = "$unreadCount unread comments"
|
||||
Toast.makeText(context, text, Toast.LENGTH_SHORT).show()
|
||||
|
||||
Reference in New Issue
Block a user