@@ -12,18 +12,23 @@ import Control.Monad.Eff.Class (MonadEff)
1212
1313import Data.Maybe (Maybe (..))
1414
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 )
1616import Halogen.HTML.Indexed as H
1717import Halogen.HTML.Properties.Indexed as P
1818
19- import Ace.Types (ACE ())
19+ import Ace.Types (ACE (), Editor () )
2020import Ace.Editor as Editor
2121import Ace.Halogen.Component.Query
2222import Ace.Halogen.Component.State
2323
2424-- | 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
2732 where
2833
2934 render :: AceState -> ComponentHTML AceQuery
@@ -36,6 +41,7 @@ aceComponent initialText = component render eval
3641 case initialText of
3742 Nothing -> pure unit
3843 Just text -> void $ liftEff' $ Editor .setValue text Nothing editor
44+ liftH $ setup editor
3945 pure next
4046 eval (GetText k) = do
4147 state <- gets runAceState
@@ -55,5 +61,15 @@ aceComponent initialText = component render eval
5561
5662-- | A convenience function for creating a `SlotConstructor` for an Ace
5763-- | 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