11package com.squareup.workflow1.traceviewer.ui
22
3+ import androidx.compose.foundation.background
34import androidx.compose.foundation.border
45import androidx.compose.foundation.clickable
56import androidx.compose.foundation.layout.Arrangement
@@ -36,11 +37,11 @@ internal fun RenderDiagram(
3637 onNodeSelect : (Node ) -> Unit ,
3738 modifier : Modifier = Modifier
3839) {
39- var frames by remember { mutableStateOf<List <Node >>(emptyList()) }
4040 var isLoading by remember(traceFile) { mutableStateOf(true ) }
4141 var error by remember(traceFile) { mutableStateOf<Throwable ?>(null ) }
42- var mainTree by remember { mutableStateOf<Node ?>( null ) }
42+ var frames by remember { mutableStateOf<List < Node >>(emptyList() ) }
4343 var fullTree by remember { mutableStateOf<List <Node >>(emptyList()) }
44+ var affectedNodes by remember { mutableStateOf<List <Set <Node >>>(emptyList()) }
4445
4546 LaunchedEffect (traceFile) {
4647 val parseResult = parseTrace(traceFile)
@@ -52,8 +53,8 @@ internal fun RenderDiagram(
5253 is ParseResult .Success -> {
5354 val parsedFrames = parseResult.trace ? : emptyList()
5455 frames = parsedFrames
55- mainTree = parseResult.trees.first()
5656 fullTree = parseResult.trees
57+ affectedNodes = parseResult.affectedNodes
5758 onFileParse(parsedFrames)
5859 isLoading = false
5960 }
@@ -66,8 +67,8 @@ internal fun RenderDiagram(
6667 }
6768
6869 if (! isLoading) {
69- // DrawTree(frames[frameInd], onNodeSelect)
70- DrawTree (fullTree[frameInd], onNodeSelect)
70+ // DrawTree(frames[frameInd], affectedNodes[frameInd], onNodeSelect)
71+ DrawTree (fullTree[frameInd], affectedNodes[frameInd], onNodeSelect)
7172 }
7273}
7374
@@ -78,6 +79,7 @@ internal fun RenderDiagram(
7879@Composable
7980private fun DrawTree (
8081 node : Node ,
82+ affectedNodes : Set <Node >,
8183 onNodeSelect : (Node ) -> Unit ,
8284 modifier : Modifier = Modifier ,
8385) {
@@ -88,15 +90,16 @@ private fun DrawTree(
8890 .fillMaxSize(),
8991 horizontalAlignment = Alignment .CenterHorizontally ,
9092 ) {
91- DrawNode (node, onNodeSelect)
93+ val isAffected = affectedNodes.contains(node)
94+ DrawNode (node, isAffected, onNodeSelect)
9295
9396 // Draws the node's children recursively.
9497 Row (
9598 horizontalArrangement = Arrangement .Center ,
9699 verticalAlignment = Alignment .Top
97100 ) {
98101 node.children.forEach { childNode ->
99- DrawTree (childNode, onNodeSelect)
102+ DrawTree (childNode, affectedNodes, onNodeSelect)
100103 }
101104 }
102105 }
@@ -108,10 +111,12 @@ private fun DrawTree(
108111@Composable
109112private fun DrawNode (
110113 node : Node ,
114+ isAffected : Boolean ,
111115 onNodeSelect : (Node ) -> Unit ,
112116) {
113117 Box (
114118 modifier = Modifier
119+ .background(if (isAffected) Color .Green else Color .Transparent )
115120 .clickable {
116121 // Selecting a node will bubble back up to the main view to handle the selection
117122 onNodeSelect(node)
0 commit comments