UNPKG

rn-pendo-sdk

Version:

Pendo Mobile React Native SDK

1 lines 9.25 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.BasePNDContainer=void 0;var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _get2=_interopRequireDefault(require("@babel/runtime/helpers/get"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _react=require("react");var _reactNative=require("react-native");var _common=require("./common");var _debouncer=require("./debouncer");var _fiberTypes=require("./fiber-types");var _pendoLogger=require("./pendoLogger");var _scanCoordinator=require("./scanCoordinator");var _traverseOptions=require("./traverseOptions");var _treeAnalyzer=require("./treeAnalyzer");function _callSuper(t,o,e){return o=(0,_getPrototypeOf2.default)(o),(0,_possibleConstructorReturn2.default)(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],(0,_getPrototypeOf2.default)(t).constructor):o.apply(t,e));}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _superPropGet(t,o,e,r){var p=(0,_get2.default)((0,_getPrototypeOf2.default)(1&r?t.prototype:t),o,e);return 2&r&&"function"==typeof p?function(t){return p.apply(e,t);}:p;}var ReactNativePendo=_reactNative.NativeModules.ReactNativePendo;var emitter=null;if(_common.Utils.hasPendoNativeModule(false)){emitter=new _reactNative.NativeEventEmitter(ReactNativePendo);}var BasePNDContainer=exports.BasePNDContainer=function(_Component){function BasePNDContainer(props,integrationType,options){var _this;(0,_classCallCheck2.default)(this,BasePNDContainer);_this=_callSuper(this,BasePNDContainer,[props]);_this.integrationType=null;_this.lastState=null;_this.integrationType=integrationType;_this.traversalOptions=_common.Utils.mergeWithDefaultTraverseOptions(options);_this.traversalOptions.integrationType=integrationType;_this.pndState=(0,_react.createRef)();_this.setWrappedComponentRef=_this.setWrappedComponentRef.bind(_this);_this.subscriptions=[];_this.debouncer=new _debouncer.Debouncer();return _this;}(0,_inherits2.default)(BasePNDContainer,_Component);return(0,_createClass2.default)(BasePNDContainer,[{key:"executeAnalyzer",value:function executeAnalyzer(debouncerTime,requestOrigin,event){var _this$pndState;if(!_common.Utils.isSDKOperational(false)){return;}ReactNativePendo.shouldScanForDynamicElements(false);var state=this.getCurrentState();if(state==null&&((_this$pndState=this.pndState)==null?void 0:_this$pndState.current)!=null){state=this.pndState.current.getRootState();}this.debouncer.debounce(this.analyze.bind(this,this,state,event),debouncerTime,requestOrigin)();}},{key:"setCurrentState",value:function setCurrentState(state){this.lastState=state;}},{key:"getCurrentState",value:function getCurrentState(){return this.lastState;}},{key:"setWrappedComponentRef",value:function setWrappedComponentRef(ref){if(!this.pndState){this.pndState=(0,_react.createRef)();}if(ref==null){return;}if(this.pndState){this.pndState.current=ref;}else{_pendoLogger.Logger.info('Failed to initialize pndState');return;}var _ref=this.props||{},forwardedRef=_ref.forwardedRef;if(forwardedRef&&ref){try{if(typeof forwardedRef==='function'){forwardedRef(ref);}else if(typeof forwardedRef==='object'){if('current'in forwardedRef){forwardedRef.current=ref;}}}catch(error){_pendoLogger.Logger.error('Error calling forwardedRef callback',error);}}}},{key:"componentDidMount",value:function componentDidMount(){this.addScanRequestListener(_common.Consts.kOnDynamicContentRequestAnalyzer,this.traversalOptions.analyzeScreenDefaultDebouncerTime,true);this.addScanRequestListener(_common.Consts.kOnCaptureRequestAnalyzer,this.traversalOptions.analyzeScreenNoDebouncerTime,true);this.addScanRequestListener(_common.Consts.kOnReturnFromAlertRequestAnalyzer,this.traversalOptions.analyzeScreenNoDebouncerTime,false);this.addScanRequestListener(_common.Consts.kOnDefaultRequestAnalyzer,this.traversalOptions.analyzeScreenNoDebouncerTime,false);this.addScanRequestListener(_common.Consts.kOnScreenContentChange,this.traversalOptions.analyzeContentScreenDefaultDebouncerTime,true);this.addScanRequestListener(_common.Consts.kOnModalStateVisible,this.traversalOptions.analyzeContentScreenDefaultDebouncerTime,false);this.addScanRequestListener(_common.Consts.kOnModalStateHidden,this.traversalOptions.analyzeContentScreenDefaultDebouncerTime,false);this.calibrateAnalyzer();}},{key:"componentWillUnmount",value:function componentWillUnmount(){if(this.subscriptions){for(var subscription of this.subscriptions){subscription==null?void 0:subscription.remove();}}this.subscriptions=[];this.debouncer.clearTimer();this.pndState.current=null;this.lastState=null;}},{key:"addScanRequestListener",value:function addScanRequestListener(event,debouncerTime,shouldSetComponentState){var _this2=this;if(emitter===null||!_common.Utils.hasPendoNativeModule(false)){return;}_pendoLogger.Logger.debug(`addScanRequestListener: ${event}`);this.subscriptions.push(emitter.addListener(event,function(_context){if(shouldSetComponentState){_superPropGet(BasePNDContainer,"setState",_this2,3)([null]);}_pendoLogger.Logger.debug(`addScanRequestListener responds to: ${event}`);_this2.executeAnalyzer(debouncerTime,_debouncer.RequestOrigin.Native,event);}));}},{key:"calibrateAnalyzer",value:function calibrateAnalyzer(){_pendoLogger.Logger.debug('calibrateAnalyzer');if(_common.Utils.isIOS()){this.traversalOptions.ios.nativeNodeIterationCount=_fiberTypes.TagFinder.resetIterationCount();}}},{key:"analyze",value:function analyze(component,state,event){var integrationType=this.integrationType;if(event===_common.Consts.kOnModalStateVisible||event===_common.Consts.kOnModalStateHidden){_pendoLogger.Logger.debug(`onModalStateChange ${event} event`);}var scanCoordinator=_scanCoordinator.ScanCoordinator.getInstance();if(integrationType&&!scanCoordinator.requestScanWithContext(integrationType,event)){return;}try{if(component==null){_pendoLogger.Logger.info('component must not be null. \n no analytics will be collected \n please refer to new installation instruction ');return;}if(state==null&&event!==_common.Consts.kOnModalStateVisible){_pendoLogger.Logger.info('State must not be null. \n any analytics on this screen would be ignored \n please refer to new installation instruction ');return;}var results;var drawerOpen=_fiberTypes.TagFinder.isDrawerOpen(state);if(drawerOpen){var _options=new _traverseOptions.TraverseOptions({reactComponent:component,screenId:(state==null?void 0:state.key)||'',isDrawerVisible:drawerOpen,integrationType:this.integrationType});results=(0,_treeAnalyzer.analyzeTree)(_options,this.traversalOptions);if(results.drawerTag&&results.error==null){results.drawerOpen=drawerOpen;results.retroactiveScreenId=_common.Consts.kDrawer;results.nativeIDs=this.traversalOptions.nativeIDs;_pendoLogger.Logger.debug('analyze: Calling screen changed from drawer');ReactNativePendo.screenChanged(_common.Consts.kDrawer,[results.drawerTag],results.getClickableElements(),results.info());}else{_common.Utils.reportScanFailure(`analyze (drawer) failed. Original error: ${results.error}`);}return;}var screenData=_common.Utils.retroactiveScreenId(state);var options=new _traverseOptions.TraverseOptions({reactComponent:component,screenId:screenData.key,integrationType:this.integrationType,startFromRoot:event===_common.Consts.kOnModalStateVisible});results=(0,_treeAnalyzer.analyzeTree)(options,this.traversalOptions);if(results.rootTags.length>0&&results.error==null){var _results$clickableEle;var screenName=screenData.routeName;results.retroactiveScreenId=screenData.screenId;results.nativeIDs=this.traversalOptions.nativeIDs;if(event===_common.Consts.kOnScreenContentChange){_pendoLogger.Logger.debug('analyze: scan triggered by screenContentChanged');results.apiTriggeredScan=true;}results.retroactiveScreenId=screenData.screenId;results.screenHierarchy=screenData.routeName;if(results.modalTag&&results.modalTag>0){_pendoLogger.Logger.debug(`analyzeTree - visible modalTag: ${results.modalTag}`);screenName=_common.Consts.kModal;results.retroactiveScreenId=screenName;}_pendoLogger.Logger.debug(`analyzeTree - screenId: ${results.retroactiveScreenId}, rootTags: ${results.rootTags}, numClickableElements:${(_results$clickableEle=results.clickableElements)==null?void 0:_results$clickableEle.size}`);ReactNativePendo.screenChanged(screenName,results.info().rootTags,results.getClickableElements(),results.info());}else{_common.Utils.reportScanFailure(`analyze (simple flow) screenId:${screenData==null?void 0:screenData.routeName}. Original error: ${results.error}`);}}finally{scanCoordinator.completeScan();if(_common.Utils.hasPendoNativeModule(false)){ReactNativePendo.shouldScanForDynamicElements(true);}}}}]);}(_react.Component);