Skip to content

Commit 72e8419

Browse files
committed
polish log output
1 parent d3f8cae commit 72e8419

File tree

6 files changed

+274
-205
lines changed

6 files changed

+274
-205
lines changed

src/ConsolePanel.res

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
type logLevel = [
2+
| #log
3+
| #warn
4+
| #error
5+
]
6+
7+
@react.component
8+
let make = (~compilerState, ~runOutput) => {
9+
let (logs, setLogs) = React.useState(_ => [])
10+
11+
React.useEffect(() => {
12+
let cb = e => {
13+
let data = e["data"]
14+
switch data["type"] {
15+
| #...logLevel as logLevel =>
16+
let args: array<string> = data["args"]
17+
setLogs(previous => previous->Belt.Array.concat([(logLevel, args)]))
18+
| _ => ()
19+
}
20+
}
21+
Webapi.Window.addEventListener("message", cb)
22+
Some(() => Webapi.Window.removeEventListener("message", cb))
23+
}, [])
24+
25+
React.useEffect(() => {
26+
if runOutput {
27+
switch compilerState {
28+
| CompilerManagerHook.Ready({result: Comp(Success({js_code}))}) =>
29+
setLogs(_ => [])
30+
let ast = AcornParse.parse(js_code)
31+
let transpiled = AcornParse.removeImportsAndExports(ast)
32+
EvalIFrame.sendOutput(transpiled)
33+
| _ => ()
34+
}
35+
}
36+
None
37+
}, (compilerState, runOutput))
38+
39+
<div>
40+
{switch logs {
41+
| [] => React.null
42+
| logs =>
43+
let content =
44+
logs
45+
->Belt.Array.mapWithIndex((i, (logLevel, log)) => {
46+
let log = Js.Array2.joinWith(log, " ")
47+
<pre
48+
key={RescriptCore.Int.toString(i)}
49+
className={switch logLevel {
50+
| #log => ""
51+
| #warn => "text-orange"
52+
| #error => "text-fire"
53+
}}>
54+
{React.string(log)}
55+
</pre>
56+
})
57+
->React.array
58+
59+
<div className="whitespace-pre-wrap p-4 block"> content </div>
60+
}}
61+
<EvalIFrame />
62+
</div>
63+
}

0 commit comments

Comments
 (0)