Skip to content

Commit 2693435

Browse files
authored
Merge pull request #6508 from marmelab/fix-error-coundary-type
[TypeScript] Fix Error prop types
2 parents 8219644 + 92ff269 commit 2693435

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

packages/ra-ui-materialui/src/layout/Error.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -146,15 +146,15 @@ const Error = (props: ErrorProps): JSX.Element => {
146146
Error.propTypes = {
147147
classes: PropTypes.object,
148148
className: PropTypes.string,
149-
error: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired,
149+
error: PropTypes.object.isRequired,
150150
errorInfo: PropTypes.object,
151151
title: TitlePropType,
152152
};
153153

154154
export interface ErrorProps extends HtmlHTMLAttributes<HTMLDivElement> {
155155
classes?: ClassesOverride<typeof useStyles>;
156156
className?: string;
157-
error: any;
157+
error: Error;
158158
errorInfo?: ErrorInfo;
159159
title?: string;
160160
}

packages/ra-ui-materialui/src/layout/Layout.tsx

+18-16
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class LayoutWithoutTheme extends Component<
7979
LayoutWithoutThemeProps,
8080
LayoutState
8181
> {
82-
state = { hasError: false, errorMessage: null, errorInfo: null };
82+
state: LayoutState = { hasError: false, error: null, errorInfo: null };
8383

8484
constructor(props) {
8585
super(props);
@@ -95,8 +95,8 @@ class LayoutWithoutTheme extends Component<
9595
});
9696
}
9797

98-
componentDidCatch(errorMessage, errorInfo) {
99-
this.setState({ hasError: true, errorMessage, errorInfo });
98+
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
99+
this.setState({ hasError: true, error, errorInfo });
100100
}
101101

102102
render() {
@@ -105,7 +105,7 @@ class LayoutWithoutTheme extends Component<
105105
children,
106106
classes,
107107
className,
108-
error,
108+
error: ErrorComponent,
109109
dashboard,
110110
logout,
111111
menu,
@@ -120,7 +120,7 @@ class LayoutWithoutTheme extends Component<
120120
staticContext,
121121
...props
122122
} = this.props;
123-
const { hasError, errorMessage, errorInfo } = this.state;
123+
const { hasError, error, errorInfo } = this.state;
124124
return (
125125
<>
126126
<div
@@ -138,13 +138,15 @@ class LayoutWithoutTheme extends Component<
138138
}),
139139
})}
140140
<div id="main-content" className={classes.content}>
141-
{hasError
142-
? createElement(error, {
143-
error: errorMessage,
144-
errorInfo,
145-
title,
146-
})
147-
: children}
141+
{hasError ? (
142+
<ErrorComponent
143+
error={error}
144+
errorInfo={errorInfo}
145+
title={title}
146+
/>
147+
) : (
148+
children
149+
)}
148150
</div>
149151
</main>
150152
</div>
@@ -186,8 +188,8 @@ export interface LayoutProps
186188
classes?: any;
187189
className?: string;
188190
error?: ComponentType<{
189-
error?: string;
190-
errorInfo?: React.ErrorInfo;
191+
error?: Error;
192+
errorInfo?: ErrorInfo;
191193
title?: string | ReactElement<any>;
192194
}>;
193195
menu?: ComponentType<MenuProps>;
@@ -198,8 +200,8 @@ export interface LayoutProps
198200

199201
export interface LayoutState {
200202
hasError: boolean;
201-
errorMessage: string;
202-
errorInfo: ErrorInfo;
203+
error?: Error;
204+
errorInfo?: ErrorInfo;
203205
}
204206

205207
interface LayoutWithoutThemeProps

0 commit comments

Comments
 (0)