Guest User

Untitled

a guest
Apr 19th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. module Container where
  2.  
  3. import Intermediate.Prelude
  4.  
  5. import ComponentA as CA
  6. import ComponentB as CB
  7. import ComponentC as CC
  8. import Data.Const (Const)
  9. import Data.Maybe (Maybe(..))
  10. import Halogen as H
  11. import Halogen.Component.ChildPath as HC
  12. import Halogen.HTML as HH
  13. import Halogen.HTML.Events as HE
  14. import Halogen.HTML.Properties as HP
  15.  
  16. type Input = Unit
  17.  
  18. type Output = Void
  19.  
  20. type State =
  21. { a ∷ Maybe Boolean
  22. , b ∷ Maybe Int
  23. , c ∷ Maybe String
  24. }
  25.  
  26. data Query a = Read a
  27.  
  28. type ChildQuery = CA.Query ⊕ CB.Query ⊕ CC.Query ⊕ Const Void
  29. type ChildSlot = Unit ⨿ Unit ⨿ Unit ⨿ Void
  30.  
  31. component ∷ ∀ m. Applicative m ⇒ H.Component HH.HTML Query Input Output m
  32. component =
  33. H.parentComponent
  34. { initialState: const initialState
  35. , render
  36. , eval
  37. , receiver: const Nothing
  38. }
  39. where
  40.  
  41. initialState ∷ State
  42. initialState =
  43. { a: Nothing
  44. , b: Nothing
  45. , c: Nothing
  46. }
  47.  
  48. render ∷ State → H.ParentHTML Query ChildQuery ChildSlot m
  49. render state = HH.div_
  50. [ HH.div
  51. [ HP.class_ $ H.ClassName "box" ]
  52. [ HH.h1_ [ HH.text "Component A" ]
  53. , HH.slot' HC.cp1 unit CA.component unit absurd
  54. ]
  55. , HH.div
  56. [ HP.class_ $ H.ClassName "box" ]
  57. [ HH.h1_ [ HH.text "Component B" ]
  58. , HH.slot' HC.cp2 unit CB.component unit absurd
  59. ]
  60. , HH.div
  61. [ HP.class_ $ H.ClassName "box" ]
  62. [ HH.h1_ [ HH.text "Component C" ]
  63. , HH.slot' HC.cp3 unit CC.component unit absurd
  64. ]
  65. , HH.p_
  66. [ HH.text "last observed states:" ]
  67. , HH.ul_
  68. [ HH.li_ [ HH.text $ "Component A: " ◇ show state.a ]
  69. , HH.li_ [ HH.text $ "Component B: " ◇ show state.b ]
  70. , HH.li_ [ HH.text $ "Component C: " ◇ show state.c ]
  71. ]
  72. , HH.button
  73. [ HE.onClick (HE.input_ Read) ]
  74. [ HH.text "check states" ]
  75. ]
  76.  
  77. eval ∷ Query ~> H.ParentDSL State Query ChildQuery ChildSlot Output m
  78. eval (Read next) = do
  79. a ← H.query' HC.cp1 unit $ H.request CA.Read
  80. b ← H.query' HC.cp2 unit $ H.request CB.Read
  81. c ← H.query' HC.cp3 unit $ H.request CC.Read
  82. H.put { a, b, c }
  83. pure next
Add Comment
Please, Sign In to add comment