@@ -5,19 +5,15 @@ import Prelude
5import CSS.Safer (cssSafer)
5import CSS.Safer (cssSafer)
6import Control.Promise (Promise)
6import Control.Promise (Promise)
7import Control.Promise as Promise
7import Control.Promise as Promise
8−import Data.Maybe (Maybe(..))
9−import Data.Nullable (notNull, null)
8+import Data.Nullable (Nullable, notNull)
10import Effect (Effect)
9import Effect (Effect)
11import Effect.Aff (Aff)
10import Effect.Aff (Aff)
12import Effect.Class (liftEffect)
11import Effect.Class (liftEffect)
13−import Effect.Class.Console (warn)
14import Effect.Uncurried (EffectFn2, mkEffectFn2)
12import Effect.Uncurried (EffectFn2, mkEffectFn2)
15import Foreign (Foreign, unsafeToForeign)
13import Foreign (Foreign, unsafeToForeign)
16import Prim.Row (class Union)
14import Prim.Row (class Union)
17import React.Basic (JSX, ReactComponent, element, fragment)
15import React.Basic (JSX, ReactComponent, element, fragment)
18−import React.Basic.DOM as R
16+import React.Basic.Hooks (Ref, component, writeRef)
19−import React.Basic.Events (handler_)
20−import React.Basic.Hooks (component, readRefMaybe, useRef, writeRef)
21import React.Basic.Hooks as React
17import React.Basic.Hooks as React
22import React.Basic.Hooks.Aff (useAff)
18import React.Basic.Hooks.Aff (useAff)
23import React.Helpers (wrapperDiv)
19import React.Helpers (wrapperDiv)
@@ -85,7 +81,7 @@ initEditor = do
85 registerLanguageImpl monaco "purescript" # liftEffect
81 registerLanguageImpl monaco "purescript" # liftEffect
86 setMonarchTokensProviderImpl monaco "purescript" purescriptSyntax # liftEffect
82 setMonarchTokensProviderImpl monaco "purescript" purescriptSyntax # liftEffect
88−mkEditor ∷ Effect (ReactComponent {})
84+mkEditor ∷ Effect (ReactComponent { editorRef ∷ Ref (Nullable _) })
89mkEditor = do
85mkEditor = do
90 useStyles <-
86 useStyles <-
91 makeStyles \(theme ∷ CSSTheme) ->
87 makeStyles \(theme ∷ CSSTheme) ->
@@ -100,25 +96,14 @@ mkEditor = do
100 , backgroundColor: theme.backgroundColour
96 , backgroundColor: theme.backgroundColour
103− component "Editor" \{} -> React.do
99+ component "Editor" \{ editorRef } -> React.do
104 classes <- useStyles
100 classes <- useStyles
106 useAff unit initEditor
101 useAff unit initEditor
107 theme <- useTheme
102 theme <- useTheme
108 let themeName = if theme.isLight then lightThemeName else darkThemeName
103 let themeName = if theme.isLight then lightThemeName else darkThemeName
110 $ fragment
105 $ fragment
114− maybeEditor <- readRefMaybe ref
116− Nothing -> pure unit
119− warn $ "Value: " <> v
121− , wrapperDiv { className: classes.wrapper }
106+ [ wrapperDiv { className: classes.wrapper }
122 $ element editor
107 $ element editor
123 { theme: themeName
108 { theme: themeName
124 , options:
109 , options:
@@ -136,6 +121,6 @@ mkEditor = do
136 , language: "purescript"
121 , language: "purescript"
137 -- https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages
122 -- https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages
138 , editorDidMount:
123 , editorDidMount:
139− mkEffectFn2 \_ -> notNull >>> writeRef ref
124+ mkEffectFn2 \_ -> notNull >>> writeRef editorRef