@@ -6,6 +6,7 @@ import Concur.Core.Discharge (discharge, dischargePartialEffect)
6
6
import Concur.Core.Types (Widget )
7
7
import Data.Either (Either (..))
8
8
import Data.Tuple (Tuple (..))
9
+ import Effect (Effect )
9
10
import Effect.Console (log )
10
11
import React as R
11
12
@@ -19,22 +20,25 @@ type ComponentState
19
20
mkComponentState :: HTML -> ComponentState
20
21
mkComponentState v = { view: v }
21
22
22
- componentClass :: forall a . Widget HTML a -> R.ReactClass { }
23
- componentClass winit = R .component " Concur" component
23
+ componentClassWithMount :: forall a . Effect Unit -> Widget HTML a -> R.ReactClass { }
24
+ componentClassWithMount onMount winit = R .component " Concur" component
24
25
where
25
- component this = do
26
- Tuple winit' v <- dischargePartialEffect winit
27
- pure { state: mkComponentState v
28
- , render: render <$> R .getState this
29
- , componentDidMount: handler this (Right winit')
30
- }
31
- handler this (Right r) = do
32
- v <- discharge (handler this) r
33
- void $ R .writeState this (mkComponentState v)
34
- handler _ (Left err) = do
35
- log (" FAILED! " <> show err)
36
- pure unit
37
- render st = R .toElement st.view
26
+ component this = do
27
+ Tuple winit' v <- dischargePartialEffect winit
28
+ pure { state: mkComponentState v
29
+ , render: render <$> R .getState this
30
+ , componentDidMount: onMount *> handler this (Right winit')
31
+ }
32
+ handler this (Right r) = do
33
+ v <- discharge (handler this) r
34
+ void $ R .writeState this (mkComponentState v)
35
+ handler _ (Left err) = do
36
+ log (" FAILED! " <> show err)
37
+ pure unit
38
+ render st = R .toElement st.view
39
+
40
+ componentClass :: forall a . Widget HTML a -> R.ReactClass { }
41
+ componentClass = componentClassWithMount mempty
38
42
39
43
renderComponent :: forall a . Widget HTML a -> R.ReactElement
40
44
renderComponent init = R .createLeafElement (componentClass init) {}
0 commit comments