Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Container where
- import Intermediate.Prelude
- import ComponentA as CA
- import ComponentB as CB
- import ComponentC as CC
- import Data.Const (Const)
- import Data.Maybe (Maybe(..))
- import Halogen as H
- import Halogen.Component.ChildPath as HC
- import Halogen.HTML as HH
- import Halogen.HTML.Events as HE
- import Halogen.HTML.Properties as HP
- type Input = Unit
- type Output = Void
- type State =
- { a ∷ Maybe Boolean
- , b ∷ Maybe Int
- , c ∷ Maybe String
- }
- data Query a = Read a
- type ChildQuery = CA.Query ⊕ CB.Query ⊕ CC.Query ⊕ Const Void
- type ChildSlot = Unit ⨿ Unit ⨿ Unit ⨿ Void
- component ∷ ∀ m. Applicative m ⇒ H.Component HH.HTML Query Input Output m
- component =
- H.parentComponent
- { initialState: const initialState
- , render
- , eval
- , receiver: const Nothing
- }
- where
- initialState ∷ State
- initialState =
- { a: Nothing
- , b: Nothing
- , c: Nothing
- }
- render ∷ State → H.ParentHTML Query ChildQuery ChildSlot m
- render state = HH.div_
- [ HH.div
- [ HP.class_ $ H.ClassName "box" ]
- [ HH.h1_ [ HH.text "Component A" ]
- , HH.slot' HC.cp1 unit CA.component unit absurd
- ]
- , HH.div
- [ HP.class_ $ H.ClassName "box" ]
- [ HH.h1_ [ HH.text "Component B" ]
- , HH.slot' HC.cp2 unit CB.component unit absurd
- ]
- , HH.div
- [ HP.class_ $ H.ClassName "box" ]
- [ HH.h1_ [ HH.text "Component C" ]
- , HH.slot' HC.cp3 unit CC.component unit absurd
- ]
- , HH.p_
- [ HH.text "last observed states:" ]
- , HH.ul_
- [ HH.li_ [ HH.text $ "Component A: " ◇ show state.a ]
- , HH.li_ [ HH.text $ "Component B: " ◇ show state.b ]
- , HH.li_ [ HH.text $ "Component C: " ◇ show state.c ]
- ]
- , HH.button
- [ HE.onClick (HE.input_ Read) ]
- [ HH.text "check states" ]
- ]
- eval ∷ Query ~> H.ParentDSL State Query ChildQuery ChildSlot Output m
- eval (Read next) = do
- a ← H.query' HC.cp1 unit $ H.request CA.Read
- b ← H.query' HC.cp2 unit $ H.request CB.Read
- c ← H.query' HC.cp3 unit $ H.request CC.Read
- H.put { a, b, c }
- pure next
Add Comment
Please, Sign In to add comment