2020-07-18 16:48:29 +02:00
|
|
|
import React from 'react'
|
|
|
|
import DebugIcon from '@material-ui/icons/PlayCircleOutline'
|
|
|
|
import InfoIcon from '@material-ui/icons/Info'
|
|
|
|
import WarningIcon from '@material-ui/icons/ErrorOutline'
|
|
|
|
import ErrorIcon from '@material-ui/icons/HighlightOff'
|
|
|
|
import Markdown from 'react-markdown'
|
|
|
|
|
2020-07-19 13:01:01 +02:00
|
|
|
const Event = ({ type, event }) => {
|
|
|
|
const formatError = (err) => (
|
|
|
|
<details>
|
|
|
|
<summary>
|
2021-05-22 18:17:25 +02:00
|
|
|
<Markdown className="react-markdown dense">
|
|
|
|
{`
|
2020-07-19 13:01:01 +02:00
|
|
|
\`\`\`js
|
|
|
|
${err.name}: ${err.message}
|
|
|
|
\`\`\`
|
2021-05-22 18:17:25 +02:00
|
|
|
`}</Markdown>
|
2020-07-19 13:01:01 +02:00
|
|
|
</summary>
|
2021-05-22 18:17:25 +02:00
|
|
|
<Markdown className="react-markdown">
|
|
|
|
{`Error in \`${err.fileName}\` line \`${err.lineNumber}:${err.columnNumber}\``}
|
|
|
|
</Markdown>
|
|
|
|
<Markdown className="react-markdown">
|
|
|
|
{`
|
2020-07-19 13:01:01 +02:00
|
|
|
\`\`\`js
|
|
|
|
${err.stack}
|
|
|
|
\`\`\`
|
2021-05-22 18:17:25 +02:00
|
|
|
`}</Markdown>
|
2020-07-19 13:01:01 +02:00
|
|
|
</details>
|
|
|
|
)
|
|
|
|
|
|
|
|
const formatObject = (obj) => (
|
2021-05-22 18:17:25 +02:00
|
|
|
<Markdown className="react-markdown">
|
|
|
|
{`
|
2020-07-19 13:01:01 +02:00
|
|
|
\`\`\`json
|
|
|
|
${JSON.stringify(obj, null, 2)}
|
|
|
|
\`\`\`
|
2021-05-22 18:17:25 +02:00
|
|
|
`}</Markdown>
|
2020-07-19 13:01:01 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
const formatEvent = (e, data = false) => {
|
|
|
|
if (!data) data = []
|
|
|
|
if (typeof e === 'object') {
|
|
|
|
if (e instanceof Error === true) data.push(formatError(e))
|
|
|
|
else if (Array.isArray(e)) {
|
|
|
|
for (const subevent of e) data.concat(formatEvent(subevent, data))
|
|
|
|
} else data.push(formatObject(e))
|
2021-05-22 18:17:25 +02:00
|
|
|
} else data.push(<Markdown className="react-markdown">{e}</Markdown>)
|
2020-07-19 13:01:01 +02:00
|
|
|
|
|
|
|
return data
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div className={`draft-event ${type}`}>
|
|
|
|
<div className={`icon ${type}`}>
|
|
|
|
{type === 'debug' && <DebugIcon fontSize="small" />}
|
|
|
|
{type === 'info' && <InfoIcon fontSize="small" />}
|
|
|
|
{type === 'warning' && <WarningIcon fontSize="small" />}
|
|
|
|
{type === 'error' && <ErrorIcon fontSize="small" />}
|
|
|
|
</div>
|
|
|
|
{formatEvent(event)}
|
2020-07-18 16:48:29 +02:00
|
|
|
</div>
|
2020-07-19 13:01:01 +02:00
|
|
|
)
|
|
|
|
}
|
2020-07-18 16:48:29 +02:00
|
|
|
|
|
|
|
export default Event
|