refactor: make PostComments non-nullable

This commit is contained in:
Harsh Shandilya 2024-08-21 13:37:12 +05:30
parent c50790e4f9
commit 39e3d783cd
4 changed files with 14 additions and 9 deletions

View file

@ -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 * 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.
@ -22,7 +22,10 @@ constructor(
) { ) {
suspend fun getSeenComments(postId: String) = 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>) { suspend fun markSeenComments(postId: String, comments: List<Comment>) {
withContext(dbDispatcher) { withContext(dbDispatcher) {

View file

@ -38,10 +38,10 @@ internal data class CommentNode(
internal fun createListNode( internal fun createListNode(
comments: List<Comment>, comments: List<Comment>,
commentState: PostComments?, commentState: PostComments,
): MutableList<CommentNode> { ): MutableList<CommentNode> {
val commentNodes = mutableListOf<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) { for (i in comments.indices) {
if (comments[i].parentComment == null) { if (comments[i].parentComment == null) {

View file

@ -32,7 +32,7 @@ fun CommentsPage(
postId: String, postId: String,
postActions: PostActions, postActions: PostActions,
htmlConverter: HTMLConverter, htmlConverter: HTMLConverter,
getSeenComments: suspend (String) -> PostComments?, getSeenComments: suspend (String) -> PostComments,
markSeenComments: (String, List<Comment>) -> Unit, markSeenComments: (String, List<Comment>) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
openUserProfile: (String) -> Unit, openUserProfile: (String) -> Unit,
@ -46,7 +46,9 @@ fun CommentsPage(
) )
} }
val commentState by val commentState by
produceState<PostComments?>(initialValue = null) { value = getSeenComments(postId) } produceState(initialValue = PostComments(postId, emptyList())) {
value = getSeenComments(postId)
}
when (postDetails) { when (postDetails) {
is Success<*> -> { is Success<*> -> {

View file

@ -49,7 +49,7 @@ internal fun CommentsPageInternal(
details: UIPost, details: UIPost,
postActions: PostActions, postActions: PostActions,
htmlConverter: HTMLConverter, htmlConverter: HTMLConverter,
commentState: PostComments?, commentState: PostComments,
markSeenComments: (String, List<Comment>) -> Unit, markSeenComments: (String, List<Comment>) -> Unit,
openUserProfile: (String) -> Unit, openUserProfile: (String) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
@ -57,8 +57,8 @@ internal fun CommentsPageInternal(
val context = LocalContext.current val context = LocalContext.current
val commentNodes = createListNode(details.comments, commentState) val commentNodes = createListNode(details.comments, commentState)
LaunchedEffect(key1 = commentNodes) { LaunchedEffect(key1 = commentNodes) {
if (details.comments.isNotEmpty() && !commentState?.commentIds.isNullOrEmpty()) { if (details.comments.isNotEmpty() && commentState.commentIds.isNotEmpty()) {
val unreadCount = details.comments.size - (commentState?.commentIds?.size ?: 0) val unreadCount = details.comments.size - commentState.commentIds.size
if (unreadCount > 0) { if (unreadCount > 0) {
val text = "$unreadCount unread comments" val text = "$unreadCount unread comments"
Toast.makeText(context, text, Toast.LENGTH_SHORT).show() Toast.makeText(context, text, Toast.LENGTH_SHORT).show()