import React from 'react'; type WindowErrorBoundaryProps = { title?: string; children: React.ReactNode; }; type WindowErrorBoundaryState = { error: Error | null; }; /** * Ловит падения React в дочерних окнах (НПС, материалы, редактор сцены…), * чтобы вместо чёрного экрана показать сообщение и кнопку перезагрузки. */ export class WindowErrorBoundary extends React.Component< WindowErrorBoundaryProps, WindowErrorBoundaryState > { state: WindowErrorBoundaryState = { error: null }; static getDerivedStateFromError(error: Error): WindowErrorBoundaryState { return { error }; } override componentDidCatch(error: Error, info: React.ErrorInfo): void { console.error('[WindowErrorBoundary]', error, info.componentStack); } private handleReload = (): void => { this.setState({ error: null }); window.location.reload(); }; override render(): React.ReactNode { if (!this.state.error) return this.props.children; const title = this.props.title ?? 'Ошибка окна'; const message = this.state.error.message || String(this.state.error); return (
{title}
{message}
); } }