Skip to content

Commit 01d588b

Browse files
Optimize frameworks/keyed/laminar
1 parent a853e6d commit 01d588b

File tree

8 files changed

+26
-26
lines changed

8 files changed

+26
-26
lines changed

frameworks/keyed/laminar/dist/assets/index-3ddc6d45.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

frameworks/keyed/laminar/dist/assets/index-3ddc6d45.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

frameworks/keyed/laminar/dist/assets/index-84d215d4.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/keyed/laminar/dist/assets/index-84d215d4.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frameworks/keyed/laminar/dist/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="UTF-8"/>
55
<link href="/css/currentStyle.css" rel="stylesheet"/>
66
<title>Laminar 16.0.0</title>
7-
<script type="module" crossorigin src="/frameworks/keyed/laminar/dist/assets/index-3ddc6d45.js"></script>
7+
<script type="module" crossorigin src="/frameworks/keyed/laminar/dist/assets/index-84d215d4.js"></script>
88
</head>
99
<body>
1010
<div id="main"></div>

frameworks/keyed/laminar/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"preview": "vite preview",
2424
"sourcemap-report": "node sourcemap-report.js"
2525
},
26-
"devDependencies" : {
26+
"devDependencies": {
2727
"@raquo/vite-plugin-glob-resolver": "^0.1.0",
2828
"@raquo/vite-plugin-import-side-effect": "^0.2.0",
2929
"@scala-js/vite-plugin-scalajs": "^1.0.0",
@@ -36,8 +36,8 @@
3636
"typescript": "^5.2.2",
3737
"vite": "^4.1.0"
3838
},
39-
"dependencies": {},
40-
"repository": {
39+
"dependencies": {},
40+
"repository": {
4141
"type": "git",
4242
"url": "https://github.com/krausest/js-framework-benchmark.git"
4343
}

frameworks/keyed/laminar/src/main/scala/app/JsApp.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ package app
33
import com.raquo.laminar.api.L.{*, given}
44
import org.scalajs.dom
55

6-
import scala.scalajs.js
7-
86
object JsApp:
97

8+
import com.raquo.airstream.split.DuplicateKeysConfig
9+
1010
def main(args: Array[String]): Unit =
1111
lazy val container = dom.document.getElementById("main")
1212
lazy val app = renderApp()
@@ -34,7 +34,7 @@ object JsApp:
3434
),
3535
table(cls := "table table-hover table-striped test-data",
3636
tbody(idAttr := "tbody",
37-
children <-- State.currentItems.split(_.id)(renderRow),
37+
children <-- State.currentItems.split(_.id, duplicateKeys = DuplicateKeysConfig.noWarnings)(renderRow),
3838
),
3939
),
4040
)
@@ -49,18 +49,18 @@ object JsApp:
4949

5050
private def renderRow(id: Int, item: Item, currentItem: Signal[Item]): HtmlElement =
5151
tr(cls.toggle("danger") <-- State.currentSelection.map(_.contains(id)),
52-
td(cls := "col-md-1", idAttr := id.text,
52+
td(cls := "col-md-1",
5353
id.text,
5454
),
5555
td(cls := "col-md-4",
5656
a(cls := "lbl",
57-
onClick.preventDefault.mapTo(Command.SelectRow(id)) --> State.commandObserver,
57+
onClick.mapTo(Command.SelectRow(id)) --> State.commandObserver,
5858
child.text <-- currentItem.map(_.label),
5959
),
6060
),
6161
td(cls := "col-md-1",
6262
a(cls := "remove",
63-
onClick.preventDefault.mapTo(Command.DeleteRow(id)) --> State.commandObserver,
63+
onClick.mapTo(Command.DeleteRow(id)) --> State.commandObserver,
6464
span(cls := "remove glyphicon glyphicon-remove", dataAttr("aria-hidden") := "true"),
6565
),
6666
),

frameworks/keyed/laminar/src/main/scala/app/app.scala

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,29 @@ object State:
3333
case Set1kRows => items.set(Vector.fill(1000)(generateItem()))
3434
case Set10kRows => items.set(Vector.fill(10000)(generateItem()))
3535
case Add1kRows => items.update(_ ++ Vector.fill(1000)(generateItem()))
36-
case UpdateEvery10thRow => items.update(_.zipWithIndex.map:
37-
case (item, index) if index % 10 == 0 => item.copy(label = item.label + " !!!")
38-
case (item, _) => item
39-
)
36+
case UpdateEvery10thRow => items.update: items =>
37+
(items.indices by 10).foldLeft(items): (items, i) =>
38+
val item = items(i)
39+
items.updated(i, item.copy(label = item.label + " !!!"))
4040
case DeleteAllRows => items.set(Vector.empty)
41-
case SwapTwoRows => items.update:
42-
case items if items.length > 998 => items.updated(1, items(998)).updated(998, items(1))
43-
case items => items
44-
case DeleteRow(id) => items.update(_.filterNot(_.id == id))
41+
case SwapTwoRows => items.update: items =>
42+
if items.length >= 999 then items.updated(1, items(998)).updated(998, items(1)) else items
43+
case DeleteRow(id) => items.update: items =>
44+
val index = items.indexWhere(_.id == id)
45+
if index != -1 then items.patch(index, Nil, 1) else items
4546
case SelectRow(id) => selection.set(Some(id))
4647

4748
end State
4849

4950
object Data:
5051

5152
import scala.collection.immutable.ArraySeq
53+
import scala.util.Random
5254

5355
def generateLabel(): String =
54-
import scala.util.Random
55-
56-
val adjective = adjectives(Random.nextInt(adjectives.length))
57-
val colour = colours(Random.nextInt(colours.length))
58-
val noun = nouns(Random.nextInt(nouns.length))
56+
inline def adjective = adjectives(Random.nextInt(adjectives.length))
57+
inline def colour = colours(Random.nextInt(colours.length))
58+
inline def noun = nouns(Random.nextInt(nouns.length))
5959

6060
s"$adjective $colour $noun"
6161

0 commit comments

Comments
 (0)