@@ -13,17 +13,19 @@ import Data.Time.Duration (Seconds(..))
13import Data.Tuple.Nested ((/\))
13import Data.Tuple.Nested ((/\))
14import Effect (Effect)
14import Effect (Effect)
15import Effect.Aff (Aff)
15import Effect.Aff (Aff)
16−import Effect.Aff.Compat (EffectFn1)
16+import Effect.Aff.Compat (EffectFn1, EffectFn2, mkEffectFn2)
17import Effect.Class (liftEffect)
17import Effect.Class (liftEffect)
18import Effect.Uncurried (EffectFn2, mkEffectFn1, mkEffectFn2)
18import Effect.Uncurried (EffectFn2, mkEffectFn1, mkEffectFn2)
19import Foreign (Foreign, unsafeToForeign)
19import Foreign (Foreign, unsafeToForeign)
20import JSS (jssClasses)
20import JSS (jssClasses)
21+import MotionValue (onChange)
21import Prim.Row (class Union)
22import Prim.Row (class Union)
22import React.Basic (JSX, ReactComponent, Ref, element, fragment)
23import React.Basic (JSX, ReactComponent, Ref, element, fragment)
23import React.Basic.DOM as R
24import React.Basic.DOM as R
24import React.Basic.Hooks (reactComponent, useEffect, useEffectAlways, useState)
25import React.Basic.Hooks (reactComponent, useEffect, useEffectAlways, useState)
25import React.Basic.Hooks as React
26import React.Basic.Hooks as React
26import React.Basic.Hooks.Aff (useAff)
27import React.Basic.Hooks.Aff (useAff)
28+import Test.Spec.Runner.Event (Event)
27import Web.DOM (Node)
29import Web.DOM (Node)
28import Web.HTML (HTMLElement)
30import Web.HTML (HTMLElement)
29import Yoga.Block.Container.Style (DarkOrLightMode(..), getDarkOrLightMode)
31import Yoga.Block.Container.Style (DarkOrLightMode(..), getDarkOrLightMode)
@@ -32,6 +34,7 @@ import Yoga.Theme.Styles (makeStylesJSS)
33type EditorProps =
35type EditorProps =
34 ( value ∷ String
36 ( value ∷ String
37+ , onChange ∷ EffectFn2 String Event Unit
35 , language ∷ String
38 , language ∷ String
36 , editorDidMount ∷ EffectFn2 Editor Node Unit
39 , editorDidMount ∷ EffectFn2 Editor Node Unit
37 , editorWillMount ∷ EffectFn1 Monaco Unit
40 , editorWillMount ∷ EffectFn1 Monaco Unit
@@ -98,6 +101,8 @@ type Props =
98 { onLoad ∷ Editor -> Effect Unit
101 { onLoad ∷ Editor -> Effect Unit
99 , height ∷ String
102 , height ∷ String
100 , language ∷ String
103 , language ∷ String
105+ , onChange ∷ String -> Event -> Effect Unit
103mkEditor ∷ Effect (ReactComponent Props)
108mkEditor ∷ Effect (ReactComponent Props)
@@ -115,7 +120,7 @@ mkEditor = do
115 overflowY hidden
120 overflowY hidden
116 -- backgroundColor (colour.background) [ TODO ]
121 -- backgroundColor (colour.background) [ TODO ]
118− reactComponent "Editor" \{ onLoad, height, language } -> React.do
123+ reactComponent "Editor" \{ onChange, onLoad, height, language, value } -> React.do
119 classes <- useStyles {}
124 classes <- useStyles {}
120 mbEditorComponent /\ setEditorComponent <- React.useState' Nothing
125 mbEditorComponent /\ setEditorComponent <- React.useState' Nothing
121 monacoRef <- React.useRef null
126 monacoRef <- React.useRef null
@@ -145,6 +150,8 @@ mkEditor = do
145 element editor
150 element editor
146 { theme: themeName
151 { theme: themeName
154+ , onChange: mkEffectFn2 onChange
148 , options:
155 , options:
149 unsafeToForeign
156 unsafeToForeign
150 { fontFamily: "Victor Mono"
157 { fontFamily: "Victor Mono"