package com.example.playscalajsreact import com.example.playscalajsreact.shared.SharedMessages import org.scalajs.dom import japgolly.scalajs.react._ import japgolly.scalajs.react.vdom.html_<^._ import japgolly.scalajs.react.extra._ import com.example.playscalajsreact.model.HelloWorldSJSRComponent import japgolly.scalajs.react.extra.router._ import japgolly.scalajs.react.extra.router.StaticDsl.Route object ScalaJSExample { def main(args: Array[String]): Unit = { sealed trait Page case object Home extends Page case object Hello extends Page case class Person(user: String) extends Page case class ID(id: Int) extends Page case class Menu(name: String, route: Page) val mainMenu = Vector( Menu("Home", Home), Menu("Hello", Hello) ) def layout(c: RouterCtl[Page], r: Resolution[Page]) = <.ul( // c.link(Home)("Home"), // c.link(Hello)("Hello"), mainMenu.toTagMod { item => { <.li( ^.key := item.name, item.name, c setOnClick item.route ) } }, r.render() ) val x = <.ol( ^.id := "my-list", ^.lang := "en", ^.margin := 8.px, <.li("Item 1"), <.li("Item 2"), HelloWorldSJSRComponent("Hello", 18) ) val routerConfig = RouterConfigDsl[Page].buildConfig { dsl => import dsl._ import japgolly.scalajs.react.vdom.Implicits._ case class Item(category: String, itemId: java.util.UUID) extends Page // val r = // ("category" / string("[a-z]+") / "item" / int.caseClassDebug[ID]) // FIXME uncomment this block to get an error - Companion object not found for class Product // case class Product(category: Int, item: Int) extends Page // val r: Route[Product] = ("cat" / int / "item" / int).caseClass[Product] // val testRoute = // ("user" / string("[a-z0-9]{1,20}") / "age" / int).pmap { // case (a, b) => {} // } (emptyRule | staticRoute(root, Home) ~> render(x) // FIXME uncomment this block to get an error - Companion object not found for class Person // | dynamicRouteCT("user" / string("[a-z0-9]{1,20}").caseClass[Person]) ~> dynRender( // (page: Person) => { // HelloWorldSJSRComponent(page.user, 0) // } // ) | staticRoute("#hello", Hello) ~> render(<.div("TODO")) | staticRedirect("#hey") ~> redirectToPage(Hello)(SetRouteVia.HistoryReplace)) .notFound(redirectToPage(Home)(SetRouteVia.HistoryReplace)) .renderWith(layout) } // x.renderIntoDOM(dom.document.getElementById("app")) val router = Router(BaseUrl.fromWindowOrigin / "index.html", routerConfig) router().renderIntoDOM(dom.document.getElementById("app")) dom.document.getElementById("scalajsShoutOut").textContent = SharedMessages.itWorks } }