|  | @@ -1,6 +1,5 @@
 | 
	
		
			
				|  |  |  import React, { useEffect, useRef, useState } from 'react'
 | 
	
		
			
				|  |  |  import mermaid from 'mermaid'
 | 
	
		
			
				|  |  | -import { t } from 'i18next'
 | 
	
		
			
				|  |  |  import CryptoJS from 'crypto-js'
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  let mermaidAPI: any
 | 
	
	
		
			
				|  | @@ -32,6 +31,14 @@ const Flowchart = React.forwardRef((props: {
 | 
	
		
			
				|  |  |    const chartId = useRef(`flowchart_${CryptoJS.MD5(props.PrimitiveCode).toString()}`)
 | 
	
		
			
				|  |  |    const [isRender, setIsRender] = useState(true)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  const clearFlowchartCache = () => {
 | 
	
		
			
				|  |  | +    for (let i = localStorage.length - 1; i >= 0; --i) {
 | 
	
		
			
				|  |  | +      const key = localStorage.key(i)
 | 
	
		
			
				|  |  | +      if (key && key.startsWith('flowchart_'))
 | 
	
		
			
				|  |  | +        localStorage.removeItem(key)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |    const renderFlowchart = async (PrimitiveCode: string) => {
 | 
	
		
			
				|  |  |      try {
 | 
	
		
			
				|  |  |        const cachedSvg: any = localStorage.getItem(chartId.current)
 | 
	
	
		
			
				|  | @@ -44,15 +51,15 @@ const Flowchart = React.forwardRef((props: {
 | 
	
		
			
				|  |  |          const svgGraph = await mermaidAPI.render(chartId.current, PrimitiveCode)
 | 
	
		
			
				|  |  |          // eslint-disable-next-line @typescript-eslint/no-use-before-define
 | 
	
		
			
				|  |  |          const base64Svg: any = await svgToBase64(svgGraph.svg)
 | 
	
		
			
				|  |  | -        localStorage.setItem(chartId.current, base64Svg)
 | 
	
		
			
				|  |  |          setSvgCode(base64Svg)
 | 
	
		
			
				|  |  | +        if (chartId.current && base64Svg)
 | 
	
		
			
				|  |  | +          localStorage.setItem(chartId.current, base64Svg)
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      catch (error) {
 | 
	
		
			
				|  |  | -      localStorage.clear()
 | 
	
		
			
				|  |  | -      // eslint-disable-next-line @typescript-eslint/ban-ts-comment
 | 
	
		
			
				|  |  | -      // @ts-expect-error
 | 
	
		
			
				|  |  | -      console.error(error.toString())
 | 
	
		
			
				|  |  | +      clearFlowchartCache()
 | 
	
		
			
				|  |  | +      // eslint-disable-next-line @typescript-eslint/no-use-before-define
 | 
	
		
			
				|  |  | +      handleReRender()
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -70,7 +77,9 @@ const Flowchart = React.forwardRef((props: {
 | 
	
		
			
				|  |  |    const handleReRender = () => {
 | 
	
		
			
				|  |  |      setIsRender(false)
 | 
	
		
			
				|  |  |      setSvgCode(null)
 | 
	
		
			
				|  |  | -    localStorage.removeItem(chartId.current)
 | 
	
		
			
				|  |  | +    if (chartId.current)
 | 
	
		
			
				|  |  | +      localStorage.removeItem(chartId.current)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      setTimeout(() => {
 | 
	
		
			
				|  |  |        setIsRender(true)
 | 
	
		
			
				|  |  |        renderFlowchart(props.PrimitiveCode)
 | 
	
	
		
			
				|  | @@ -90,9 +99,11 @@ const Flowchart = React.forwardRef((props: {
 | 
	
		
			
				|  |  |      // @ts-expect-error
 | 
	
		
			
				|  |  |      <div ref={ref}>
 | 
	
		
			
				|  |  |        {
 | 
	
		
			
				|  |  | -        isRender && <div id={chartId.current} className="mermaid" style={style}>{svgCode && (<img src={svgCode} style={{ width: '100%', height: 'auto' }} alt="Mermaid chart" />)}</div>
 | 
	
		
			
				|  |  | +        isRender
 | 
	
		
			
				|  |  | +          && <div id={chartId.current} className="mermaid" style={style}>
 | 
	
		
			
				|  |  | +            {svgCode && <img src={svgCode} style={{ width: '100%', height: 'auto' }} alt="Mermaid chart" />}
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  | -      <button onClick={handleReRender}>{t('appApi.merMaind.rerender')}</button>
 | 
	
		
			
				|  |  |      </div>
 | 
	
		
			
				|  |  |    )
 | 
	
		
			
				|  |  |  })
 |