2025-08-17 22:52:22 +02:00
|
|
|
import scalive.*
|
|
|
|
|
|
2025-08-19 21:23:29 +02:00
|
|
|
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
|
|
|
|
2025-08-19 21:23:29 +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
|
2025-08-19 21:23:29 +02:00
|
|
|
case UpdateModel(f) => modelVar.update(f)
|
2025-08-17 22:52:22 +02:00
|
|
|
|
2025-08-19 21:23:29 +02:00
|
|
|
val el: HtmlElement =
|
2025-08-17 22:52:22 +02:00
|
|
|
div(
|
2025-08-19 21:23:29 +02:00
|
|
|
idAttr := "42",
|
|
|
|
|
cls := modelVar(_.cls),
|
|
|
|
|
disabled := modelVar(_.bool),
|
2025-08-17 22:52:22 +02:00
|
|
|
ul(
|
2025-08-19 21:23:29 +02:00
|
|
|
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:
|
2025-08-19 21:23:29 +02:00
|
|
|
case UpdateModel(f: MyModel => MyModel)
|