Skip to content

Commit 31e23d9

Browse files
committed
Update mermaid example
1 parent c5a9995 commit 31e23d9

File tree

1 file changed

+69
-52
lines changed

1 file changed

+69
-52
lines changed

Examples/ForceDirectedGraphExample/ForceDirectedGraphExample/MermaidVisualization.swift

Lines changed: 69 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,53 @@ import SwiftUI
99
import RegexBuilder
1010
import Grape
1111
import simd
12+
import Observation
1213

13-
struct MermaidVisualization: View {
14+
@Observable
15+
final class MermaidModel {
16+
var graphSyntax: String = """
17+
Alice → Bob
18+
Bob → Cindy
19+
Cindy → David
20+
David → Emily
21+
Emily → Frank
22+
Frank → Grace
23+
Grace → Henry
24+
Henry → Isabella
25+
Isabella → Jack
26+
Jack → Karen
27+
Karen → Liam
28+
Liam → Monica
29+
Monica → Nathan
30+
Nathan → Olivia
31+
Olivia → Peter
32+
Peter → Quinn
33+
Quinn → Rachel
34+
Rachel → Steve
35+
Steve → Tiffany
36+
Tiffany → Umar
37+
Umar → Violet
38+
Violet → William
39+
William → Xavier
40+
Xavier → Yolanda
41+
Yolanda → Zack
42+
Zack → Alice
43+
Jack -> Rachel
44+
Xavier -> José
45+
José -> アキラ
46+
アキラ -> Liam
47+
"""
48+
49+
var tappedNode: String? = nil
1450

15-
@State private var text: String = """
16-
Alice → Bob
17-
Bob → Cindy
18-
Cindy → David
19-
David → Emily
20-
Emily → Frank
21-
Frank → Grace
22-
Grace → Henry
23-
Henry → Isabella
24-
Isabella → Jack
25-
Jack → Karen
26-
Karen → Liam
27-
Liam → Monica
28-
Monica → Nathan
29-
Nathan → Olivia
30-
Olivia → Peter
31-
Peter → Quinn
32-
Quinn → Rachel
33-
Rachel → Steve
34-
Steve → Tiffany
35-
Tiffany → Umar
36-
Umar → Violet
37-
Violet → William
38-
William → Xavier
39-
Xavier → Yolanda
40-
Yolanda → Zack
41-
Zack → Alice
42-
Jack -> Rachel
43-
Xavier -> José
44-
José -> アキラ
45-
アキラ -> Liam
46-
"""
51+
var parsedGraph: ([String], [(String, String)]) {
52+
parseMermaid(graphSyntax)
53+
}
54+
}
55+
56+
struct MermaidVisualization: View {
4757

48-
@State private var tappedNode: String? = nil
58+
@State private var model: MermaidModel = .init()
4959

5060
// the view for label
5161
@ViewBuilder
@@ -70,13 +80,9 @@ struct MermaidVisualization: View {
7080
.padding()
7181
}
7282

73-
var parsedGraph: ([String], [(String, String)]) {
74-
parseMermaid(text)
75-
}
76-
7783
var body: some View {
84+
let parsedGraph = model.parsedGraph
7885
ForceDirectedGraph {
79-
8086
Series(parsedGraph.0) { node in
8187
NodeMark(id: node)
8288
.symbol(.circle)
@@ -105,29 +111,40 @@ struct MermaidVisualization: View {
105111
if let nodeID = proxy.locateNode(at: .init(x: value.x, y: value.y)) {
106112
guard let nodeID = nodeID as? String else { return }
107113
print(nodeID)
108-
tappedNode = nodeID
114+
model.tappedNode = nodeID
109115
}
110116
}
111117
})
112118
.ignoresSafeArea()
113119
#if !os(visionOS)
114120
.inspector(isPresented: .constant(true)) {
115-
VStack {
116-
Text("Tapped: \(tappedNode ?? "nil")")
117-
.font(.title2)
118-
119-
Divider()
120-
121-
Text("Edit the mermaid syntaxes to update the graph")
122-
.font(.title2)
123-
TextEditor(text: $text)
124-
.fontDesign(.monospaced)
125-
126-
}.padding(.top)
121+
MermaidInspector(model: model)
127122
}
128123
#endif
124+
}
125+
}
129126

127+
struct MermaidInspector: View {
128+
129+
@State var model: MermaidModel
130+
131+
init(model: MermaidModel) {
132+
self.model = model
133+
}
134+
135+
var body: some View {
136+
VStack {
137+
Text("Tapped: \(model.tappedNode ?? "nil")")
138+
.font(.title2)
139+
140+
Divider()
141+
142+
Text("Edit the mermaid syntaxes to update the graph")
143+
.font(.title2)
144+
TextEditor(text: $model.graphSyntax)
145+
.fontDesign(.monospaced)
130146

147+
}.padding(.top)
131148
}
132149
}
133150

0 commit comments

Comments
 (0)