mirror of
https://github.com/phfroidmont/scalive.git
synced 2025-12-25 05:26:59 +01:00
Move RenderedLiveView outside of RenderedMods
This commit is contained in:
parent
f0986c1664
commit
ce06904f27
1 changed files with 17 additions and 13 deletions
|
|
@ -4,21 +4,22 @@ import scala.collection.mutable.ListBuffer
|
||||||
import scala.collection.immutable.ArraySeq
|
import scala.collection.immutable.ArraySeq
|
||||||
import zio.json.ast.Json
|
import zio.json.ast.Json
|
||||||
|
|
||||||
sealed trait RenderedMod[Model]:
|
class RenderedLiveView[Model] private[scalive] (
|
||||||
def update(model: Model): Unit
|
|
||||||
def wasUpdated: Boolean
|
|
||||||
|
|
||||||
object RenderedMod:
|
|
||||||
class Tag[Model] private[scalive] (
|
|
||||||
val static: ArraySeq[String],
|
val static: ArraySeq[String],
|
||||||
val dynamic: ArraySeq[RenderedMod[Model]]
|
val dynamic: ArraySeq[RenderedMod[Model]]
|
||||||
) extends RenderedMod[Model]:
|
):
|
||||||
def update(model: Model): Unit =
|
def update(model: Model): Unit =
|
||||||
dynamic.foreach(_.update(model))
|
dynamic.foreach(_.update(model))
|
||||||
def wasUpdated: Boolean = dynamic.exists(_.wasUpdated)
|
def wasUpdated: Boolean = dynamic.exists(_.wasUpdated)
|
||||||
def buildInitJson: Json = JsonAstBuilder.buildInit(static, dynamic)
|
def buildInitJson: Json = JsonAstBuilder.buildInit(static, dynamic)
|
||||||
def buildDiffJson: Json = JsonAstBuilder.buildDiff(dynamic)
|
def buildDiffJson: Json = JsonAstBuilder.buildDiff(dynamic)
|
||||||
|
|
||||||
|
sealed trait RenderedMod[Model]:
|
||||||
|
def update(model: Model): Unit
|
||||||
|
def wasUpdated: Boolean
|
||||||
|
|
||||||
|
object RenderedMod:
|
||||||
|
|
||||||
class Dynamic[I, O](d: Dyn[I, O], init: I) extends RenderedMod[I]:
|
class Dynamic[I, O](d: Dyn[I, O], init: I) extends RenderedMod[I]:
|
||||||
private var value: O = d.run(init)
|
private var value: O = d.run(init)
|
||||||
private var updated: Boolean = false
|
private var updated: Boolean = false
|
||||||
|
|
@ -33,7 +34,7 @@ object RenderedMod:
|
||||||
|
|
||||||
class When[Model](
|
class When[Model](
|
||||||
val dynCond: Dynamic[Model, Boolean],
|
val dynCond: Dynamic[Model, Boolean],
|
||||||
val nested: Tag[Model]
|
val nested: RenderedLiveView[Model]
|
||||||
) extends RenderedMod[Model]:
|
) extends RenderedMod[Model]:
|
||||||
def displayed: Boolean = dynCond.currentValue
|
def displayed: Boolean = dynCond.currentValue
|
||||||
def wasUpdated: Boolean = dynCond.wasUpdated || nested.wasUpdated
|
def wasUpdated: Boolean = dynCond.wasUpdated || nested.wasUpdated
|
||||||
|
|
@ -43,13 +44,16 @@ object RenderedMod:
|
||||||
|
|
||||||
object LiveViewRenderer:
|
object LiveViewRenderer:
|
||||||
|
|
||||||
def render[Model](lv: LiveView[Model], model: Model): RenderedMod.Tag[Model] =
|
def render[Model](
|
||||||
|
lv: LiveView[Model],
|
||||||
|
model: Model
|
||||||
|
): RenderedLiveView[Model] =
|
||||||
render(lv.view, model)
|
render(lv.view, model)
|
||||||
|
|
||||||
private def render[Model](
|
private def render[Model](
|
||||||
tag: HtmlTag[Model],
|
tag: HtmlTag[Model],
|
||||||
model: Model
|
model: Model
|
||||||
): RenderedMod.Tag[Model] =
|
): RenderedLiveView[Model] =
|
||||||
val static = ListBuffer.empty[String]
|
val static = ListBuffer.empty[String]
|
||||||
val dynamic = ListBuffer.empty[RenderedMod[Model]]
|
val dynamic = ListBuffer.empty[RenderedMod[Model]]
|
||||||
|
|
||||||
|
|
@ -63,7 +67,7 @@ object LiveViewRenderer:
|
||||||
staticFragment = ""
|
staticFragment = ""
|
||||||
dynamic.append(d)
|
dynamic.append(d)
|
||||||
if staticFragment.nonEmpty then static.append(staticFragment)
|
if staticFragment.nonEmpty then static.append(staticFragment)
|
||||||
new RenderedMod.Tag(static.to(ArraySeq), dynamic.to(ArraySeq))
|
new RenderedLiveView(static.to(ArraySeq), dynamic.to(ArraySeq))
|
||||||
|
|
||||||
private def renderTag[Model](
|
private def renderTag[Model](
|
||||||
tag: HtmlTag[Model],
|
tag: HtmlTag[Model],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue