From 545353dabf9e9b255af86b4f40854e4c3ffd2d5e Mon Sep 17 00:00:00 2001 From: ManishMadan2882 Date: Sun, 27 Apr 2025 03:42:28 +0530 Subject: [PATCH] (feat:mermaid) use contentLoaded to render --- frontend/src/components/MermaidRenderer.tsx | 44 +++++++++++---------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/frontend/src/components/MermaidRenderer.tsx b/frontend/src/components/MermaidRenderer.tsx index e4f97b19..eefe2e83 100644 --- a/frontend/src/components/MermaidRenderer.tsx +++ b/frontend/src/components/MermaidRenderer.tsx @@ -9,7 +9,7 @@ const MermaidRenderer: React.FC = ({ code, isDarkTheme, }) => { - const containerRef = useRef(null); + const diagramId = useRef(`mermaid-${crypto.randomUUID()}`); const status = useSelector(selectStatus); const [svgContent, setSvgContent] = useState(''); const [error, setError] = useState(null); @@ -19,28 +19,31 @@ const MermaidRenderer: React.FC = ({ useEffect(() => { if (status === 'loading' || !code) return; - // Initialize mermaid with the current theme + mermaid.initialize({ - startOnLoad: false, + startOnLoad: true, theme: isDarkTheme ? 'dark' : 'default', securityLevel: 'loose', suppressErrorRendering: true }); + const renderDiagram = async (): Promise => { try { - // Generate unique ID - const id = `mermaid-${crypto.randomUUID()}`; - - // Render the diagram - const { svg } = await mermaid.render(id, code); - if (containerRef.current) { - containerRef.current.innerHTML = svg; + const element = document.getElementById(diagramId.current); + if (element) { + element.removeAttribute('data-processed'); + element.innerHTML = code; + mermaid.contentLoaded(); + + const svgElement = element.querySelector('svg'); + if (svgElement) { + setSvgContent(svgElement.outerHTML); + } + setError(null); } - setSvgContent(svg); - setError(null); } catch (err) { setError( - `Failed to render Mermaid diagram: ${err instanceof Error ? err.message : String(err)}`, + `Failed to render Mermaid diagram: ${err instanceof Error ? err.message : String(err)}` ); setSvgContent(''); } @@ -269,15 +272,14 @@ const MermaidRenderer: React.FC = ({ ) : (
- {/* Show the diagram */} -
+
+
+ {code} +
+
- {/* Show the code when button is clicked */} {showCode && (
               {code}