UNPKG

rn-pendo-sdk

Version:

Pendo Mobile React Native SDK

1 lines 6.7 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.PendoRNN=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _reactNative=require("react-native");var _common=require("./common");var _debouncer=require("./debouncer");var _pendoLogger=require("./pendoLogger");var _pendoTypes=require("./pendoTypes");var _traverseOptions=require("./traverseOptions");var _treeAnalyzer=require("./treeAnalyzer");var ReactNativePendo=_reactNative.NativeModules.ReactNativePendo;var emitter=null;if(_common.Utils.hasPendoNativeModule(false)){emitter=new _reactNative.NativeEventEmitter(ReactNativePendo);}var PendoRNN=exports.PendoRNN=function(){function PendoRNN(navigation,clickableElementsNativeIDsRegex,isComponentSetStateInvoked){(0,_classCallCheck2.default)(this,PendoRNN);if(!navigation){throw new Error('React Native Navigation requires NavigationRoot object!');}this.navigation=navigation;this.currentScreen=null;this.currentRootTag=null;this.clickableElementsNativeIDsRegex=clickableElementsNativeIDsRegex;this.isComponentSetStateInvoked=isComponentSetStateInvoked;this.subscriptions=[];this.debouncer=new _debouncer.Debouncer();this.addScanRequestListener(_common.Consts.kOnDynamicContentRequestAnalyzer,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeScreenDefaultDebouncerTime,true);this.addScanRequestListener(_common.Consts.kOnCaptureRequestAnalyzer,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeScreenNoDebouncerTime,true);this.addScanRequestListener(_common.Consts.kOnReturnFromAlertRequestAnalyzer,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeScreenNoDebouncerTime,false);this.addScanRequestListener(_common.Consts.kOnDefaultRequestAnalyzer,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeScreenNoDebouncerTime,false);this.addScanRequestListener(_common.Consts.kOnScreenContentChange,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeContentScreenDefaultDebouncerTime,true);this.addScanRequestListener(_common.Consts.kOnModalStateVisible,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeContentScreenDefaultDebouncerTime,false);this.addScanRequestListener(_common.Consts.kOnModalStateHidden,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeContentScreenDefaultDebouncerTime,false);}return(0,_createClass2.default)(PendoRNN,[{key:"addScanRequestListener",value:function addScanRequestListener(event,debouncerTime,shouldSetComponentState){var _this=this;if(emitter===null||!_common.Utils.hasPendoNativeModule(false)){return;}this.subscriptions.push(emitter.addListener(event,function(){if(_this.component){if(shouldSetComponentState){_this.component.setState(null);}var analyzeEvent=event===_common.Consts.kOnScreenContentChange?event:undefined;_this.debouncer.debounce(_this.analyze.bind(_this,analyzeEvent),debouncerTime,_debouncer.RequestOrigin.Native)();}}));}},{key:"hook",value:function hook(){var _this2=this;var pendoRNNInstance=this;this.navigation.events().registerComponentDidAppearListener(function(event){if(!_common.Utils.isSDKOperational(false)){return;}ReactNativePendo.shouldScanForDynamicElements(false);_pendoLogger.Logger.debug(`${_common.Consts.kRnnRegisterComponentDidAppearListener}: ${event}`);var screenName=_this2.getCurrentScreenName(event);if(screenName===_this2.currentScreen){return;}_this2.currentScreen=screenName;try{var _pendoRNNInstance$nav,_pendoRNNInstance$nav2,_pendoRNNInstance$nav3,_pendoRNNInstance$nav4,_pendoRNNInstance$nav5,_pendoRNNInstance$nav6;_this2.component=((_pendoRNNInstance$nav=pendoRNNInstance.navigation)==null?void 0:(_pendoRNNInstance$nav2=_pendoRNNInstance$nav.mock)==null?void 0:(_pendoRNNInstance$nav3=_pendoRNNInstance$nav2.store)==null?void 0:_pendoRNNInstance$nav3.getComponentInstance(event.componentId))||((_pendoRNNInstance$nav4=pendoRNNInstance.navigation)==null?void 0:(_pendoRNNInstance$nav5=_pendoRNNInstance$nav4.componentRegistry)==null?void 0:(_pendoRNNInstance$nav6=_pendoRNNInstance$nav5.store)==null?void 0:_pendoRNNInstance$nav6.getComponentInstance(event.componentId));if(_this2.component){var _componentInternal$_r,_componentInternal$_r2,_componentInternal$_r3,_componentInternal$_r4;var componentInternal=_this2.component;_this2.currentRootTag=(componentInternal==null?void 0:(_componentInternal$_r=componentInternal._reactInternalFiber)==null?void 0:(_componentInternal$_r2=_componentInternal$_r.memoizedProps)==null?void 0:_componentInternal$_r2.rootTag)||(componentInternal==null?void 0:(_componentInternal$_r3=componentInternal._reactInternals)==null?void 0:(_componentInternal$_r4=_componentInternal$_r3.memoizedProps)==null?void 0:_componentInternal$_r4.rootTag);if(_this2.isComponentSetStateInvoked){_this2.component.setState(null);}}else{_pendoLogger.Logger.debug(`${_common.Consts.kRnnRegisterComponentDidAppearListener} - component is null`);}}catch(e){_pendoLogger.Logger.warn(`${_common.Consts.kRnnRegisterComponentDidAppearListener} error ${e}`);return;}_this2.analyze();});}},{key:"getCurrentScreenName",value:function getCurrentScreenName(event){var screenName=event.componentName;if(event.passProps&&event.passProps.modalPosition){screenName=`${screenName}_${event.passProps.modalPosition}`;}return screenName;}},{key:"analyze",value:function analyze(event){if(!_common.Utils.isSDKOperational(false)){return;}if(this.currentScreen&&this.currentRootTag){var options=new _traverseOptions.TraverseOptions({reactComponent:this.component,integrationType:_pendoTypes.IntegrationType.reactNativeNavigation,collectAllClickableElements:true,startFromRoot:true,screenId:this.currentScreen});if(this.clickableElementsNativeIDsRegex){options.clickableElementsNativeIDsRegex=this.clickableElementsNativeIDsRegex;}var results=(0,_treeAnalyzer.analyzeTree)(options,_traverseOptions.DEFAULT_TRAVERSE_OPTIONS);if(results.error==null){var info={reactPlugin:_pendoTypes.NavigationLibraryType.ReactNativeNavigation,apiTriggeredScan:false};var clickableElements=results==null?void 0:results.getClickableElements();if(event===_common.Consts.kOnScreenContentChange){_pendoLogger.Logger.debug('analyze: scan triggered by screenContentChanged');info.apiTriggeredScan=true;}ReactNativePendo.screenChanged(this.currentScreen,[this.currentRootTag],clickableElements,info);}else{_common.Utils.reportScanFailure(`analyze (RNN) screenId:${this.currentScreen}. Original error: ${results.error}`);}}else{_common.Utils.reportScanFailure(`RNN analyze (request from native to scan screen) - failed to get tree info from JS - screen: ${this.currentScreen} tag: ${this.currentRootTag}`);}}}]);}();