git.iko.soy/rowtype-yoga/psfp
on master help sign in
fewer stars
commitb360daec2578d19134695356f76a11a20c757c13 authorMark Eibes <mark.eibes@gmail.com> dateWed 22 Jan 2020, 21:11 (7 years ago) parente1da511
3 files changed+23−90
client/src/CompileEditor/Component.purs+21−21 client/src/SVG/Image.purs+1−1 client/stories/EditorStories.purs+1−68
client/src/CompileEditor/Component.purs+21−21
@@ -1,14 +1,17 @@
11module CompileEditor.Component where
22
33import Prelude hiding (add)
4+
45import Button.Component (ButtonType(..), mkButton)
56import Card.Component (mkCard)
7+import Data.Array (intercalate)
8+import Data.Either (Either(..))
69import Data.Foldable (for_)
710import Data.Nullable (null)
811import Data.Tuple.Nested ((/\))
912import Editor (getValue, mkEditor)
1013import Effect (Effect)
11−import Effect.Aff (Aff, launchAff_)
14+import Effect.Aff (Aff, error, launchAff_, throwError)
1215import Effect.Class (liftEffect)
1316import Milkis as M
1417import Milkis.Impl.Window (windowFetch)
@@ -36,7 +39,7 @@ mkCompileEditor = do
3639 $ fragment
3740 [ element button
3841 { buttonType: PlainButton
39− , children: [ R.text "Compile"]
42+ , children: [ R.text "Compile" ]
4043 , buttonProps:
4144 { onClick:
4245 handler_ do
@@ -44,9 +47,10 @@ mkCompileEditor = do
4447 for_ maybeEditor \ed -> do
4548 code <- getValue ed
4649 launchAff_ do
47− res <- compile { code }
48− res2 <- run
49− setCompileResult res2.stdout # liftEffect
50+ res <- compileAndRun { code }
51+ liftEffect $ setCompileResult case res of
52+ Left cr -> (cr.result.errors <#> _.message # intercalate "/n")
53+ Right r -> r.stdout
5054 }
5155 }
5256 , element card { children: [ R.text compileResult ] }
@@ -56,19 +60,15 @@ mkCompileEditor = do
5660fetch ∷ M.Fetch
5761fetch = M.fetch windowFetch
5862
59−compile ∷ Body.CompileRequest -> Aff Body.CompileResult
60−compile body = do
61− fetch (M.URL "/api/compile")
62− { method: M.postMethod
63− , body: writeJSON body
64− , headers: M.makeHeaders { "Content-Type": "application/json" }
65− }
66− >>= M.json
67− >>= readAff
68−
69−run ∷ Aff Body.RunResult
70−run = do
71− fetch (M.URL "/api/run")
72− { method: M.postMethod }
73− >>= M.json
74− >>= readAff
63+compileAndRun :: Body.CompileRequest -> Aff (Either Body.CompileResult Body.RunResult)
64+compileAndRun body = do
65+ response <-
66+ fetch (M.URL "/api/compileAndRun")
67+ { method: M.postMethod
68+ , body: writeJSON body
69+ , headers: M.makeHeaders { "Content-Type": "application/json" }
70+ }
71+ case M.statusCode response of
72+ 200 -> M.json response >>= readAff <#> Left
73+ 400 -> M.json response >>= readAff <#> Right
74+ code -> throwError (error $ "Unexpected response code " <> show code)
client/src/SVG/Image.purs+1−1
@@ -919,7 +919,7 @@ infixr 8 zip as <%>
919919stars ∷ ∀ css. String -> { twinklingStar1 ∷ String, twinklingStar2 ∷ String, twinklingStar3 ∷ String | css } -> JSX
920920stars className classes =
921921 let
922− n = 400
922+ n = 30
923923
924924 xs = randomRs 0.0 800.0 n $ mkSeed 84
925925
client/stories/EditorStories.purs+1−68
@@ -2,25 +2,9 @@ module EditorStories where
22
33import Prelude hiding (add)
44
5−import Data.Foldable (for_)
6−import Data.Nullable (null)
7−import Data.Tuple.Nested ((/\))
8−import Debug.Trace (spy)
5+import CompileEditor.Component (mkCompileEditor)
96import Decorator.FullScreen (fullScreenDecorator)
10−import Editor (getValue, mkEditor)
117import Effect (Effect)
12−import Effect.Aff (Aff, launchAff_)
13−import Effect.Class (liftEffect)
14−import Milkis as M
15−import Milkis.Impl.Window (windowFetch)
16−import React.Basic (ReactComponent)
17−import React.Basic.DOM as R
18−import React.Basic.Events (handler_)
19−import React.Basic.Hooks (component, element, fragment, readRefMaybe, useRef, useState)
20−import React.Basic.Hooks as React
21−import Shared.Json (readAff)
22−import Shared.Models.Body as Body
23−import Simple.JSON (writeJSON)
248import Storybook.React (Storybook, add, addDecorator, storiesOf)
259
2610stories ∷ Effect Storybook
@@ -30,54 +14,3 @@ stories = do
3014 add "The Editor" mkCompileEditor
3115 [ {}
3216 ]
33−
34−mkCompileEditor ∷ Effect (ReactComponent {})
35−mkCompileEditor = do
36− editor <- mkEditor
37− component "StorybookEditor" \{} -> React.do
38− editorRef <- useRef null
39− compileResult /\ modifyCompileResult <- useState ""
40− let
41− setCompileResult = modifyCompileResult <<< const
42− pure
43− $ fragment
44− [ R.button
45− { children: pure $ R.text "Compile"
46− , onClick:
47− handler_ do
48− maybeEditor <- (readRefMaybe editorRef)
49− for_ maybeEditor \ed -> do
50− code <- getValue ed
51− launchAff_ do
52− res <- compile { code }
53− res2 <- run
54− setCompileResult res2.stdout # liftEffect
55−
56−
57− }
58− , R.textarea
59− { value: compileResult
60− , disabled: true
61− }
62− , element editor { editorRef }
63− ]
64−
65−fetch ∷ M.Fetch
66−fetch = M.fetch windowFetch
67−
68−compile ∷ Body.CompileRequest -> Aff Body.CompileResult
69−compile body = do
70− fetch (M.URL "/api/compile")
71− { method: M.postMethod
72− , body: spy "Body" $ writeJSON body
73− , headers: M.makeHeaders { "Content-Type": "application/json" }
74− }
75− >>= M.json
76− >>= readAff
77−
78−run ∷ Aff Body.RunResult
79−run = do
80− fetch (M.URL "/api/run")
81− { method: M.postMethod }
82− >>= M.json
83− >>= readAff