Created
September 16, 2018 00:54
-
-
Save busti/a8e257c23243f3e1fe709d25214b0700 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Test { | |
case class Item( | |
name: String | |
) | |
case class Model( | |
items: Vector[Item], | |
selected: Item | |
) | |
def initial = { | |
val fst = Item("a") | |
Model( | |
Vector(fst, Item("b"), Item("c")), | |
fst | |
) | |
} | |
sealed trait Event | |
case object Noop extends Event | |
case class Select(item: Item) extends Event | |
def render(out: Handler[Event], in: Observable[Model]) = { | |
div( | |
in.map(state => state.items.map( item => | |
div(click(Select(item)) --> out, ( | |
if (state.selected == item) | |
Some(cls := "active") | |
else | |
None | |
): Option[VDomModifier])( | |
item.name | |
) | |
)) | |
) | |
} | |
def handle: (Model, Event) => Model = { | |
case (s, Select(item)) => s.copy(selected = item) | |
case (s, Noop) => s | |
} | |
def view: VNode = for { | |
handler <- Handler.create[Event] | |
node <- render(handler, handler.startWith(Seq(Noop)).scan(initial)(handle)) | |
} yield node | |
} | |
OutWatch.renderInto("#test", main()).unsafeRunSync() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment