Skip to content

Commit 42b6de2

Browse files
committed
Merge branch 'bot_ui_mermaid_diagram' into 'master'
Bot UI: Render mermaid diagram See merge request postgres-ai/database-lab!904
2 parents e7e7dac + 818887c commit 42b6de2

File tree

4 files changed

+515
-5
lines changed

4 files changed

+515
-5
lines changed

ui/packages/platform/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"jwt-encode": "^1.0.1",
5252
"lodash": "^4.17.15",
5353
"md5": "^2.2.1",
54+
"mermaid": "^11.0.2",
5455
"mobx": "^6.3.2",
5556
"mobx-react-lite": "^3.2.0",
5657
"moment": "^2.24.0",
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import React, { useEffect } from 'react';
2+
import mermaid from 'mermaid';
3+
4+
type MermaidDiagramProps = {
5+
chart: string
6+
}
7+
8+
export const MermaidDiagram = React.memo((props: MermaidDiagramProps) => {
9+
const { chart } = props;
10+
mermaid.initialize({ startOnLoad: true });
11+
useEffect(() => {
12+
mermaid.contentLoaded();
13+
}, [chart]);
14+
return <div className="mermaid">{chart}</div>;
15+
})

ui/packages/platform/src/pages/Bot/Messages/Message/Message.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { DebugDialog } from "../../DebugDialog/DebugDialog";
1010
import { CodeBlock } from "./CodeBlock";
1111
import { disallowedHtmlTagsForMarkdown, permalinkLinkBuilder } from "../../utils";
1212
import { StateMessage } from "../../../../types/api/entities/bot";
13+
import { MermaidDiagram } from "./MermaidDiagram";
1314

1415

1516
type BaseMessageProps = {
@@ -275,11 +276,17 @@ export const Message = React.memo((props: MessageProps) => {
275276
img: ({ node, ...props }) => <img style={{ maxWidth: '60%' }} {...props} />,
276277
code: ({ node, inline, className, children, ...props }) => {
277278
const match = /language-(\w+)/.exec(className || '');
278-
return !inline ? (
279-
<CodeBlock value={String(children).replace(/\n$/, '')} language={match?.[1]} />
280-
) : (
281-
<code {...props}>{children}</code>
282-
);
279+
const matchMermaid = /language-mermaid/.test(className || '');
280+
if (!inline) {
281+
return (
282+
<>
283+
{matchMermaid && <MermaidDiagram chart={String(children).replace(/\n$/, '')} />}
284+
<CodeBlock value={String(children).replace(/\n$/, '')} language={match?.[1]} />
285+
</>
286+
)
287+
} else {
288+
return <code {...props}>{children}</code>
289+
}
283290
},
284291
}), []);
285292

0 commit comments

Comments
 (0)