You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
71 lines
2.2 KiB
package outwatchapp
|
|
|
|
import scala.concurrent.duration._
|
|
|
|
import colibri.ext.monix._
|
|
import com.softwaremill.macwire._
|
|
import monix.bio.Task
|
|
import monix.eval.Coeval
|
|
import monix.reactive.Observable
|
|
import outwatchapp.ui.components.todo.TodoListStore
|
|
import org.scalajs.dom.raw.Element
|
|
import outwatch._
|
|
import outwatch.dsl._
|
|
import outwatch.router._
|
|
import outwatchapp.components.CounterDemo
|
|
import outwatchapp.components.RequestDemo
|
|
import outwatchapp.components.todo.ChartjsDemo
|
|
import outwatchapp.pages.HomePage
|
|
import outwatchapp.util.reactive.WorkerData
|
|
import outwatchapp.util.reactive.WebWorker
|
|
import outwatchapp.components.todo.FusejsDemo
|
|
|
|
class MainApp(el: Element)(implicit
|
|
backend: AppTypes.Backend,
|
|
store: RouterStore[Page]
|
|
) {
|
|
def run: Task[Unit] = for {
|
|
resolver <- resolver
|
|
_ <- OutWatch.renderInto[Task](el, Router(resolver))
|
|
} yield ()
|
|
|
|
def resolver: Task[PartialFunction[Page, VDomModifier]] =
|
|
Task.deferAction(implicit s =>
|
|
for {
|
|
counterDemo <- CounterDemo()
|
|
chartDemo <- ChartjsDemo()
|
|
todoStore <- TodoListStore()
|
|
requestDemo <- RequestDemo(todoStore)
|
|
demoWorker <- WebWorker[WorkerData]("/worker.js")
|
|
} yield {
|
|
case Page.Home => wire[HomePage].render
|
|
case Page.SomePage =>
|
|
div(
|
|
div(cls := "title", "SomePage"),
|
|
// RequestDemo(todoStore),
|
|
Observable
|
|
.interval(1.second)
|
|
.doOnNextF(i => Coeval(println(s"Producer emitted $i")))
|
|
.doOnNextF(i =>
|
|
Coeval(demoWorker.onNext(WorkerData(i))) >> Coeval.unit
|
|
)
|
|
.map(_ => div()),
|
|
demoWorker.map(_.toString).map(v => p(cls := "text-white", v)),
|
|
requestDemo,
|
|
div(cls := "slider")
|
|
)
|
|
case Page.UserHome(id) =>
|
|
div(
|
|
cls := "text-white",
|
|
div(cls := "title", "UserHome"),
|
|
s"User id: $id",
|
|
div(FusejsDemo.y.map(_.item.toString).mkString(" "))
|
|
)
|
|
case Page.NotFound =>
|
|
div(
|
|
div(cls := "title", "NotFound"),
|
|
p(cls := "text-white", "notfound")
|
|
)
|
|
}
|
|
)
|
|
}
|