mirror of
https://github.com/stashapp/stash.git
synced 2025-12-17 12:24:38 +03:00
51 lines
983 B
TypeScript
51 lines
983 B
TypeScript
import React from "react";
|
|
|
|
interface IErrorBoundaryProps {
|
|
children?: React.ReactNode;
|
|
}
|
|
|
|
type ErrorInfo = {
|
|
componentStack: string;
|
|
};
|
|
|
|
interface IErrorBoundaryState {
|
|
error?: Error;
|
|
errorInfo?: ErrorInfo;
|
|
}
|
|
|
|
export class ErrorBoundary extends React.Component<
|
|
IErrorBoundaryProps,
|
|
IErrorBoundaryState
|
|
> {
|
|
constructor(props: IErrorBoundaryProps) {
|
|
super(props);
|
|
this.state = {};
|
|
}
|
|
|
|
public componentDidCatch(error: Error, errorInfo: ErrorInfo) {
|
|
this.setState({
|
|
error,
|
|
errorInfo,
|
|
});
|
|
}
|
|
|
|
public render() {
|
|
if (this.state.errorInfo) {
|
|
// Error path
|
|
return (
|
|
<div>
|
|
<h2>Something went wrong.</h2>
|
|
<details className="error-message">
|
|
{this.state.error && this.state.error.toString()}
|
|
<br />
|
|
{this.state.errorInfo.componentStack}
|
|
</details>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
// Normally, just render children
|
|
return this.props.children;
|
|
}
|
|
}
|