32 lines
732 B
TypeScript
32 lines
732 B
TypeScript
import React from 'react';
|
|
|
|
interface Props {
|
|
componentName: string;
|
|
children: React.ReactNode;
|
|
fallback?: React.ReactNode;
|
|
}
|
|
|
|
interface State {
|
|
hasError: boolean;
|
|
error: Error | null;
|
|
}
|
|
|
|
export class SystemErrorBoundary extends React.Component<Props, State> {
|
|
state: State = { hasError: false, error: null };
|
|
|
|
static getDerivedStateFromError(error: Error): Partial<State> {
|
|
return { hasError: true, error };
|
|
}
|
|
|
|
componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
|
|
console.error(`[OS] System component "${this.props.componentName}" crashed:`, error, errorInfo);
|
|
}
|
|
|
|
render() {
|
|
if (this.state.hasError) {
|
|
return this.props.fallback ?? null;
|
|
}
|
|
return this.props.children;
|
|
}
|
|
}
|