mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			34 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | /** | ||
|  |  * @fileoverview ErrorBoundary component for React. | ||
|  |  * This component was extracted from the main markdown renderer. | ||
|  |  * It catches JavaScript errors anywhere in its child component tree, | ||
|  |  * logs those errors, and displays a fallback UI instead of the crashed component tree. | ||
|  |  * Primarily used around complex rendering logic like ECharts or SVG within Markdown. | ||
|  |  */ | ||
|  | import React, { Component } from 'react' | ||
|  | // **Add an ECharts runtime error handler
 | ||
|  | // Avoid error #7832 (Crash when ECharts accesses undefined objects)
 | ||
|  | // This can happen when a component attempts to access an undefined object that references an unregistered map, causing the program to crash.
 | ||
|  | 
 | ||
|  | export default class ErrorBoundary extends Component { | ||
|  |   constructor(props: any) { | ||
|  |     super(props) | ||
|  |     this.state = { hasError: false } | ||
|  |   } | ||
|  | 
 | ||
|  |   componentDidCatch(error: any, errorInfo: any) { | ||
|  |     this.setState({ hasError: true }) | ||
|  |     console.error(error, errorInfo) | ||
|  |   } | ||
|  | 
 | ||
|  |   render() { | ||
|  |     // eslint-disable-next-line ts/ban-ts-comment
 | ||
|  |     // @ts-expect-error
 | ||
|  |     if (this.state.hasError) | ||
|  |       return <div>Oops! An error occurred. This could be due to an ECharts runtime error or invalid SVG content. <br />(see the browser console for more information)</div> | ||
|  |     // eslint-disable-next-line ts/ban-ts-comment
 | ||
|  |     // @ts-expect-error
 | ||
|  |     return this.props.children | ||
|  |   } | ||
|  | } |