Skip to content

Commit 6ee1bd4

Browse files
Added tree example
1 parent f410598 commit 6ee1bd4

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

src/main/resources/main.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,14 @@
108108
#radar .label {
109109
float: right;
110110
}
111+
112+
/*Tree*/
113+
114+
#tree circle {
115+
stroke: #003366;
116+
fill: #dddddd;
117+
}
118+
#tree path {
119+
stroke: #336699;
120+
fill: none;
121+
}

src/main/scala/demo/components/toplevel.scala

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import panel._
77
import logo._
88
import piechart._
99
import radar._
10+
import tree._
1011

1112

1213
object toplevel {
@@ -27,6 +28,20 @@ object toplevel {
2728
Pokemon("Blastoise", 79, 83, 100, 85, 105, 78),
2829
Pokemon("Butterfree", 60, 45, 50, 90, 80, 70)
2930
)
31+
val tree = Duck("Grandma", List(
32+
Duck("Eider", List(
33+
Duck("Fethry"), Duck("Abner")
34+
)),
35+
Duck("Daphne", List(
36+
Duck("Gladstone")
37+
)),
38+
Duck("Quackmore", List(
39+
Duck("Donald"),
40+
Duck("Della", List(
41+
Duck("Huey"), Duck("Dewey"), Duck("Louie")
42+
))
43+
))
44+
))
3045

3146
val TopLevel = ReactComponentB[Unit]("Top level component")
3247
.render(_ =>
@@ -43,6 +58,13 @@ object toplevel {
4358
title = "Radar Chart",
4459
text = "Here is a radar chart showing Pokémon stats. Try changing Pokémon."
4560
), RadarChart(pokemons))
61+
),
62+
div(className := "row",
63+
Panel(PanelContent(
64+
id = Some("tree"),
65+
title = "Tree Chart",
66+
text = "Here is part of the duck family tree."
67+
), TreeChart(tree))
4668
)
4769
)
4870
)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package demo.components
2+
3+
import scala.scalajs.js
4+
import japgolly.scalajs.react._
5+
import japgolly.scalajs.react.vdom.all.key
6+
import japgolly.scalajs.react.vdom.svg.all._
7+
import paths.high.Tree
8+
9+
import demo.colors._
10+
11+
12+
object tree {
13+
case class Duck(name: String, descendants: List[Duck] = List())
14+
private def move(p: js.Array[Double]) = s"translate(${ p(0) },${ p(1) })"
15+
private def isLeaf(duck: Duck) = duck.descendants.length == 0
16+
17+
val TreeChart = ReactComponentB[Duck]("Pie chart")
18+
.render(ducks => {
19+
val tree = Tree[Duck](
20+
data = ducks,
21+
children = _.descendants,
22+
width = 300,
23+
height = 300
24+
)
25+
26+
val branches = tree.curves map { curve =>
27+
path(d := curve.connector.path.print)
28+
}
29+
val nodes = tree.nodes map { node =>
30+
g(transform := move(node.point),
31+
circle(r := 5, cx := 0, cy := 0),
32+
text(
33+
transform := (if (isLeaf(node.item)) "translate(10,0)" else "translate(-10,0)"),
34+
textAnchor := (if (isLeaf(node.item)) "start" else "end"),
35+
node.item.name
36+
)
37+
)
38+
}
39+
40+
svg(width := 460, height := 400,
41+
g(transform := "translate(80,50)",
42+
branches,
43+
nodes
44+
)
45+
)
46+
})
47+
.build
48+
}

0 commit comments

Comments
 (0)