From aaea4f487ba8bdd17cbac4f29405caaa621b635a Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Thu, 18 Sep 2025 01:27:38 +0200 Subject: [PATCH] Add "push" JS command --- core/src/scalive/JS.scala | 22 +++++++++++++++++++++- example/src/ListLiveView.scala | 2 +- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/core/src/scalive/JS.scala b/core/src/scalive/JS.scala index 36a8e4a..09256b1 100644 --- a/core/src/scalive/JS.scala +++ b/core/src/scalive/JS.scala @@ -100,7 +100,21 @@ object JSCommands: def popFocus() = ops.addOp("pop_focus", Json.Obj.empty) - def push() = ??? + def push[A: JsonEncoder]( + event: A, + target: String = "", + loading: String = "", + pageLoading: Boolean = false + ) = + ops.addOp( + "push", + Args.Push( + event.toJson, + Option.when(target.nonEmpty)(target), + Option.when(loading.nonEmpty)(loading), + Option.when(!pageLoading)(pageLoading) + ) + ) def pushFocus(to: String = "") = ops.addOp("push_focus", Args.To(Option.when(to.nonEmpty)(to))) @@ -257,6 +271,12 @@ object JSCommands: time: Option[Int], blocking: Option[Boolean]) derives JsonEncoder + final case class Push( + event: String, + target: Option[String], + loading: Option[String], + pageLoading: Option[Boolean]) + derives JsonEncoder end Args end JSCommands diff --git a/example/src/ListLiveView.scala b/example/src/ListLiveView.scala index 7f15f1b..b5d9702 100644 --- a/example/src/ListLiveView.scala +++ b/example/src/ListLiveView.scala @@ -55,7 +55,7 @@ class ListLiveView(someParam: String) extends LiveView[Msg, Model]: span(cls := "grow"), button( cls := "btn btn-neutral", - phx.click := JS.toggleClass("btn-neutral btn-accent"), + phx.click := JS.toggleClass("btn-neutral btn-accent").push(Msg.IncAge(-5)), "Toggle color" ) )