package outwatchapp import com.softwaremill.macwire._ import monix.bio.Task 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 nova.monadic_sfx.ui.components.todo.TodoListStore 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) resolver: PartialFunction[Page, VDomModifier] = { case Page.Home => wire[HomePage].render case Page.SomePage => div( div(cls := "title", "SomePage"), // RequestDemo(todoStore), requestDemo, div(cls := "slider") ) case Page.UserHome(id) => div(div(cls := "title", "UserHome"), s"User id: $id") case Page.NotFound => div( div(cls := "title", "NotFound"), p(cls := "profile-description", "notfound") ) } } yield resolver ) }