@@ -15,8 +15,11 @@ import ErrorView from './ErrorView';
15
15
import SearchingGitHubIssues from './SearchingGitHubIssues' ;
16
16
import SuspendingErrorView from './SuspendingErrorView' ;
17
17
import TimeoutView from './TimeoutView' ;
18
+ import CaughtErrorView from './CaughtErrorView' ;
18
19
import UnsupportedBridgeOperationError from 'react-devtools-shared/src/UnsupportedBridgeOperationError' ;
19
- import TimeoutError from 'react-devtools-shared/src/TimeoutError' ;
20
+ import TimeoutError from 'react-devtools-shared/src/errors/TimeoutError' ;
21
+ import UserError from 'react-devtools-shared/src/errors/UserError' ;
22
+ import UnknownHookError from 'react-devtools-shared/src/errors/UnknownHookError' ;
20
23
import { logEvent } from 'react-devtools-shared/src/Logger' ;
21
24
22
25
type Props = { |
@@ -34,6 +37,8 @@ type State = {|
34
37
hasError : boolean ,
35
38
isUnsupportedBridgeOperationError : boolean ,
36
39
isTimeout : boolean ,
40
+ isUserError : boolean ,
41
+ isUnknownHookError : boolean ,
37
42
| } ;
38
43
39
44
const InitialState : State = {
@@ -44,6 +49,8 @@ const InitialState: State = {
44
49
hasError : false ,
45
50
isUnsupportedBridgeOperationError : false ,
46
51
isTimeout : false ,
52
+ isUserError : false ,
53
+ isUnknownHookError : false ,
47
54
} ;
48
55
49
56
export default class ErrorBoundary extends Component < Props , State > {
@@ -58,6 +65,8 @@ export default class ErrorBoundary extends Component<Props, State> {
58
65
: null ;
59
66
60
67
const isTimeout = error instanceof TimeoutError ;
68
+ const isUserError = error instanceof UserError ;
69
+ const isUnknownHookError = error instanceof UnknownHookError ;
61
70
const isUnsupportedBridgeOperationError =
62
71
error instanceof UnsupportedBridgeOperationError ;
63
72
@@ -76,7 +85,9 @@ export default class ErrorBoundary extends Component<Props, State> {
76
85
errorMessage,
77
86
hasError : true ,
78
87
isUnsupportedBridgeOperationError ,
88
+ isUnknownHookError,
79
89
isTimeout,
90
+ isUserError,
80
91
} ;
81
92
}
82
93
@@ -111,6 +122,8 @@ export default class ErrorBoundary extends Component<Props, State> {
111
122
hasError,
112
123
isUnsupportedBridgeOperationError,
113
124
isTimeout,
125
+ isUserError,
126
+ isUnknownHookError,
114
127
} = this . state ;
115
128
116
129
if ( hasError ) {
@@ -133,6 +146,37 @@ export default class ErrorBoundary extends Component<Props, State> {
133
146
errorMessage = { errorMessage }
134
147
/>
135
148
) ;
149
+ } else if ( isUserError ) {
150
+ return (
151
+ < CaughtErrorView
152
+ callStack = { callStack }
153
+ componentStack = { componentStack }
154
+ errorMessage = { errorMessage || 'Error occured in inspected element' }
155
+ info = {
156
+ < >
157
+ React DevTools encountered an error while trying to inspect the
158
+ hooks. This is most likely caused by a developer error in the
159
+ currently inspected element. Please see your console for logged
160
+ error.
161
+ </ >
162
+ }
163
+ />
164
+ ) ;
165
+ } else if ( isUnknownHookError ) {
166
+ return (
167
+ < CaughtErrorView
168
+ callStack = { callStack }
169
+ componentStack = { componentStack }
170
+ errorMessage = { errorMessage || 'Encountered an unknown hook' }
171
+ info = {
172
+ < >
173
+ React DevTools encountered an unknown hook. This is probably
174
+ because the react-debug-tools package is out of date. To fix,
175
+ upgrade the React DevTools to the most recent version.
176
+ </ >
177
+ }
178
+ />
179
+ ) ;
136
180
} else {
137
181
return (
138
182
< ErrorView
@@ -141,10 +185,7 @@ export default class ErrorBoundary extends Component<Props, State> {
141
185
dismissError = {
142
186
canDismissProp || canDismissState ? this . _dismissError : null
143
187
}
144
- errorMessage = { errorMessage }
145
- isUnsupportedBridgeOperationError = {
146
- isUnsupportedBridgeOperationError
147
- } >
188
+ errorMessage = { errorMessage } >
148
189
< Suspense fallback = { < SearchingGitHubIssues /> } >
149
190
< SuspendingErrorView
150
191
callStack = { callStack }
0 commit comments