From 0083aa69b5c6118fd5e6bd4487b6c55a7263a2de Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 11 Dec 2022 12:13:06 +0530 Subject: [PATCH] refactor(common): optimize comment entry display --- .../claw/common/comments/CommentNode.kt | 54 +++++++++++++------ .../claw/common/comments/Comments.kt | 15 +++--- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentNode.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentNode.kt index 82cbabb7..7a99c020 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentNode.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/CommentNode.kt @@ -6,8 +6,8 @@ */ package dev.msfjarvis.claw.common.comments +import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.material3.Divider -import androidx.compose.runtime.Composable import dev.msfjarvis.claw.model.Comment data class CommentNode( @@ -40,22 +40,6 @@ fun createListNode(comments: List): MutableList { return commentNodes } -@Composable -fun DisplayListNode( - comments: List, - htmlConverter: HTMLConverter, - updateComments: (CommentNode) -> Unit, -) { - comments.forEach { - CommentEntry(commentNode = it, htmlConverter = htmlConverter, updateComments) - Divider() - - if (it.children.isNotEmpty()) { - DisplayListNode(comments = it.children, htmlConverter = htmlConverter, updateComments) - } - } -} - fun toggleAllExpanded(commentNode: CommentNode): CommentNode { commentNode.isExpanded = !commentNode.isExpanded @@ -64,3 +48,39 @@ fun toggleAllExpanded(commentNode: CommentNode): CommentNode { } return commentNode } + +fun LazyListScope.nodes( + nodes: List, + htmlConverter: HTMLConverter, + toggleExpanded: (CommentNode) -> Unit, +) { + nodes.forEach { node -> + node( + node = node, + htmlConverter = htmlConverter, + toggleExpanded = toggleExpanded, + ) + } +} + +fun LazyListScope.node( + node: CommentNode, + htmlConverter: HTMLConverter, + toggleExpanded: (CommentNode) -> Unit, +) { + item { + CommentEntry( + commentNode = node, + htmlConverter = htmlConverter, + toggleExpanded = toggleExpanded, + ) + Divider() + } + if (node.children.isNotEmpty()) { + nodes( + node.children, + htmlConverter = htmlConverter, + toggleExpanded = toggleExpanded, + ) + } +} diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt index 8a7a588c..442ddf2b 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/comments/Comments.kt @@ -59,19 +59,20 @@ private fun CommentsPageInternal( ) } - item { - DisplayListNode(comments = commentNodes, htmlConverter = htmlConverter) { node -> + nodes( + nodes = commentNodes, + htmlConverter = htmlConverter, + toggleExpanded = { node -> val newNode = toggleAllExpanded(node) + // TODO(anunaym14): make this search recursive val index = commentNodes.indexOf(commentNodes.find { it.comment.url == node.comment.url }) - if (index == -1) { - error("Failed to find node for comment: ${node.comment}") - } else { + if (index != -1) { commentNodes.removeAt(index) commentNodes.add(index, newNode) } - } - } + }, + ) } else { item { Text(