@@ -12,18 +12,23 @@ import Control.Monad.Eff.Class (MonadEff)
12
12
13
13
import Data.Maybe (Maybe (..))
14
14
15
- import Halogen (Natural (), Component (), ComponentHTML (), ComponentDSL (), SlotConstructor (..), component , action , liftEff' , modify , gets )
15
+ import Halogen (Natural (), Component (), ComponentHTML (), ComponentDSL (), SlotConstructor (..), component , action , liftEff' , liftH , modify , gets )
16
16
import Halogen.HTML.Indexed as H
17
17
import Halogen.HTML.Properties.Indexed as P
18
18
19
- import Ace.Types (ACE ())
19
+ import Ace.Types (ACE (), Editor () )
20
20
import Ace.Editor as Editor
21
21
import Ace.Halogen.Component.Query
22
22
import Ace.Halogen.Component.State
23
23
24
24
-- | The Ace component.
25
- aceComponent :: forall g eff . (MonadEff (ace :: ACE | eff ) g ) => Maybe String -> Component AceState AceQuery g
26
- aceComponent initialText = component render eval
25
+ aceComponent
26
+ :: forall g eff
27
+ . (MonadEff (ace :: ACE | eff ) g )
28
+ => (Editor -> g Unit )
29
+ -> Maybe String
30
+ -> Component AceState AceQuery g
31
+ aceComponent setup initialText = component render eval
27
32
where
28
33
29
34
render :: AceState -> ComponentHTML AceQuery
@@ -36,6 +41,7 @@ aceComponent initialText = component render eval
36
41
case initialText of
37
42
Nothing -> pure unit
38
43
Just text -> void $ liftEff' $ Editor .setValue text Nothing editor
44
+ liftH $ setup editor
39
45
pure next
40
46
eval (GetText k) = do
41
47
state <- gets runAceState
@@ -55,5 +61,15 @@ aceComponent initialText = component render eval
55
61
56
62
-- | A convenience function for creating a `SlotConstructor` for an Ace
57
63
-- | component.
58
- aceConstructor :: forall g p eff . (MonadEff (ace :: ACE | eff ) g ) => p -> Maybe String -> SlotConstructor AceState AceQuery g p
59
- aceConstructor p initialText = SlotConstructor p \_ -> { component: aceComponent initialText, initialState: initialAceState }
64
+ aceConstructor
65
+ :: forall g p eff
66
+ . (MonadEff (ace :: ACE | eff ) g )
67
+ => (Editor -> g Unit )
68
+ -> p
69
+ -> Maybe String
70
+ -> SlotConstructor AceState AceQuery g p
71
+ aceConstructor setup p initialText =
72
+ SlotConstructor p \_ ->
73
+ { component: aceComponent setup initialText
74
+ , initialState: initialAceState
75
+ }
0 commit comments