@@ -9,23 +9,19 @@ import Data.Interpolate (i)
99import Data.Maybe (Maybe(..))
1010import Data.Tuple.Nested ((/\))
1111import Effect (Effect)
12−import Effect.Aff (Aff, attempt, error, launchAff_, message, throwError)
12+import Effect.Aff (launchAff_)
1313import Effect.Class (liftEffect)
1414import JSS (jssClasses)
15−import Milkis as M
16−import Milkis.Impl (FetchImpl)
1715import React.Basic (ReactComponent)
1816import React.Basic.DOM as R
1917import React.Basic.Events (handler_)
2018import React.Basic.Helpers (jsx)
2119import React.Basic.Hooks (component, element, useState)
2220import React.Basic.Hooks as React
23−import Shared.Json (readAff)
24−import Shared.Models.Body as Body
25−import Simple.JSON (writeJSON)
2621import Yoga.Button.Component (ButtonType(..), mkButton)
2722import Yoga.Card.Component (mkCard)
2823import Yoga.Cluster.Component as Cluster
24+import Yoga.Compiler.Types (Compiler)
2925import Yoga.Editor (getValue, mkEditor, setValue)
3026import Yoga.Stack.Component as Stack
3127import Yoga.Theme.Styles (makeStylesJSS)
@@ -34,8 +30,8 @@ import Yoga.Theme.Types (CSSTheme)
3430type Props
3531 = { initialCode ∷ String, height ∷ String, language ∷ String }
3632
37−mkCompileEditor ∷ FetchImpl -> Effect (ReactComponent Props)
38−mkCompileEditor fetch = do
33+mkCompileEditor ∷ ∀ r. { | Compiler r } -> Effect (ReactComponent Props)
34+mkCompileEditor { compileAndRun } = do
3935 editor <- mkEditor
4036 card <- mkCard
4137 cluster <- Cluster.makeComponent
@@ -93,7 +89,7 @@ mkCompileEditor fetch = do
9389 setCompileResult Nothing
9490 code <- getValue ed
9591 launchAff_ do
96− res <- compileAndRun (M.fetch fetch) { code }
92+ res <- compileAndRun { code }
9793 setCompileResult (Just res) # liftEffect
9894 pure
9995 $ jsx stack { space: "--s1" }
@@ -118,40 +114,3 @@ mkCompileEditor fetch = do
118114 }
119115 [ R.text (compileResultToString compileResult) ]
120116 ]
121−
122−compileAndRun ∷ M.Fetch -> Body.CompileRequest -> Aff (Either Body.CompileResult Body.RunResult)
123−compileAndRun fetch body = do
124− response <-
125− attempt
126− $ fetch (M.URL "/api/compileAndRun")
127− { method: M.postMethod
128− , body: writeJSON body
129− , headers: M.makeHeaders { "Content-Type": "application/json" }
130− }
131− case response of
132− Left l ->
133− pure
134− ( Left
135− { resultType: ""
136− , result:
137− [ { allSpans: []
138− , errorCode: ""
139− , errorLink: ""
140− , filename: ""
141− , message: message l
142− , moduleName: Nothing
143− , position:
144− { endColumn: 0
145− , endLine: 0
146− , startColumn: 0
147− , startLine: 0
148− }
149− , suggestion: Nothing
150− }
151− ]
152− }
153− )
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)