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.

54 lines
1.7 KiB

4 years ago
  1. package com.example.playscalajsreact.component
  2. import com.example.playscalajsreact.model.MyGlobalState
  3. import japgolly.scalajs.react.vdom.VdomElement
  4. import japgolly.scalajs.react.Callback
  5. import japgolly.scalajs.react._
  6. import japgolly.scalajs.react.vdom.html_<^._
  7. import com.example.playscalajsreact.route.AppRouter
  8. import japgolly.scalajs.react.extra.router.RouterCtl
  9. import com.example.playscalajsreact.route.Page
  10. import com.example.playscalajsreact.route.Page._
  11. import japgolly.scalajs.react.extra.StateSnapshot
  12. import com.example.playscalajsreact.model.User
  13. object MenuComponent {
  14. case class State(myGlobalState: MyGlobalState = MyGlobalState())
  15. case class Props(state: StateSnapshot[MyGlobalState], c: RouterCtl[Page])
  16. class Backend($ : BackendScope[Props, Unit]) {
  17. def render(props: Props): VdomElement =
  18. {
  19. val name = props.state.value.user.getOrElse(User.empty).username
  20. <.ul(
  21. Array(
  22. Menu("Home", Home),
  23. Menu("Hello", Hello),
  24. Menu(name, Person(name, 0)),
  25. Menu("Editor", Editor),
  26. Menu("Test", Test)
  27. ).toTagMod { item =>
  28. {
  29. <.li(
  30. ^.key := item.name,
  31. <.a(
  32. item.name,
  33. props.c setOnClick item.route,
  34. ^.color := "red"
  35. )
  36. )
  37. }
  38. }
  39. )
  40. }
  41. }
  42. private val component = ScalaComponent
  43. .builder[Props]("menu")
  44. // .initialState(State())
  45. .renderBackend[Backend]
  46. // .componentDidMount($ => $.backend.refresh($.state))
  47. .build
  48. def apply(state: StateSnapshot[MyGlobalState], c: RouterCtl[Page]) = component(Props(state, c))
  49. }