mirror of
https://github.com/phfroidmont/scalive.git
synced 2025-12-25 05:26:59 +01:00
Add home liveview
This commit is contained in:
parent
a036e3cbb3
commit
0b067aa7e1
3 changed files with 43 additions and 4 deletions
|
|
@ -35,7 +35,13 @@ class HtmlElement(val tag: HtmlTag, val mods: Vector[Mod]):
|
|||
diff
|
||||
|
||||
class HtmlTag(val name: String, val void: Boolean = false):
|
||||
def apply(mods: Mod*): HtmlElement = HtmlElement(this, mods.toVector)
|
||||
def apply(mods: (Mod | IterableOnce[Mod])*): HtmlElement = HtmlElement(
|
||||
this,
|
||||
mods.toVector.flatMap {
|
||||
case m: Mod => Some(m)
|
||||
case ms: IterableOnce[Mod] => ms
|
||||
}
|
||||
)
|
||||
|
||||
class HtmlAttr[V](val name: String, val codec: Codec[V, String]):
|
||||
private inline def isBooleanAsAttrPresence = codec == BooleanAsAttrPresenceCodec
|
||||
|
|
@ -84,7 +90,7 @@ object Mod:
|
|||
case DynElement(dyn: Dyn[HtmlElement]) extends Content with DynamicMod
|
||||
// TODO support arbitrary collection
|
||||
case DynOptionElement(dyn: Dyn[Option[HtmlElement]]) extends Content with DynamicMod
|
||||
case DynElementColl(dyn: Dyn[Iterable[HtmlElement]]) extends Content with DynamicMod
|
||||
case DynElementColl(dyn: Dyn[IterableOnce[HtmlElement]]) extends Content with DynamicMod
|
||||
case DynSplit(v: SplitVar[?, HtmlElement, ?]) extends Content with DynamicMod
|
||||
|
||||
extension (mod: Mod)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,10 @@ object Example extends ZIOAppDefault:
|
|||
LiveRouter(
|
||||
RootLayout(_),
|
||||
List(
|
||||
LiveRoute(
|
||||
Root,
|
||||
(_, _) => HomeLiveView()
|
||||
),
|
||||
LiveRoute(
|
||||
Root / "counter",
|
||||
(_, _) => CounterLiveView()
|
||||
|
|
|
|||
29
example/src/HomeLiveView.scala
Normal file
29
example/src/HomeLiveView.scala
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import scalive.*
|
||||
import zio.*
|
||||
import zio.stream.ZStream
|
||||
|
||||
class HomeLiveView() extends LiveView[String, Unit]:
|
||||
val links = List(
|
||||
"/counter" -> "Counter",
|
||||
"/list" -> "List"
|
||||
)
|
||||
|
||||
def init = ZIO.succeed(())
|
||||
|
||||
def update(model: Unit) = _ => ZIO.succeed(model)
|
||||
|
||||
def view(model: Dyn[Unit]) =
|
||||
ul(
|
||||
cls := "space-y-2",
|
||||
links.map((path, name) =>
|
||||
li(
|
||||
a(
|
||||
href := path,
|
||||
cls := "block px-4 py-2 rounded-lg text-gray-700 hover:bg-gray-100 hover:text-gray-900 font-medium transition",
|
||||
name
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def subscriptions(model: Unit) = ZStream.empty
|
||||
Loading…
Add table
Add a link
Reference in a new issue