UNPKG

rn-pendo-sdk

Version:

Pendo Mobile React Native SDK

1 lines 8.68 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 _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.ios.integrationType=integrationType;_this.traversalOptions.android.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:"setCurrentState",value:function setCurrentState(state){this.lastState=state;}},{key:"getCurrentState",value:function getCurrentState(){return this.lastState;}},{key:"setWrappedComponentRef",value:function setWrappedComponentRef(ref){var _this$props;if(this.pndState==null){this.pndState=(0,_react.createRef)();}this.pndState.current=ref;if((_this$props=this.props)!=null&&_this$props.forwardedRef){if(typeof this.props.forwardedRef==='function'){this.props.forwardedRef(ref);}else{this.props.forwardedRef.current=ref;}}}},{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);}},{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();}},{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}`);var analyzeEvent=event===_common.Consts.kOnScreenContentChange||event===_common.Consts.kOnModalStateVisible||event===_common.Consts.kOnModalStateHidden?event:undefined;_this2.debouncer.debounce(_this2.executeAnalyzer.bind(_this2,analyzeEvent),debouncerTime,_debouncer.RequestOrigin.Native)();}));}},{key:"isDrawerOpen",value:function isDrawerOpen(state){if(state==null){return false;}if(state.history&&state.type===_common.Consts.kDrawer){return state.history.some(function(it){return it.type===_common.Consts.kDrawer;});}if(state.routes&&_common.Utils.isNotEmpty(state.index)){return this.isDrawerOpen(state.routes[state.index].state);}return false;}},{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){if(state==null){_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=this.isDrawerOpen(state);if(drawerOpen){var _options=new _traverseOptions.TraverseOptions({reactComponent:component,screenId: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{var errorMessage=`analyze (drawer) failed. Original error: ${results.error}`;_pendoLogger.Logger.warn(errorMessage);var userInfo={errorMessage:errorMessage};ReactNativePendo.sendFailureInfo(userInfo,true);}return;}var screenData=_common.Utils.retroactiveScreenId(state);var options=new _traverseOptions.TraverseOptions({reactComponent:component,screenId:screenData.key,integrationType:this.integrationType});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){if(_common.Utils.isIOS()||event===_common.Consts.kOnModalStateVisible){_pendoLogger.Logger.debug(`analyzeTree - visible modalTag: ${results.modalTag}`);screenName=_common.Consts.kModal;results.retroactiveScreenId=screenName;}else if(event===_common.Consts.kOnModalStateHidden){_pendoLogger.Logger.debug(`analyzeTree - hidden modalTag: ${results.modalTag}`);}}_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{var _errorMessage=`analyze (simple flow) screenId:${screenData==null?void 0:screenData.routeName}. Original error: ${results.error}`;_pendoLogger.Logger.warn(_errorMessage);var _userInfo={errorMessage:_errorMessage};ReactNativePendo.sendFailureInfo(_userInfo,true);}}}]);}(_react.Component);