fix: #1294 fallback while mermaid render fails

This commit is contained in:
Yidadaa 2023-05-08 22:18:19 +08:00
parent 696e84ea88
commit c394b21423
1 changed files with 12 additions and 6 deletions

View File

@ -12,15 +12,21 @@ import mermaid from "mermaid";
import LoadingIcon from "../icons/three-dots.svg";
import React from "react";
export function Mermaid(props: { code: string }) {
export function Mermaid(props: { code: string; onError: () => void }) {
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
if (props.code && ref.current) {
mermaid.run({
nodes: [ref.current],
});
mermaid
.run({
nodes: [ref.current],
})
.catch((e) => {
props.onError();
console.error("[Mermaid] ", e.message);
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.code]);
function viewSvgInNewWindow() {
@ -38,7 +44,7 @@ export function Mermaid(props: { code: string }) {
return (
<div
className="no-dark"
style={{ cursor: "pointer" }}
style={{ cursor: "pointer", overflow: "auto" }}
ref={ref}
onClick={() => viewSvgInNewWindow()}
>
@ -60,7 +66,7 @@ export function PreCode(props: { children: any }) {
}, [props.children]);
if (mermaidCode) {
return <Mermaid code={mermaidCode} />;
return <Mermaid code={mermaidCode} onError={() => setMermaidCode("")} />;
}
return (