1
1
package com.squareup.workflow1.traceviewer.ui
2
2
3
+ import androidx.compose.foundation.background
3
4
import androidx.compose.foundation.border
4
5
import androidx.compose.foundation.clickable
5
6
import androidx.compose.foundation.layout.Arrangement
@@ -36,11 +37,11 @@ internal fun RenderDiagram(
36
37
onNodeSelect : (Node ) -> Unit ,
37
38
modifier : Modifier = Modifier
38
39
) {
39
- var frames by remember { mutableStateOf<List <Node >>(emptyList()) }
40
40
var isLoading by remember(traceFile) { mutableStateOf(true ) }
41
41
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() ) }
43
43
var fullTree by remember { mutableStateOf<List <Node >>(emptyList()) }
44
+ var affectedNodes by remember { mutableStateOf<List <Set <Node >>>(emptyList()) }
44
45
45
46
LaunchedEffect (traceFile) {
46
47
val parseResult = parseTrace(traceFile)
@@ -52,8 +53,8 @@ internal fun RenderDiagram(
52
53
is ParseResult .Success -> {
53
54
val parsedFrames = parseResult.trace ? : emptyList()
54
55
frames = parsedFrames
55
- mainTree = parseResult.trees.first()
56
56
fullTree = parseResult.trees
57
+ affectedNodes = parseResult.affectedNodes
57
58
onFileParse(parsedFrames)
58
59
isLoading = false
59
60
}
@@ -66,8 +67,8 @@ internal fun RenderDiagram(
66
67
}
67
68
68
69
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)
71
72
}
72
73
}
73
74
@@ -78,6 +79,7 @@ internal fun RenderDiagram(
78
79
@Composable
79
80
private fun DrawTree (
80
81
node : Node ,
82
+ affectedNodes : Set <Node >,
81
83
onNodeSelect : (Node ) -> Unit ,
82
84
modifier : Modifier = Modifier ,
83
85
) {
@@ -88,15 +90,16 @@ private fun DrawTree(
88
90
.fillMaxSize(),
89
91
horizontalAlignment = Alignment .CenterHorizontally ,
90
92
) {
91
- DrawNode (node, onNodeSelect)
93
+ val isAffected = affectedNodes.contains(node)
94
+ DrawNode (node, isAffected, onNodeSelect)
92
95
93
96
// Draws the node's children recursively.
94
97
Row (
95
98
horizontalArrangement = Arrangement .Center ,
96
99
verticalAlignment = Alignment .Top
97
100
) {
98
101
node.children.forEach { childNode ->
99
- DrawTree (childNode, onNodeSelect)
102
+ DrawTree (childNode, affectedNodes, onNodeSelect)
100
103
}
101
104
}
102
105
}
@@ -108,10 +111,12 @@ private fun DrawTree(
108
111
@Composable
109
112
private fun DrawNode (
110
113
node : Node ,
114
+ isAffected : Boolean ,
111
115
onNodeSelect : (Node ) -> Unit ,
112
116
) {
113
117
Box (
114
118
modifier = Modifier
119
+ .background(if (isAffected) Color .Green else Color .Transparent )
115
120
.clickable {
116
121
// Selecting a node will bubble back up to the main view to handle the selection
117
122
onNodeSelect(node)
0 commit comments