react-native-firebase/tests-new/bridge/env/rn.js

64 lines
1.7 KiB
JavaScript
Raw Normal View History

import ReactNative from 'react-native';
2018-03-24 02:02:59 +00:00
import RNRestart from 'react-native-restart'; // Import package from node modules
const { Platform, NativeModules } = ReactNative;
2018-03-24 02:02:59 +00:00
const bridgeNode = global.__bridgeNode;
const INTERNAL_KEYS = ['context', 'rn', 'reload'];
2018-03-24 02:02:59 +00:00
2018-03-24 06:45:45 +00:00
// https://github.com/facebook/react-native/blob/master/React/Modules/RCTDevSettings.mm
2018-03-24 02:02:59 +00:00
if (Platform.OS === 'ios' && !bridgeNode) {
NativeModules.RCTDevSettings.setIsDebuggingRemotely(true);
} else {
if (Platform.OS === 'android' && !bridgeNode) {
// TODO warn to add:
// getReactNativeHost().getReactInstanceManager().getDevSupportManager().getDevSettings().setRemoteJSDebugEnabled(true);
// to MainApplication onCreate
}
2018-03-24 02:02:59 +00:00
if (bridgeNode) {
if (Platform.OS === 'ios') {
bridgeNode.setBridgeProperty(
'reload',
NativeModules.RCTDevSettings.reload
);
} else {
bridgeNode.setBridgeProperty('reload', RNRestart.Restart);
}
2018-03-24 07:13:58 +00:00
bridgeNode.setBridgeProperty('rn', ReactNative);
// keep alive
setInterval(() => {
// I don't do anything...
// BUT i am needed - otherwise RN's batched bridge starts to hang in detox... ???
}, 60);
}
2018-03-24 02:02:59 +00:00
}
global.__driftCheck = delay => {
setTimeout(bridgeNode._callbackDriftCheck, delay);
};
let hasInitialized = false;
2018-03-24 02:02:59 +00:00
export default {
2018-03-24 07:09:45 +00:00
/**
* Expose a property in node on the global.bridge object
* @param key
* @param value
2018-03-24 07:09:45 +00:00
*/
setBridgeProperty(key, value) {
if (INTERNAL_KEYS.includes(key)) return;
2018-03-24 02:02:59 +00:00
if (bridgeNode) {
bridgeNode.setBridgeProperty(key, value);
2018-03-24 07:09:45 +00:00
// notify ready on first setBridgeProp
if (!hasInitialized) {
bridgeNode._ready();
hasInitialized = true;
}
2018-03-24 02:02:59 +00:00
}
},
};