Skip to content

Commit eceef59

Browse files
committed
Fix PR comments
1 parent 841fee2 commit eceef59

File tree

9 files changed

+39
-30
lines changed

9 files changed

+39
-30
lines changed

gradle/libs.versions.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ google-material = "1.4.0"
5151

5252
groovy = "3.0.9"
5353
jUnit = "4.13.2"
54-
junitJupiter = "5.10.1"
5554
java-diff-utils = "4.12"
5655
javaParser = "3.24.0"
5756
jetbrains-compose-plugin = "1.7.3"
@@ -206,7 +205,6 @@ java-diff-utils = { module = "io.github.java-diff-utils:java-diff-utils", versio
206205
jetbrains-annotations = "org.jetbrains:annotations:24.0.1"
207206

208207
junit = { module = "junit:junit", version.ref = "jUnit" }
209-
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junitJupiter" }
210208

211209
kgx = { module = "com.rickbusarow.kgx:kotlin-gradle-extensions", version.ref = "kgx" }
212210

workflow-trace-viewer/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ kotlin {
3131
dependencies {
3232
implementation(kotlin("test"))
3333
implementation(kotlin("test-junit5"))
34-
implementation(libs.junit.jupiter)
3534
}
3635
}
3736
}

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/App.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ import androidx.compose.runtime.mutableIntStateOf
99
import androidx.compose.runtime.mutableStateOf
1010
import androidx.compose.runtime.remember
1111
import androidx.compose.runtime.setValue
12+
import androidx.compose.runtime.snapshotFlow
1213
import androidx.compose.ui.Alignment
1314
import androidx.compose.ui.Modifier
1415
import androidx.compose.ui.geometry.Offset
1516
import com.squareup.workflow1.traceviewer.model.Node
16-
import com.squareup.workflow1.traceviewer.model.NodeDiff
17+
import com.squareup.workflow1.traceviewer.model.NodeUpdate
1718
import com.squareup.workflow1.traceviewer.ui.FrameSelectTab
1819
import com.squareup.workflow1.traceviewer.ui.RenderDiagram
1920
import com.squareup.workflow1.traceviewer.ui.RightInfoPanel
@@ -29,13 +30,15 @@ public fun App(
2930
modifier: Modifier = Modifier
3031
) {
3132
var selectedTraceFile by remember { mutableStateOf<PlatformFile?>(null) }
32-
var selectedNode by remember { mutableStateOf<NodeDiff?>(null) }
33+
var selectedNode by remember { mutableStateOf<NodeUpdate?>(null) }
3334
var workflowFrames by remember { mutableStateOf<List<Node>>(emptyList()) }
3435
var frameIndex by remember { mutableIntStateOf(0) }
3536
val sandboxState = remember { SandboxState() }
3637

37-
LaunchedEffect(frameIndex) {
38-
sandboxState.reset()
38+
LaunchedEffect(sandboxState) {
39+
snapshotFlow { frameIndex }.collect {
40+
sandboxState.reset()
41+
}
3942
}
4043

4144
Box(
@@ -51,7 +54,7 @@ public fun App(
5154
frameInd = frameIndex,
5255
onFileParse = { workflowFrames = it },
5356
onNodeSelect = { node, prevNode ->
54-
selectedNode = NodeDiff(node, prevNode)
57+
selectedNode = NodeUpdate(node, prevNode)
5558
}
5659
)
5760
}

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/model/Node.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.squareup.workflow1.traceviewer.model
22

3+
import com.squareup.moshi.Json
4+
35
/**
46
* Since the logic of Workflow is hierarchical (where each workflow may have parent workflows and/or
57
* children workflows, a tree structure is most appropriate for representing the data rather than
@@ -15,7 +17,7 @@ internal data class Node(
1517
val props: String,
1618
val state: String,
1719
val rendering: String = "",
18-
val children: List<Node>,
20+
@Transient val children: LinkedHashMap<String, Node> = LinkedHashMap()
1921
) {
2022

2123
override fun toString(): String {
@@ -50,9 +52,9 @@ internal data class Node(
5052
}
5153

5254
internal fun Node.addChild(child: Node): Node {
53-
return copy(children = this.children + child)
55+
return copy(children = (this.children.plus(child.id to child) as LinkedHashMap<String, Node>))
5456
}
5557

5658
internal fun Node.replaceChild(child: Node): Node {
57-
return copy(children = this.children.map { if (it.id == child.id) child else it })
59+
return copy(children = (this.children.plus(child.id to child) as LinkedHashMap<String, Node>))
5860
}

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/model/NodeDiff.kt renamed to workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/model/NodeUpdate.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package com.squareup.workflow1.traceviewer.model
66
*
77
* If it's the first node in the frame, [previous] will be null and there is no difference to show.
88
*/
9-
internal class NodeDiff(
9+
internal class NodeUpdate(
1010
val current: Node,
1111
val previous: Node?,
1212
)

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/ui/WorkflowInfoPanel.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import androidx.compose.ui.text.font.FontStyle
3434
import androidx.compose.ui.text.font.FontWeight
3535
import androidx.compose.ui.unit.dp
3636
import com.squareup.workflow1.traceviewer.model.Node
37-
import com.squareup.workflow1.traceviewer.model.NodeDiff
37+
import com.squareup.workflow1.traceviewer.model.NodeUpdate
3838

3939
/**
4040
* A panel that displays information about the selected workflow node.
@@ -44,7 +44,7 @@ import com.squareup.workflow1.traceviewer.model.NodeDiff
4444
*/
4545
@Composable
4646
internal fun RightInfoPanel(
47-
selectedNode: NodeDiff?,
47+
selectedNode: NodeUpdate?,
4848
modifier: Modifier = Modifier
4949
) {
5050
Row(
@@ -80,7 +80,7 @@ internal fun RightInfoPanel(
8080
*/
8181
@Composable
8282
private fun NodePanelDetails(
83-
node: NodeDiff?,
83+
node: NodeUpdate?,
8484
modifier: Modifier = Modifier
8585
) {
8686
LazyColumn(

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/ui/WorkflowTree.kt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ import androidx.compose.material.Text
1313
import androidx.compose.runtime.Composable
1414
import androidx.compose.runtime.LaunchedEffect
1515
import androidx.compose.runtime.getValue
16+
import androidx.compose.runtime.mutableStateListOf
1617
import androidx.compose.runtime.mutableStateOf
1718
import androidx.compose.runtime.remember
1819
import androidx.compose.runtime.setValue
20+
import androidx.compose.runtime.snapshots.SnapshotStateList
1921
import androidx.compose.ui.Alignment
2022
import androidx.compose.ui.Modifier
2123
import androidx.compose.ui.graphics.Color
@@ -39,9 +41,9 @@ internal fun RenderDiagram(
3941
) {
4042
var isLoading by remember(traceFile) { mutableStateOf(true) }
4143
var error by remember(traceFile) { mutableStateOf<Throwable?>(null) }
42-
var frames by remember { mutableStateOf<List<Node>>(emptyList()) }
43-
var fullTree by remember { mutableStateOf<List<Node>>(emptyList()) }
44-
var affectedNodes by remember { mutableStateOf<List<Set<Node>>>(emptyList()) }
44+
var frames = remember { mutableStateListOf<Node>() }
45+
var fullTree = remember { mutableStateListOf<Node>() }
46+
var affectedNodes = remember { mutableStateListOf<Set<Node>>() }
4547

4648
LaunchedEffect(traceFile) {
4749
val parseResult = parseTrace(traceFile)
@@ -52,9 +54,9 @@ internal fun RenderDiagram(
5254
}
5355
is ParseResult.Success -> {
5456
val parsedFrames = parseResult.trace ?: emptyList()
55-
frames = parsedFrames
56-
fullTree = parseResult.trees
57-
affectedNodes = parseResult.affectedNodes
57+
frames.addAll(parsedFrames)
58+
fullTree.addAll(parseResult.trees)
59+
affectedNodes.addAll(parseResult.affectedNodes)
5860
onFileParse(parsedFrames)
5961
isLoading = false
6062
}
@@ -104,8 +106,8 @@ private fun DrawTree(
104106
In the edge case that the current frame has additional children compared to the previous
105107
frame, we replace with null and will check before next recursive call.
106108
*/
107-
node.children.forEachIndexed { index, childNode ->
108-
val prevChildNode = previousNode?.children?.getOrNull(index)
109+
node.children.forEach { (index, childNode) ->
110+
val prevChildNode = previousNode?.children?.get(index)
109111
DrawTree(childNode, prevChildNode, affectedNodes, onNodeSelect)
110112
}
111113
}

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/util/JsonParser.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.squareup.workflow1.traceviewer.model.addChild
99
import com.squareup.workflow1.traceviewer.model.replaceChild
1010
import io.github.vinceglb.filekit.PlatformFile
1111
import io.github.vinceglb.filekit.readString
12+
import java.util.LinkedHashMap
1213

1314
/*
1415
The root workflow Node uses an ID of 0, and since we are filtering childrenByParent by the
@@ -77,14 +78,15 @@ private fun getFrameFromRenderPass(renderPass: List<Node>): Node {
7778
*/
7879
private fun buildTree(node: Node, childrenByParent: Map<String, List<Node>>): Node {
7980
val children = (childrenByParent[node.id] ?: emptyList())
81+
.map { buildTree(it, childrenByParent) }
8082
return Node(
8183
name = node.name,
8284
id = node.id,
8385
parent = node.parent,
8486
parentId = node.parentId,
8587
props = node.props,
8688
state = node.state,
87-
children = children.map { buildTree(it, childrenByParent) },
89+
children = LinkedHashMap(children.associateBy { it.id }),
8890
)
8991
}
9092

@@ -99,14 +101,12 @@ internal fun mergeFrameIntoMainTree(
99101
frame: Node,
100102
main: Node
101103
): Node {
102-
if (frame.id != main.id) {
103-
throw IllegalArgumentException("Frame root ID does not match main tree root ID.")
104-
}
104+
require(frame.id == main.id)
105105

106106
val updatedNode = frame.copy(children = main.children)
107107

108-
return frame.children.fold(updatedNode) { mergedTree, frameChild ->
109-
val mainTreeChild = mergedTree.children.singleOrNull { it.id == frameChild.id }
108+
return frame.children.values.fold(updatedNode) { mergedTree, frameChild ->
109+
val mainTreeChild = mergedTree.children[frameChild.id]
110110
if (mainTreeChild != null) {
111111
mergedTree.replaceChild(mergeFrameIntoMainTree(frameChild, mainTreeChild))
112112
} else {

workflow-trace-viewer/src/jvmMain/kotlin/com/squareup/workflow1/traceviewer/util/SandboxBackground.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,13 @@ internal fun SandboxBackground(
4242
val event = awaitPointerEvent()
4343
if (event.type == PointerEventType.Scroll) {
4444
val scrollDelta = event.changes.first().scrollDelta.y
45+
// Applies zoom factor based on the actual delta change rather than just the act of scrolling
46+
// This helps to normalize mouse scrolling and touchpad scrolling, since touchpad will
47+
// fire a lot more scroll events.
4548
val factor = 1f + (-scrollDelta * 0.1f)
46-
sandboxState.scale = (sandboxState.scale * factor).coerceIn(0.1f, 10f)
49+
val minWindowSize = 0.1f
50+
val maxWindowSize = 10f
51+
sandboxState.scale = (sandboxState.scale * factor).coerceIn(minWindowSize, maxWindowSize)
4752
event.changes.forEach { it.consume() }
4853
}
4954
}

0 commit comments

Comments
 (0)