From 486e89c1f10bc2f130be1666694c999228d917cc Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Thu, 21 Aug 2025 14:10:47 +0200 Subject: [PATCH] Fix JS build and move example to its own module --- build.mill | 11 ++-- example/src/Example.scala | 20 +++++++ example/src/ExampleLiveView.scala | 36 ++++++++++++ .../scalive => example/src}/RootLayout.scala | 4 +- zio/src/scalive/Example.scala | 56 ------------------- 5 files changed, 64 insertions(+), 63 deletions(-) create mode 100644 example/src/Example.scala create mode 100644 example/src/ExampleLiveView.scala rename {zio/src/scalive => example/src}/RootLayout.scala (82%) delete mode 100644 zio/src/scalive/Example.scala diff --git a/build.mill b/build.mill index 1ee1d7c..47e738f 100644 --- a/build.mill +++ b/build.mill @@ -29,10 +29,10 @@ object core extends ScalaCommon: } def jsBundle = Task { - val bundleDest = Task.dest / "static" / "scalive.js" os.copy( from = js.bundle().path, - to = bundleDest + to = Task.dest / "static" / "scalive.js", + createFolders = true ) PathRef(Task.dest) } @@ -45,5 +45,8 @@ object core extends ScalaCommon: def utestVersion = "0.9.0" object zio extends ScalaCommon: - def mvnDeps = Seq(mvn"dev.zio::zio-http:3.4.0") - override def moduleDeps = Seq(core) + def mvnDeps = Seq(mvn"dev.zio::zio-http:3.4.0") + def moduleDeps = Seq(core) + +object example extends ScalaCommon: + def moduleDeps = Seq(zio) diff --git a/example/src/Example.scala b/example/src/Example.scala new file mode 100644 index 0000000..8112ad5 --- /dev/null +++ b/example/src/Example.scala @@ -0,0 +1,20 @@ +import zio.* +import zio.http.* +import scalive.* + +object Example extends ZIOAppDefault: + + val liveRouter = + LiveRouter( + RootLayout(_), + List( + LiveRoute( + Root, + (_, req) => + val q = req.queryParam("q").map("Param : " ++ _).getOrElse("No param") + ExampleLiveView(q) + ) + ) + ) + + override val run = Server.serve(liveRouter.routes).provide(Server.default) diff --git a/example/src/ExampleLiveView.scala b/example/src/ExampleLiveView.scala new file mode 100644 index 0000000..740e53f --- /dev/null +++ b/example/src/ExampleLiveView.scala @@ -0,0 +1,36 @@ +import scalive.* + +final case class ExampleModel(elems: List[NestedModel], cls: String = "text-xs") +final case class NestedModel(name: String, age: Int) + +class ExampleLiveView(someParam: String) extends LiveView[Nothing]: + + val model = Var( + ExampleModel( + List( + NestedModel("a", 10), + NestedModel("b", 15), + NestedModel("c", 20) + ) + ) + ) + + def handleCommand(cmd: Nothing): Unit = () + + val el = + div( + h1(someParam), + idAttr := "42", + cls := model(_.cls), + ul( + model(_.elems).splitByIndex((_, elem) => + li( + "Nom: ", + elem(_.name), + " Age: ", + elem(_.age.toString) + ) + ) + ) + ) +end ExampleLiveView diff --git a/zio/src/scalive/RootLayout.scala b/example/src/RootLayout.scala similarity index 82% rename from zio/src/scalive/RootLayout.scala rename to example/src/RootLayout.scala index 64e1bd0..a4903bb 100644 --- a/zio/src/scalive/RootLayout.scala +++ b/example/src/RootLayout.scala @@ -1,6 +1,4 @@ -package scalive - -import scalive.HtmlElement +import scalive.* object RootLayout: def apply(content: HtmlElement): HtmlElement = diff --git a/zio/src/scalive/Example.scala b/zio/src/scalive/Example.scala deleted file mode 100644 index 033c7bf..0000000 --- a/zio/src/scalive/Example.scala +++ /dev/null @@ -1,56 +0,0 @@ -package scalive - -import zio.* -import zio.http.* - -object Example extends ZIOAppDefault: - - val liveRouter = - LiveRouter( - RootLayout(_), - List( - LiveRoute( - Root / "test", - (_, req) => - val q = req.queryParam("q").map("Param : " ++ _).getOrElse("No param") - TestView(q) - ) - ) - ) - - override val run = Server.serve(liveRouter.routes).provide(Server.default) - -final case class MyModel(elems: List[NestedModel], cls: String = "text-xs") -final case class NestedModel(name: String, age: Int) - -class TestView(someParam: String) extends LiveView[Nothing]: - - val model = Var( - MyModel( - List( - NestedModel("a", 10), - NestedModel("b", 15), - NestedModel("c", 20) - ) - ) - ) - - def handleCommand(cmd: Nothing): Unit = () - - val el = - div( - h1(someParam), - idAttr := "42", - cls := model(_.cls), - ul( - model(_.elems).splitByIndex((_, elem) => - li( - "Nom: ", - elem(_.name), - " Age: ", - elem(_.age.toString) - ) - ) - ) - ) -end TestView