diff --git a/packages/ra-ui-materialui/src/layout/Error.tsx b/packages/ra-ui-materialui/src/layout/Error.tsx index 071f20568d6..feb733aab53 100644 --- a/packages/ra-ui-materialui/src/layout/Error.tsx +++ b/packages/ra-ui-materialui/src/layout/Error.tsx @@ -146,7 +146,7 @@ const Error = (props: ErrorProps): JSX.Element => { Error.propTypes = { classes: PropTypes.object, className: PropTypes.string, - error: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired, + error: PropTypes.object.isRequired, errorInfo: PropTypes.object, title: TitlePropType, }; @@ -154,7 +154,7 @@ Error.propTypes = { export interface ErrorProps extends HtmlHTMLAttributes { classes?: ClassesOverride; className?: string; - error: any; + error: Error; errorInfo?: ErrorInfo; title?: string; } diff --git a/packages/ra-ui-materialui/src/layout/Layout.tsx b/packages/ra-ui-materialui/src/layout/Layout.tsx index 71109979ca8..d656fc36189 100644 --- a/packages/ra-ui-materialui/src/layout/Layout.tsx +++ b/packages/ra-ui-materialui/src/layout/Layout.tsx @@ -79,7 +79,7 @@ class LayoutWithoutTheme extends Component< LayoutWithoutThemeProps, LayoutState > { - state = { hasError: false, errorMessage: null, errorInfo: null }; + state: LayoutState = { hasError: false, error: null, errorInfo: null }; constructor(props) { super(props); @@ -95,8 +95,8 @@ class LayoutWithoutTheme extends Component< }); } - componentDidCatch(errorMessage, errorInfo) { - this.setState({ hasError: true, errorMessage, errorInfo }); + componentDidCatch(error: Error, errorInfo: ErrorInfo) { + this.setState({ hasError: true, error, errorInfo }); } render() { @@ -105,7 +105,7 @@ class LayoutWithoutTheme extends Component< children, classes, className, - error, + error: ErrorComponent, dashboard, logout, menu, @@ -120,7 +120,7 @@ class LayoutWithoutTheme extends Component< staticContext, ...props } = this.props; - const { hasError, errorMessage, errorInfo } = this.state; + const { hasError, error, errorInfo } = this.state; return ( <>
- {hasError - ? createElement(error, { - error: errorMessage, - errorInfo, - title, - }) - : children} + {hasError ? ( + + ) : ( + children + )}
@@ -186,8 +188,8 @@ export interface LayoutProps classes?: any; className?: string; error?: ComponentType<{ - error?: string; - errorInfo?: React.ErrorInfo; + error?: Error; + errorInfo?: ErrorInfo; title?: string | ReactElement; }>; menu?: ComponentType; @@ -198,8 +200,8 @@ export interface LayoutProps export interface LayoutState { hasError: boolean; - errorMessage: string; - errorInfo: ErrorInfo; + error?: Error; + errorInfo?: ErrorInfo; } interface LayoutWithoutThemeProps