Add support for custom files in BugReporting
Reviewed By: astreet Differential Revision: D3287186 fbshipit-source-id: ce7000ac110b78a4fb94c66229046617c292675f
This commit is contained in:
parent
6a3fc86778
commit
610cfdc819
|
@ -13,11 +13,13 @@
|
||||||
|
|
||||||
const BugReportingNativeModule = require('NativeModules').BugReporting;
|
const BugReportingNativeModule = require('NativeModules').BugReporting;
|
||||||
const RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
|
const RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
|
||||||
|
const Map = require('Map');
|
||||||
|
|
||||||
import type EmitterSubscription from 'EmitterSubscription';
|
import type EmitterSubscription from 'EmitterSubscription';
|
||||||
|
|
||||||
type ExtraData = { [key: string]: string };
|
type ExtraData = { [key: string]: string };
|
||||||
type SourceCallback = () => string;
|
type SourceCallback = () => string;
|
||||||
|
type DebugData = { extras: ExtraData, files: ExtraData };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple class for collecting bug report data. Components can add sources that will be queried when a bug report
|
* A simple class for collecting bug report data. Components can add sources that will be queried when a bug report
|
||||||
|
@ -26,8 +28,8 @@ type SourceCallback = () => string;
|
||||||
* returned by `addSource` when they are unmounted.
|
* returned by `addSource` when they are unmounted.
|
||||||
*/
|
*/
|
||||||
class BugReporting {
|
class BugReporting {
|
||||||
|
static _extraSources: Map<string, SourceCallback> = new Map();
|
||||||
static _sources: Map<string, SourceCallback> = new Map();
|
static _fileSources: Map<string, SourceCallback> = new Map();
|
||||||
static _subscription: ?EmitterSubscription = null;
|
static _subscription: ?EmitterSubscription = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -49,11 +51,27 @@ class BugReporting {
|
||||||
* Conflicts trample with a warning.
|
* Conflicts trample with a warning.
|
||||||
*/
|
*/
|
||||||
static addSource(key: string, callback: SourceCallback): {remove: () => void} {
|
static addSource(key: string, callback: SourceCallback): {remove: () => void} {
|
||||||
if (BugReporting._sources.has(key)) {
|
return this._addSource(key, callback, BugReporting._extraSources);
|
||||||
console.warn(`BugReporting.addSource called multiple times for same key '${key}'`);
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maps a string key to a simple callback that should return a string payload to be attached
|
||||||
|
* to a bug report. Source callbacks are called when `collectExtraData` is called.
|
||||||
|
*
|
||||||
|
* Returns an object to remove the source when the component unmounts.
|
||||||
|
*
|
||||||
|
* Conflicts trample with a warning.
|
||||||
|
*/
|
||||||
|
static addFileSource(key: string, callback: SourceCallback): {remove: () => void} {
|
||||||
|
return this._addSource(key, callback, BugReporting._fileSources);
|
||||||
|
}
|
||||||
|
|
||||||
|
static _addSource(key: string, callback: SourceCallback, source: Map<string, SourceCallback>): {remove: () => void} {
|
||||||
|
if (source.has(key)) {
|
||||||
|
console.warn(`BugReporting.add* called multiple times for same key '${key}'`);
|
||||||
}
|
}
|
||||||
BugReporting._sources.set(key, callback);
|
source.set(key, callback);
|
||||||
return {remove: () => { BugReporting._sources.delete(key); }};
|
return {remove: () => { source.delete(key); }};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,16 +80,21 @@ class BugReporting {
|
||||||
* If available, this will call `NativeModules.BugReporting.setExtraData(extraData)`
|
* If available, this will call `NativeModules.BugReporting.setExtraData(extraData)`
|
||||||
* after collecting `extraData`.
|
* after collecting `extraData`.
|
||||||
*/
|
*/
|
||||||
static collectExtraData(): ExtraData {
|
static collectExtraData(): DebugData {
|
||||||
const extraData: ExtraData = {};
|
const extraData: ExtraData = {};
|
||||||
for (const [key, callback] of BugReporting._sources) {
|
for (const [key, callback] of BugReporting._extraSources) {
|
||||||
extraData[key] = callback();
|
extraData[key] = callback();
|
||||||
}
|
}
|
||||||
|
const fileData: ExtraData = {};
|
||||||
|
for (const [key, callback] of BugReporting._fileSources) {
|
||||||
|
fileData[key] = callback();
|
||||||
|
}
|
||||||
console.log('BugReporting extraData:', extraData);
|
console.log('BugReporting extraData:', extraData);
|
||||||
BugReportingNativeModule &&
|
BugReportingNativeModule &&
|
||||||
BugReportingNativeModule.setExtraData &&
|
BugReportingNativeModule.setExtraData &&
|
||||||
BugReportingNativeModule.setExtraData(extraData);
|
BugReportingNativeModule.setExtraData(extraData, fileData);
|
||||||
return extraData;
|
|
||||||
|
return { extras: extraData, files: fileData };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue