Skip to content

Commit

Permalink
Update Tree component to support expanded state in onClick
Browse files Browse the repository at this point in the history
Modified the Tree component and TreeBuilder to include the expanded state as a parameter in the onClick callbacks. This allows nodes to differentiate actions based on their expanded or collapsed state, improving interactivity in the TreeView. Updated sample usage in TreeViewScreen to reflect these changes.
  • Loading branch information
kdroidFilter committed Dec 10, 2024
1 parent f5d6d72 commit e47371f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 15 deletions.
20 changes: 10 additions & 10 deletions fluent/src/commonMain/kotlin/com/konyaco/fluent/component/Tree.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ sealed class TreeElement<T> {
abstract val id: Any
abstract val children: List<TreeElement<T>>
abstract val depth: Int
abstract val onClick: (() -> Unit)?
abstract val onClick: ((Boolean) -> Unit)?
val isLeaf: Boolean get() = children.isEmpty()

data class Leaf<T>(
override val data: T,
override val id: Any,
override val depth: Int,
override val onClick: (() -> Unit)?
override val onClick: ((Boolean) -> Unit)?
) : TreeElement<T>() {
override val children: List<TreeElement<T>> = emptyList()
}
Expand All @@ -56,7 +56,7 @@ sealed class TreeElement<T> {
override val id: Any,
override val depth: Int,
override val children: List<TreeElement<T>>,
override val onClick: (() -> Unit)?
override val onClick: ((Boolean) -> Unit)?
) : TreeElement<T>()
}

Expand All @@ -69,13 +69,13 @@ fun <T> buildTree(block: TreeBuilder<T>.() -> Unit): Tree<T> {
class TreeBuilder<T> {
private val elements = mutableListOf<BuilderElement<T>>()

fun node(data: T, id: Any = data.toString(), onClick: (() -> Unit)? = null, children: NodeBuilder<T>.() -> Unit) {
fun node(data: T, id: Any = data.toString(), onClick: ((Boolean) -> Unit)? = null, children: NodeBuilder<T>.() -> Unit) {
val childBuilder = NodeBuilder<T>(0)
childBuilder.children()
elements.add(BuilderElement.Node(data, id, onClick, childBuilder.elements, 0))
}

fun leaf(data: T, id: Any = data.toString(), onClick: (() -> Unit)? = null) {
fun leaf(data: T, id: Any = data.toString(), onClick: ((Boolean) -> Unit)? = null) {
elements.add(BuilderElement.Leaf(data, id, onClick, 0))
}

Expand All @@ -84,7 +84,7 @@ class TreeBuilder<T> {
sealed class BuilderElement<T> {
abstract fun buildElement(depth: Int): TreeElement<T>

data class Leaf<T>(val data: T, val id: Any, val onClick: (() -> Unit)?, val depthInit: Int) : BuilderElement<T>() {
data class Leaf<T>(val data: T, val id: Any, val onClick: ((Boolean) -> Unit)?, val depthInit: Int) : BuilderElement<T>() {
override fun buildElement(depth: Int): TreeElement<T> {
return TreeElement.Leaf(data, id, depth, onClick)
}
Expand All @@ -93,7 +93,7 @@ class TreeBuilder<T> {
data class Node<T>(
val data: T,
val id: Any,
val onClick: (() -> Unit)?,
val onClick: ((Boolean) -> Unit)?,
val children: List<BuilderElement<T>>,
val depthInit: Int
) : BuilderElement<T>() {
Expand All @@ -108,13 +108,13 @@ class TreeBuilder<T> {
class NodeBuilder<T>(private val parentDepth: Int) {
internal val elements = mutableListOf<TreeBuilder.BuilderElement<T>>()

fun node(data: T, id: Any = data.toString(), onClick: (() -> Unit)? = null, children: NodeBuilder<T>.() -> Unit) {
fun node(data: T, id: Any = data.toString(), onClick: ((Boolean) -> Unit)? = null, children: NodeBuilder<T>.() -> Unit) {
val childBuilder = NodeBuilder<T>(parentDepth + 1)
childBuilder.children()
elements.add(TreeBuilder.BuilderElement.Node(data, id, onClick, childBuilder.elements, parentDepth + 1))
}

fun leaf(data: T, id: Any = data.toString(), onClick: (() -> Unit)? = null) {
fun leaf(data: T, id: Any = data.toString(), onClick: ((Boolean) -> Unit)? = null) {
elements.add(TreeBuilder.BuilderElement.Leaf(data, id, onClick, parentDepth + 1))
}
}
Expand Down Expand Up @@ -210,7 +210,7 @@ fun <T> TreeElementView(
colors = colors,
onClick = {
if (isNode) expandedState!!.value = !expandedState.value
element.onClick?.invoke()
element.onClick?.invoke(expandedState?.value ?: false)
}
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,23 @@ fun TreeViewScreen() {
fun TreeViewSample() {
val tree = remember {
buildTree {
node(data = "Root", onClick = { println("Root clicked") }) {
node("Folder 1") {
leaf(data = "File 1-1", onClick = { println("File 1-1 clicked") })
node(data = "Root", onClick = { isExpanded ->
println("Root clicked, expanded: $isExpanded")
}) {
node("Folder 1", onClick = { isExpanded ->
println("Folder 1 clicked, expanded: $isExpanded")
}) {
leaf(data = "File 1-1", onClick = { _ -> println("File 1-1 clicked") })
leaf("File 1-2")
node("Folder 1-3") {
node("Folder 1-3", onClick = { isExpanded ->
println("Folder 1-3 clicked, expanded: $isExpanded")
}) {
leaf("File 1-3-1")
}
}
node("Folder 2") {
node("Folder 2", onClick = { isExpanded ->
println("Folder 2 clicked, expanded: $isExpanded")
}) {
leaf("File 2-1")
}
}
Expand All @@ -58,3 +66,4 @@ fun TreeViewSample() {
modifier = Modifier.fillMaxWidth()
)
}

0 comments on commit e47371f

Please sign in to comment.