@@ -9,23 +9,19 @@ import Data.Interpolate (i)
9import Data.Maybe (Maybe(..))
9import Data.Maybe (Maybe(..))
10import Data.Tuple.Nested ((/\))
10import Data.Tuple.Nested ((/\))
11import Effect (Effect)
11import Effect (Effect)
12−import Effect.Aff (Aff, attempt, error, launchAff_, message, throwError)
12+import Effect.Aff (launchAff_)
13import Effect.Class (liftEffect)
13import Effect.Class (liftEffect)
14import JSS (jssClasses)
14import JSS (jssClasses)
16−import Milkis.Impl (FetchImpl)
17import React.Basic (ReactComponent)
15import React.Basic (ReactComponent)
18import React.Basic.DOM as R
16import React.Basic.DOM as R
19import React.Basic.Events (handler_)
17import React.Basic.Events (handler_)
20import React.Basic.Helpers (jsx)
18import React.Basic.Helpers (jsx)
21import React.Basic.Hooks (component, element, useState)
19import React.Basic.Hooks (component, element, useState)
22import React.Basic.Hooks as React
20import React.Basic.Hooks as React
23−import Shared.Json (readAff)
24−import Shared.Models.Body as Body
25−import Simple.JSON (writeJSON)
26import Yoga.Button.Component (ButtonType(..), mkButton)
21import Yoga.Button.Component (ButtonType(..), mkButton)
27import Yoga.Card.Component (mkCard)
22import Yoga.Card.Component (mkCard)
28import Yoga.Cluster.Component as Cluster
23import Yoga.Cluster.Component as Cluster
24+import Yoga.Compiler.Types (Compiler)
29import Yoga.Editor (getValue, mkEditor, setValue)
25import Yoga.Editor (getValue, mkEditor, setValue)
30import Yoga.Stack.Component as Stack
26import Yoga.Stack.Component as Stack
31import Yoga.Theme.Styles (makeStylesJSS)
27import Yoga.Theme.Styles (makeStylesJSS)
@@ -34,8 +30,8 @@ import Yoga.Theme.Types (CSSTheme)
35 = { initialCode ∷ String, height ∷ String, language ∷ String }
31 = { initialCode ∷ String, height ∷ String, language ∷ String }
37−mkCompileEditor ∷ FetchImpl -> Effect (ReactComponent Props)
33+mkCompileEditor ∷ ∀ r. { | Compiler r } -> Effect (ReactComponent Props)
38−mkCompileEditor fetch = do
34+mkCompileEditor { compileAndRun } = do
39 editor <- mkEditor
35 editor <- mkEditor
40 card <- mkCard
36 card <- mkCard
41 cluster <- Cluster.makeComponent
37 cluster <- Cluster.makeComponent
@@ -93,7 +89,7 @@ mkCompileEditor fetch = do
93 setCompileResult Nothing
89 setCompileResult Nothing
94 code <- getValue ed
90 code <- getValue ed
95 launchAff_ do
91 launchAff_ do
96− res <- compileAndRun (M.fetch fetch) { code }
92+ res <- compileAndRun { code }
97 setCompileResult (Just res) # liftEffect
93 setCompileResult (Just res) # liftEffect
99 $ jsx stack { space: "--s1" }
95 $ jsx stack { space: "--s1" }
@@ -118,40 +114,3 @@ mkCompileEditor fetch = do
119 [ R.text (compileResultToString compileResult) ]
115 [ R.text (compileResultToString compileResult) ]
122−compileAndRun ∷ M.Fetch -> Body.CompileRequest -> Aff (Either Body.CompileResult Body.RunResult)
123−compileAndRun fetch body = do
126− $ fetch (M.URL "/api/compileAndRun")
127− { method: M.postMethod
128− , body: writeJSON body
129− , headers: M.makeHeaders { "Content-Type": "application/json" }
141− , message: message l
142− , moduleName: Nothing
149− , suggestion: Nothing
154− Right r -> case M.statusCode r of
155− 200 -> M.json r >>= readAff <#> Right
156− 422 -> M.json r >>= readAff <#> Left
157− code -> throwError (error $ "Unexpected response code " <> show code)