scalive/core/src/TestLiveView.scala

38 lines
875 B
Scala
Raw Normal View History

2025-08-17 22:52:22 +02:00
import scalive.*
final case class MyModel(
cls: String = "text-xs",
bool: Boolean = true,
elems: List[Elem] = List.empty)
2025-08-17 22:52:22 +02:00
final case class Elem(name: String, age: Int)
2025-08-27 02:28:22 +02:00
class TestView(initialModel: MyModel) extends LiveView[String, TestView.Event]:
import TestView.Event.*
2025-08-17 22:52:22 +02:00
private val modelVar = Var[MyModel](initialModel)
2025-08-17 22:52:22 +02:00
2025-08-27 02:28:22 +02:00
override def handleServerEvent(e: TestView.Event): Unit =
e match
case UpdateModel(f) => modelVar.update(f)
2025-08-17 22:52:22 +02:00
val el: HtmlElement =
2025-08-17 22:52:22 +02:00
div(
idAttr := "42",
cls := modelVar(_.cls),
disabled := modelVar(_.bool),
2025-08-17 22:52:22 +02:00
ul(
modelVar(_.elems).splitByIndex((_, elem) =>
2025-08-17 22:52:22 +02:00
li(
"Nom: ",
elem(_.name),
" Age: ",
elem(_.age.toString)
)
)
)
)
object TestView:
2025-08-27 02:28:22 +02:00
enum Event:
case UpdateModel(f: MyModel => MyModel)