Add injection for error dialog (#9235)

This commit is contained in:
Dan Abramov
2017-03-22 18:21:12 +00:00
committed by GitHub
parent 563d58cd64
commit b69f73ff4b
@@ -12,8 +12,13 @@
'use strict';
const emptyFunction = require('fbjs/lib/emptyFunction');
const invariant = require('fbjs/lib/invariant');
import type {CapturedError} from 'ReactFiberScheduler';
let showDialog = emptyFunction;
function logCapturedError(capturedError: CapturedError): void {
if (__DEV__) {
const {
@@ -80,6 +85,22 @@ function logCapturedError(capturedError: CapturedError): void {
`React caught an error thrown by one of your components.\n\n${error.stack}`,
);
}
showDialog(capturedError);
}
exports.injection = {
injectDialog(fn: (CapturedError) => void) {
invariant(
showDialog === emptyFunction,
'The custom dialog was already injected.',
);
invariant(
typeof fn === 'function',
'Injected showDialog() must be a function.',
);
showDialog = fn;
},
};
exports.logCapturedError = logCapturedError;