rn-pendo-sdk
Version:
Pendo Mobile React Native SDK
1 lines • 6.56 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});exports.traverseOnComponent=traverseOnComponent;var _common=require("./common");var _fiberTypes=require("./fiber-types");var _nativeParams2=require("./nativeParams");var _pendoLogger=require("./pendoLogger");var _pendoNode=require("./pendoNode");var _pendoTypes=require("./pendoTypes");function traverseOnComponent(options){_pendoLogger.Logger.debug('traverseOnComponent entry');var rootFiberNode=_fiberTypes.TagFinder.fiberNodeFromComponent(options.reactComponent);if(!rootFiberNode){var _nativeParams=new _nativeParams2.NativeParams();_nativeParams.error='androidAnalyzer: React component does not exist';return _nativeParams;}var nativeParams=analyzeFiberTree(rootFiberNode,options);nativeParams.isNativeStack=options.isNativeStack;return nativeParams;}function analyzeFiberTree(rootFiberNode,options){var nodesStack=[];var nativeParams=new _nativeParams2.NativeParams();nativeParams.rootTags=[];var clickableElementsMap=new Map();nodesStack.push(rootFiberNode);while(nodesStack.length!==0){var node=nodesStack.pop();if(!node){continue;}_fiberTypes.TagFinder.LogFiberNode(node,options);if(node.child){nodesStack.push(node.child);}if(node.sibling){nodesStack.push(node.sibling);}if(_fiberTypes.TagFinder.isNodeClickable(node,options.clickableElementsNativeIDsRegex)){populateClickableElementsMap(node,options,clickableElementsMap);}if(options.screenId&&node.key&&node.key===options.screenId){_fiberTypes.TagFinder.findAndAddRootTags(node,nativeParams,options,true);}if(options.isDrawerVisible&&_fiberTypes.TagFinder.isDrawerRelatedNode(node,options.drawerBaseNameCandidates)){if(nativeParams.drawerTag===0||!options.drawerTakeFirstTag){var drawerRootTag=_fiberTypes.TagFinder.closestNativeNodeTag(node,options.drawerTraverseDirection,options.drawerTakeRCTView);if(drawerRootTag){nativeParams.drawerTag=drawerRootTag;_common.Utils.addRootTag(nativeParams.rootTags,nativeParams.drawerTag,'Drawer discovered: ');}}}if(_fiberTypes.TagFinder.isNavigationBar(node,options.navigationBarBaseNameCandidates)){if(!options.navigationBarTakeFirstTag||nativeParams.navigationBarTag===null){var navigationBarTag=_fiberTypes.TagFinder.closestNativeNodeTag(node,options.navigationBarTraverseDirection,options.navigationBarTakeRCTView);if(navigationBarTag){nativeParams.navigationBarTag=navigationBarTag;_common.Utils.addRootTag(nativeParams.rootTags,nativeParams.navigationBarTag,'NavigationBar discovered: ');}}}if(_fiberTypes.TagFinder.isTabBarNavigator(node,options.tabBarBaseNameCandidates)){var tabBarTag=_fiberTypes.TagFinder.closestNativeNodeTag(node,options.tabBarTraverseDirection,options.tabBarTakeRCTView);if(tabBarTag){nativeParams.tabBarTag=tabBarTag;_common.Utils.addRootTag(nativeParams.rootTags,nativeParams.tabBarTag,'TabBar Navigator discovered: ');}}if(_fiberTypes.TagFinder.isBottomTabBar(node,options.bottomBarBaseNameCandidates)){if(!options.bottomBarTakeFirstTag||nativeParams.bottomBarTag===null){var bottomBarTag=_fiberTypes.TagFinder.closestNativeNodeTag(node,options.bottomBarTraverseDirection,options.bottomBarTakeRCTView);if(bottomBarTag){nativeParams.bottomBarTag=bottomBarTag;_common.Utils.addRootTag(nativeParams.rootTags,nativeParams.bottomBarTag,'Bottom Tab Bar discovered: ');}}}if(_fiberTypes.TagFinder.isMaterialBottomTabNavigator(node,options.materialBottomTabBaseNameCandidates)){var materialBottomBarTag=_fiberTypes.TagFinder.closestNativeNodeTag(node,options.materialBottomTabTraverseDirection,options.materialBottomTabTakeRCTView);if(materialBottomBarTag){nativeParams.materialBottomTabTag=materialBottomBarTag;_common.Utils.addRootTag(nativeParams.rootTags,nativeParams.materialBottomTabTag,'MaterialTabBar discovered: ');}}if(_fiberTypes.TagFinder.isBottomSheet(node,options.bottomSheetBaseNameCandidates)){var bottomSheetNode=_fiberTypes.TagFinder.closestNativeNodeTag(node,options.regularTraverseDirection,options.regularTakeRCTView);if(bottomSheetNode){_common.Utils.addRootTag(nativeParams.bottomSheetTags,bottomSheetNode);_common.Utils.addRootTag(nativeParams.rootTags,bottomSheetNode,'Bottom Sheet discovered: ');}}if(nativeParams.modalTag==null){var modalType=_fiberTypes.TagFinder.getModalType(node,options);if(modalType!==_pendoTypes.ModalType.None){var direction=modalType===_pendoTypes.ModalType.ReactModal?options.reactModalTraverseDirection:options.gorhomModalTraverseDirection;var takeRCTView=modalType===_pendoTypes.ModalType.ReactModal?options.reactModalTakeRCTView:options.gorhomModalTakeRCTView;var modalTag=_fiberTypes.TagFinder.closestNativeNodeTag(node,direction,takeRCTView);if(modalTag){nativeParams.modalTag=modalTag;nativeParams.modalType=modalType;_common.Utils.addRootTag(nativeParams.rootTags,nativeParams.modalTag,`${_fiberTypes.TagFinder.getModalTypeName(modalType)} modal discovered: `,true);}}}}if(options.integrationType===_pendoTypes.IntegrationType.expoRouter||nativeParams.rootTags.length===0&&options.integrationType===_pendoTypes.IntegrationType.reactNavigation){if(options.integrationType===_pendoTypes.IntegrationType.reactNavigation){_pendoLogger.Logger.debug('No rootTags were found, will try to find screenContainer tag');}_fiberTypes.TagFinder.findScreenContainerRootTag(rootFiberNode,nativeParams,options);}nativeParams.clickableElements=getClickableElementsArray(clickableElementsMap);return nativeParams;}function removeSpacesAndNewLine(original){if(!original||original.length===0){return'';}var removeNewLine=original.replace(/\r?\n|\r/g,' ');return removeNewLine.replace(/ /g,'');}function getClickableElementsArray(clickableElementsMap){var clickableElementsArray=[];clickableElementsMap.forEach(function(value){clickableElementsArray.push(value);});return clickableElementsArray;}function populateClickableElementsMap(node,options,clickableElementsMap){var nativeTag=_fiberTypes.TagFinder.closestNativeNodeTag(node,options.regularTraverseDirection);if(nativeTag){var _node$return,_node$return$pendingP,_clickableElementsMap;var functionRef=node==null?void 0:(_node$return=node.return)==null?void 0:(_node$return$pendingP=_node$return.pendingProps)==null?void 0:_node$return$pendingP.onPress;if(!clickableElementsMap.has(nativeTag)){clickableElementsMap.set(nativeTag,new _pendoNode.PendoNode(nativeTag,true,''));}if(functionRef&&_common.Utils.isEmpty((_clickableElementsMap=clickableElementsMap.get(nativeTag))==null?void 0:_clickableElementsMap.onPressAction)){var clickableElement=clickableElementsMap.get(nativeTag);if(clickableElement){clickableElement.onPressAction=removeSpacesAndNewLine(String(functionRef));}}}}