scalive/core/src/TestLiveView.scala

38 lines
850 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)
class TestView(initialModel: MyModel) extends LiveView[TestView.Cmd]:
2025-08-17 22:52:22 +02:00
import TestView.Cmd.*
private val modelVar = Var[MyModel](initialModel)
2025-08-17 22:52:22 +02:00
def handleCommand(cmd: TestView.Cmd): Unit =
cmd 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:
enum Cmd:
case UpdateModel(f: MyModel => MyModel)