UNPKG

rn-pendo-sdk

Version:

Pendo Mobile React Native SDK

1 lines 34 kB
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.TagFinder=exports.ReactNativeModalsComponentType=exports.GorhomComponentType=exports.FiberNodeType=void 0;var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));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 _pendoLogger=require("./pendoLogger");var _pendoNode=require("./pendoNode");var _pendoTypes=require("./pendoTypes");var _traverseOptions=require("./traverseOptions");var _TagFinder;var ReactNativePendo=_reactNative.NativeModules.ReactNativePendo;var FiberNodeType=exports.FiberNodeType=function(FiberNodeType){FiberNodeType["RCTView"]="RCTView";FiberNodeType["RNSScreen"]="RNSScreen";FiberNodeType["RNSScreenContainer"]="RNSScreenContainer";FiberNodeType["RNNavigationContent"]="NavigationContent";FiberNodeType["RNScreenContainer"]="ScreenContainer";FiberNodeType["RNSceneView"]="SceneView";return FiberNodeType;}({});var GorhomComponentType=exports.GorhomComponentType=function(GorhomComponentType){GorhomComponentType["Portal"]="portal";GorhomComponentType["PortalHost"]="portalhost";return GorhomComponentType;}({});var ReactNativeModalsComponentType=exports.ReactNativeModalsComponentType=function(ReactNativeModalsComponentType){ReactNativeModalsComponentType["ModalContent"]="modalcontent";ReactNativeModalsComponentType["ModalPortal"]="modalportal";ReactNativeModalsComponentType["Backdrop"]="backdrop";return ReactNativeModalsComponentType;}({});var TagFinder=exports.TagFinder=function(){function TagFinder(){(0,_classCallCheck2.default)(this,TagFinder);}return(0,_createClass2.default)(TagFinder,null,[{key:"nativeTag",value:function nativeTag(node){var takeRCTView=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(takeRCTView){var nodeType=TagFinder.getNodeTypeName(node);if(nodeType===FiberNodeType.RCTView){return TagFinder.nativeTagInternal(node);}else{return null;}}return TagFinder.nativeTagInternal(node);}},{key:"nativeTagInternal",value:function nativeTagInternal(node){var tag=null;if(node&&node.stateNode){tag=node.stateNode._nativeTag||node.stateNode.nativeTag;if(!tag&&node.stateNode.canonical){tag=node.stateNode.canonical._nativeTag||node.stateNode.canonical.nativeTag;}}return tag;}},{key:"isRCTView",value:function isRCTView(node){return TagFinder.getNodeTypeName(node)===FiberNodeType.RCTView;}},{key:"isRNScreen",value:function isRNScreen(node){var nodeTypeName=TagFinder.getNodeTypeName(node);if(nodeTypeName==null){return false;}return this.isReactNavigationScreenContainer(nodeTypeName);}},{key:"isReactNavigationScreenContainer",value:function isReactNavigationScreenContainer(nodeTypeName){return nodeTypeName===FiberNodeType.RNScreenContainer||nodeTypeName===FiberNodeType.RNNavigationContent||nodeTypeName===FiberNodeType.RNSScreen||nodeTypeName===FiberNodeType.RNSScreenContainer||nodeTypeName===FiberNodeType.RNSceneView;}},{key:"highestTagInStateNodeChildren",value:function highestTagInStateNodeChildren(node){if(node==null){return null;}var nodeTag=TagFinder.nativeTag(node);if(node&&node.stateNode&&node.stateNode._children&&node.stateNode._children.length!==0){var maxTag=Math.max.apply(Math,(0,_toConsumableArray2.default)(node.stateNode._children.map(function(o){return o?o._nativeTag||o.nativeTag:0;})).concat([0]));return maxTag===0?nodeTag:maxTag;}return nodeTag;}},{key:"closestNativeNodeTag",value:function closestNativeNodeTag(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var iterationCount=arguments.length>3&&arguments[3]!==undefined?arguments[3]:1;if(node==null){return null;}var closestNativeNode=TagFinder.closestNativeNode(node,direction,takeRCTView,iterationCount);if(closestNativeNode){return TagFinder.nativeTag(closestNativeNode,takeRCTView);}return null;}},{key:"closestNativeNodeChildAndSibling",value:function closestNativeNodeChildAndSibling(node){var takeRCTView=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var nodesStack=[];nodesStack.push(node);while(nodesStack.length>0){var currentNode=nodesStack.pop();if(currentNode){var tag=TagFinder.nativeTag(currentNode,takeRCTView);if(tag){return currentNode;}if(currentNode.child){nodesStack.push(currentNode.child);}if(currentNode.sibling){nodesStack.push(currentNode.sibling);}}}return null;}},{key:"isNodeClickable",value:function isNodeClickable(node,clickableElementsNativeIDsRegex){if(clickableElementsNativeIDsRegex&&!TagFinder.clickableElementsNativeIDsRegex){TagFinder.clickableElementsNativeIDsRegex=new RegExp(clickableElementsNativeIDsRegex);}if(node==null){return false;}var pendingProps=node.pendingProps||{};var isClickable=false;var elementTypeName=TagFinder.getNodeTypeName(node);if(elementTypeName!=null){elementTypeName=elementTypeName.trim().toLowerCase();}if(elementTypeName!=null&&(elementTypeName.includes(_common.Consts.kTouchable)||elementTypeName===_common.Consts.kPressable||elementTypeName===_common.Consts.kButton)){isClickable=true;}else if(typeof pendingProps.onPress===_common.Consts.kFunction||typeof pendingProps.onClick===_common.Consts.kFunction){isClickable=true;}else if(typeof pendingProps.accessibilityRole===_common.Consts.kString&&([_common.Consts.kButton,_common.Consts.kLink,_common.Consts.kMenuItem].includes(pendingProps.accessibilityRole)||[_common.Consts.kButton,_common.Consts.kLink,_common.Consts.kMenuItem].includes(pendingProps.role))){isClickable=true;}else if(TagFinder.clickableElementsNativeIDsRegex&&node.pendingProps&&node.pendingProps.nativeID){isClickable=TagFinder.clickableElementsNativeIDsRegex.test(node.pendingProps.nativeID);}return isClickable;}},{key:"isDrawerRelatedNode",value:function isDrawerRelatedNode(node){var drawerBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.drawerCandidateNamesRegex){TagFinder.drawerCandidateNamesRegex=new RegExp('('+drawerBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);return nodeTypeName!==null&&TagFinder.drawerCandidateNamesRegex.test(nodeTypeName.toLowerCase());}},{key:"isMaterialTabBarExists",value:function isMaterialTabBarExists(node,tabBarWrapperView){var nodeTypeName=TagFinder.getNodeTypeName(node);if(nodeTypeName&&nodeTypeName.toLowerCase()===tabBarWrapperView){if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){return node.pendingProps.navigation.isFocused();}}return false;}},{key:"isTabBarNavigator",value:function isTabBarNavigator(node){var tabBarBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.tabBarCandidateNamesRegex){TagFinder.tabBarCandidateNamesRegex=new RegExp('('+tabBarBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isTabBarMatch=nodeTypeName!==null&&TagFinder.tabBarCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isTabBarMatch){return false;}var isTabBarVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isTabBarVisible=node.pendingProps.navigation.isFocused();}return isTabBarMatch&&isTabBarVisible;}},{key:"isMaterialBottomTabNavigator",value:function isMaterialBottomTabNavigator(node){var materialBottomTabBarNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.materialBottomTabBarCandidateNamesRegex){TagFinder.materialBottomTabBarCandidateNamesRegex=new RegExp('('+materialBottomTabBarNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);return nodeTypeName!==null&&TagFinder.materialBottomTabBarCandidateNamesRegex.test(nodeTypeName.toLowerCase());}},{key:"isBottomTabBar",value:function isBottomTabBar(node){var bottomBarBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.bottomTabCandidateNamesRegex){TagFinder.bottomTabCandidateNamesRegex=new RegExp('('+bottomBarBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isBottomBarMatch=nodeTypeName!==null&&TagFinder.bottomTabCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isBottomBarMatch){return false;}var isBottomBarVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isBottomBarVisible=node.pendingProps.navigation.isFocused();}return isBottomBarVisible;}},{key:"isNavigationBar",value:function isNavigationBar(node){var navigationBarBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.navigationBarCandidateNamesRegex){TagFinder.navigationBarCandidateNamesRegex=new RegExp('('+navigationBarBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isNavigationBarMatch=nodeTypeName!==null&&TagFinder.navigationBarCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isNavigationBarMatch){return false;}var isNavVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isNavVisible=node.pendingProps.navigation.isFocused();}return isNavigationBarMatch&&isNavVisible;}},{key:"isModalNode",value:function isModalNode(node){var modalBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.modalCandidateNamesRegex){TagFinder.modalCandidateNamesRegex=new RegExp('('+modalBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);return nodeTypeName!==null&&TagFinder.modalCandidateNamesRegex.test(nodeTypeName.toLowerCase());}},{key:"isBottomSheet",value:function isBottomSheet(node){var bottomSheetBaseNameCandidates=arguments.length>1&&arguments[1]!==undefined?arguments[1]:[];if(!TagFinder.bottomSheetCandidateNamesRegex){TagFinder.bottomSheetCandidateNamesRegex=new RegExp('('+bottomSheetBaseNameCandidates.join('|')+')');}var nodeTypeName=TagFinder.getNodeTypeName(node);var isBottomSheetMatch=nodeTypeName!==null&&TagFinder.bottomSheetCandidateNamesRegex.test(nodeTypeName.toLowerCase());if(!isBottomSheetMatch){return false;}var isBottomSheetVisible=true;if(node.pendingProps&&node.pendingProps.navigation&&node.pendingProps.navigation.isFocused){isBottomSheetVisible=node.pendingProps.navigation.isFocused();}if(isBottomSheetVisible){_pendoLogger.Logger.debug(`bottomSheet ${nodeTypeName} visible`);}return isBottomSheetVisible;}},{key:"getNodeTypeName",value:function getNodeTypeName(node){var elementTypeName=null;if(node==null){return null;}var nodeType=node.elementType||node.type;if(!nodeType){return null;}if(typeof nodeType===_common.Consts.kString){elementTypeName=nodeType;}else if(typeof nodeType===_common.Consts.kFunction){elementTypeName=nodeType.name||nodeType.displayName;}else if(typeof nodeType===_common.Consts.kObject){if(nodeType.render){elementTypeName=nodeType.render.name||nodeType.render.displayName;}else{elementTypeName=nodeType.displayName;}}if(elementTypeName===undefined){elementTypeName=null;}return elementTypeName;}},{key:"extractModalTypeFromNode",value:function extractModalTypeFromNode(node){var _node$stateNode,_node$stateNode2,_node$stateNode2$prop;if(node==null){return _pendoTypes.ModalType.None;}var modalType=((_node$stateNode=node.stateNode)==null?void 0:_node$stateNode.modalType)||((_node$stateNode2=node.stateNode)==null?void 0:(_node$stateNode2$prop=_node$stateNode2.props)==null?void 0:_node$stateNode2$prop.modalType);if(modalType!=null){return modalType;}if(node.child==null){modalType=_pendoTypes.ModalType.None;}else{var _node$child$stateNode,_node$child$stateNode2,_node$child$stateNode3,_node$child$memoizedP;modalType=((_node$child$stateNode=node.child.stateNode)==null?void 0:_node$child$stateNode.modalType)||((_node$child$stateNode2=node.child.stateNode)==null?void 0:(_node$child$stateNode3=_node$child$stateNode2.props)==null?void 0:_node$child$stateNode3.modalType)||((_node$child$memoizedP=node.child.memoizedProps)==null?void 0:_node$child$memoizedP.modalType);if(modalType==null){modalType=_pendoTypes.ModalType.None;}}return modalType;}},{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&&it.status==='open';});}if(state.routes&&_common.Utils.isNotEmpty(state.index)){return TagFinder.isDrawerOpen(state.routes[state.index].state);}return false;}},{key:"isModalVisible",value:function isModalVisible(node,modalType){var _ref,_node$child,_node$child$stateNode4,_node$child$stateNode5,_node$stateNode3,_node$stateNode3$prop,_ref2,_node$child2,_node$child2$stateNod,_node$child2$stateNod2,_node$stateNode4,_node$stateNode4$prop,_node$stateNode5,_node$stateNode5$pndS,_node$stateNode5$pndS2,_node$stateNode6,_node$stateNode6$pndS,_node$stateNode6$pndS2,_node$stateNode$props,_node$stateNode7,_node$stateNode7$prop;if(node==null){return false;}switch(modalType){case _pendoTypes.ModalType.ReactNativeModal:return(_ref=((_node$child=node.child)==null?void 0:(_node$child$stateNode4=_node$child.stateNode)==null?void 0:(_node$child$stateNode5=_node$child$stateNode4.props)==null?void 0:_node$child$stateNode5.isVisible)||((_node$stateNode3=node.stateNode)==null?void 0:(_node$stateNode3$prop=_node$stateNode3.props)==null?void 0:_node$stateNode3$prop.isVisible))!=null?_ref:false;case _pendoTypes.ModalType.ReactModal:return(_ref2=((_node$child2=node.child)==null?void 0:(_node$child2$stateNod=_node$child2.stateNode)==null?void 0:(_node$child2$stateNod2=_node$child2$stateNod.props)==null?void 0:_node$child2$stateNod2.visible)||((_node$stateNode4=node.stateNode)==null?void 0:(_node$stateNode4$prop=_node$stateNode4.props)==null?void 0:_node$stateNode4$prop.visible))!=null?_ref2:false;case _pendoTypes.ModalType.GorhomModal:return((_node$stateNode5=node.stateNode)==null?void 0:(_node$stateNode5$pndS=_node$stateNode5.pndState)==null?void 0:(_node$stateNode5$pndS2=_node$stateNode5$pndS.current)==null?void 0:_node$stateNode5$pndS2.isVisible)||false;case _pendoTypes.ModalType.Modalize:return((_node$stateNode6=node.stateNode)==null?void 0:(_node$stateNode6$pndS=_node$stateNode6.pndState)==null?void 0:(_node$stateNode6$pndS2=_node$stateNode6$pndS.current)==null?void 0:_node$stateNode6$pndS2.isVisible)||false;case _pendoTypes.ModalType.ReactNativeModals:return(_node$stateNode$props=(_node$stateNode7=node.stateNode)==null?void 0:(_node$stateNode7$prop=_node$stateNode7.props)==null?void 0:_node$stateNode7$prop.visible)!=null?_node$stateNode$props:false;case _pendoTypes.ModalType.None:default:return false;}}},{key:"getModalOptionsByType",value:function getModalOptionsByType(modalType,modalComponentType,options){var modalOptions={};if(modalType!==_pendoTypes.ModalType.None){switch(modalType){case _pendoTypes.ModalType.GorhomModal:modalOptions.traverseDirection=options.gorhomModalTraverseDirection;modalOptions.takeRCTView=options.gorhomModalTakeRCTView;modalOptions.nativeNodeIterationCount=options.nativeNodeIterationCount;break;case _pendoTypes.ModalType.Modalize:modalOptions.traverseDirection=options.modalizeModalTraverseDirection;modalOptions.takeRCTView=options.modalizeModalTakeRCTView;modalOptions.nativeNodeIterationCount=options.nativeNodeIterationCount;break;case _pendoTypes.ModalType.ReactModal:modalOptions.traverseDirection=options.reactModalTraverseDirection;modalOptions.takeRCTView=options.reactModalTakeRCTView;modalOptions.nativeNodeIterationCount=options.nativeNodeIterationCount;break;case _pendoTypes.ModalType.ReactNativeModal:modalOptions.traverseDirection=options.reactNativeModalTraverseDirection;modalOptions.takeRCTView=options.reactNativeModalTakeRCTView;modalOptions.nativeNodeIterationCount=options.nativeNodeIterationCount;break;case _pendoTypes.ModalType.ReactNativeModals:if(modalComponentType===ReactNativeModalsComponentType.ModalPortal){modalOptions.traverseDirection=options.reactNativeModalsPortalTraverseDirection;modalOptions.takeRCTView=options.reactNativeModalsPortalTakeRCTView;modalOptions.nativeNodeIterationCount=1;}else{modalOptions.traverseDirection=options.reactNativeModalsTraverseDirection;modalOptions.takeRCTView=options.reactNativeModalsTakeRCTView;modalOptions.nativeNodeIterationCount=1;}break;default:modalOptions.traverseDirection=options.reactModalTraverseDirection;modalOptions.takeRCTView=options.reactModalTakeRCTView;modalOptions.nativeNodeIterationCount=options.nativeNodeIterationCount;break;}}return modalOptions;}},{key:"getModalType",value:function getModalType(node,options){if(node==null){return _pendoTypes.ModalType.None;}if(!TagFinder.isModalNode(node,options.modalBaseNameCandidates)){return _pendoTypes.ModalType.None;}var modalType=TagFinder.extractModalTypeFromNode(node);var modalTypeName=TagFinder.getModalTypeName(modalType);var isModalVisible=false;if(modalType!==_pendoTypes.ModalType.None){isModalVisible=TagFinder.isModalVisible(node,modalType);if(isModalVisible){_pendoLogger.Logger.debug(`Modal ${modalTypeName} found`);}}return isModalVisible?modalType:_pendoTypes.ModalType.None;}},{key:"getModalTypeName",value:function getModalTypeName(modalType){switch(modalType){case _pendoTypes.ModalType.ReactModal:return _common.Consts.kReactModal;case _pendoTypes.ModalType.GorhomModal:return _common.Consts.kGorhomModal;case _pendoTypes.ModalType.Modalize:return _common.Consts.kModalizeModal;case _pendoTypes.ModalType.ReactNativeModal:return _common.Consts.kReactNativeModal;case _pendoTypes.ModalType.ReactNativeModals:return _common.Consts.kReactNativeModals;case _pendoTypes.ModalType.None:default:return _common.Consts.kUnknownModal;}}},{key:"findPortalHostName",value:function findPortalHostName(node){if(node==null){return null;}var visited=new Set();var _search=function search(n){var _TagFinder$getNodeTyp;if(n==null||visited.has(n)){return null;}visited.add(n);var name=(_TagFinder$getNodeTyp=TagFinder.getNodeTypeName(n))==null?void 0:_TagFinder$getNodeTyp.toLowerCase();if(name===GorhomComponentType.Portal){var _n$memoizedProps;var hostName=(_n$memoizedProps=n.memoizedProps)==null?void 0:_n$memoizedProps.hostName;if(hostName){return hostName;}}var childResult=_search(n.child);if(childResult){return childResult;}return _search(n.sibling);};return _search(node.child);}},{key:"findComponentFromRoot",value:function findComponentFromRoot(startNode,targetName,propMatcher){if(startNode==null){return null;}var visited=new Set();var rootNode=startNode;while(rootNode.return!=null){if(visited.has(rootNode)){_pendoLogger.Logger.debug(`Portal: Cycle detected while finding root for ${targetName}`);break;}visited.add(rootNode);rootNode=rootNode.return;}visited.clear();var _search2=function search(node){var _TagFinder$getNodeTyp2;if(node==null||visited.has(node)){return null;}visited.add(node);var nodeName=(_TagFinder$getNodeTyp2=TagFinder.getNodeTypeName(node))==null?void 0:_TagFinder$getNodeTyp2.toLowerCase();if(nodeName===targetName&&(!propMatcher||propMatcher(node))){_pendoLogger.Logger.debug(`Portal: Found ${targetName}`);return node;}var childResult=_search2(node.child);if(childResult){return childResult;}return _search2(node.sibling);};return _search2(rootNode);}},{key:"findPortalHost",value:function findPortalHost(startNode,hostName){return TagFinder.findComponentFromRoot(startNode,GorhomComponentType.PortalHost,function(node){var _node$memoizedProps;return((_node$memoizedProps=node.memoizedProps)==null?void 0:_node$memoizedProps.name)===hostName;});}},{key:"findModalTagViaPortal",value:function findModalTagViaPortal(modalNode,modalType,options){if(modalType===_pendoTypes.ModalType.GorhomModal){return TagFinder.findGorhomModalTagViaPortal(modalNode,options);}if(modalType===_pendoTypes.ModalType.ReactNativeModals){return TagFinder.findReactNativeModalsTagViaPortal(modalNode,options);}return null;}},{key:"findGorhomModalTagViaPortal",value:function findGorhomModalTagViaPortal(modalNode,options){var hostName=TagFinder.findPortalHostName(modalNode);if(!hostName){return null;}_pendoLogger.Logger.debug(`Gorhom: Found Portal hostName="${hostName}"`);var portalHost=TagFinder.findPortalHost(modalNode,hostName);if(!portalHost){return null;}var modalOptions=TagFinder.getModalOptionsByType(_pendoTypes.ModalType.GorhomModal,GorhomComponentType.PortalHost,options);var modalTag=TagFinder.closestNativeNodeTag(portalHost,modalOptions.traverseDirection,modalOptions.takeRCTView,modalOptions.nativeNodeIterationCount);_pendoLogger.Logger.debug(`Gorhom: PortalHost native tag: ${modalTag}`);return modalTag;}},{key:"findReactNativeModalsTagViaPortal",value:function findReactNativeModalsTagViaPortal(modalNode,options){var portalNode=TagFinder.findComponentFromRoot(modalNode,ReactNativeModalsComponentType.ModalContent);var componentType=ReactNativeModalsComponentType.ModalContent;if(!portalNode){_pendoLogger.Logger.debug('ReactNativeModals: ModalContent not found, falling back to Backdrop sibling');var backdropNode=TagFinder.findComponentFromRoot(modalNode,ReactNativeModalsComponentType.Backdrop);if(backdropNode!=null&&backdropNode.sibling){portalNode=backdropNode.sibling;componentType=ReactNativeModalsComponentType.ModalPortal;}}if(!portalNode){_pendoLogger.Logger.debug('ReactNativeModals: Backdrop not found, falling back to ModalPortal');portalNode=TagFinder.findComponentFromRoot(modalNode,ReactNativeModalsComponentType.ModalPortal);componentType=ReactNativeModalsComponentType.ModalPortal;}if(!portalNode){_pendoLogger.Logger.debug('ReactNativeModals: No portal component found');return null;}var modalOptions=TagFinder.getModalOptionsByType(_pendoTypes.ModalType.ReactNativeModals,componentType,options);var modalTag=TagFinder.closestNativeNodeTag(portalNode,modalOptions.traverseDirection,modalOptions.takeRCTView,modalOptions.nativeNodeIterationCount);_pendoLogger.Logger.debug(`ReactNativeModals: native tag: ${modalTag}`);return modalTag;}},{key:"buildTraverseTree",value:function buildTraverseTree(rootNode,options){var rootVisited=new Set();var nodeVisited=new Set();var traverseTree={rootList:[],nodeList:[]};if(rootNode==null){return traverseTree;}var realRootNode=rootNode;while(realRootNode.return!=null){realRootNode=realRootNode.return;}function traverseRootNodes(node){if(node==null||rootVisited.has(node)){return;}rootVisited.add(node);if(node.key||TagFinder.isDrawerRelatedNode(node,options.drawerBaseNameCandidates)&&(options.isDrawerVisible||TagFinder.isDrawerOpen(node.state))||TagFinder.getModalType(node,options)!==_pendoTypes.ModalType.None){traverseTree.rootList.push(node);}traverseRootNodes(node.sibling);traverseRootNodes(node.child);}function traverseNodes(node){if(node==null||nodeVisited.has(node)){return;}nodeVisited.add(node);traverseTree.nodeList.push(node);traverseNodes(node.sibling);traverseNodes(node.child);}traverseRootNodes(rootNode);traverseNodes(realRootNode);nodeVisited.clear();rootVisited.clear();return traverseTree;}},{key:"fiberNodeFromComponent",value:function fiberNodeFromComponent(component){if(component){return component._reactInternalFiber||component._reactInternals;}return null;}},{key:"findAndAddRootTags",value:function findAndAddRootTags(node,options,results,pushAsFirstRootTag,isScreenContainer){if(node==null){return;}var nativeNode=TagFinder.closestNativeNode(node,options.rootTraverseDirection,options.rootTakeRCTView,options.nativeNodeIterationCount);if(nativeNode==null){return;}var rootTag=TagFinder.nativeTag(nativeNode,options.rootTakeRCTView);if(rootTag){if(!ReactNativePendo.viewsVisible([rootTag])){_pendoLogger.Logger.debug('Invalid Root node discovered ',rootTag);}else{var nativeNodeName=TagFinder.getNodeTypeName(nativeNode);_pendoLogger.Logger.debug(`Root node ${rootTag} found with type ${nativeNodeName}`);var prefix='';if(isScreenContainer){prefix='Screen Container ';}if(TagFinder.isRCTView(nativeNode)||TagFinder.isRNScreen(nativeNode)){var nodeName=TagFinder.getNodeTypeName(node);_common.Utils.addRootTag(results,rootTag,`${prefix}Root Tag${nodeName?` nodeName: ${nodeName}`:''} ${nativeNodeName?` nativeNodeName: ${nativeNodeName}`:''} discovered: `);}if(_common.Utils.isAndroid()){var additionalRootNode=nativeNode.child;var additionalRootNativeNode=TagFinder.closestNativeNode(additionalRootNode,options.rootTraverseDirection,options.rootTakeRCTView,options.nativeNodeIterationCount);if(additionalRootNativeNode==null){return;}var additionalRootTag=TagFinder.nativeTag(additionalRootNativeNode,options.rootTakeRCTView);if(additionalRootTag){if(!ReactNativePendo.viewsVisible([additionalRootTag])){_pendoLogger.Logger.debug('Invalid Additional root node discovered ',additionalRootTag);}else if(TagFinder.isRCTView(additionalRootNativeNode)||TagFinder.isRNScreen(additionalRootNativeNode)){var additionalNodeName=TagFinder.getNodeTypeName(additionalRootNode);var additionalNativeNodeName=TagFinder.getNodeTypeName(additionalRootNativeNode);_common.Utils.addRootTag(results,additionalRootTag,`${prefix}Additional Root Tag${additionalNodeName?` nodeName: ${additionalNodeName}`:''} ${additionalNativeNodeName?` nativeNodeName: ${additionalNativeNodeName}`:''} discovered: `,pushAsFirstRootTag);}}}}}}},{key:"findScreenContainerRootTag",value:function findScreenContainerRootTag(rootFiberNode,options,results){var nodesStack=[];var visited=new Set();var errorMessage=`findScreenContainerRootTag - screenContainer tag not found for `+`${options.integrationType}, screenId: ${options.screenId}, `+`iteration: ${options.nativeNodeIterationCount}`;var realRootNode=rootFiberNode;while(realRootNode.return!=null){realRootNode=realRootNode.return;}nodesStack.push(realRootNode);while(nodesStack.length!==0){var node=nodesStack.pop();if(!node||visited.has(node)){continue;}visited.add(node);if(node.child){nodesStack.push(node.child);}if(node.sibling){nodesStack.push(node.sibling);}var isScreenContainer=TagFinder.isRNScreen(node);var isMatchingRoot=options.integrationType===_pendoTypes.IntegrationType.expoRouter&&node.key&&TagFinder.isRootNode(node,options);if(isScreenContainer||isMatchingRoot){var nodeTypeName=TagFinder.getNodeTypeName(node);_pendoLogger.Logger.debug(`Screen container candidate found: ${nodeTypeName}, `+`key: ${node.key}, isScreenContainer: ${isScreenContainer} isRootNode: ${isMatchingRoot}`);TagFinder.findAndAddRootTags(node,options,results,false,true);}}visited.clear();if(results.rootTags.length===0){_pendoLogger.Logger.warn(errorMessage);results.error=errorMessage;}else{_pendoLogger.Logger.debug(`findScreenContainerRootTag found ${results.rootTags.length} root tags `+`for ${options.integrationType}, screenId: ${options.screenId}`);}}},{key:"findClosestNativeNodeTagsForLogger",value:function findClosestNativeNodeTagsForLogger(node,nodeTypeName,componentName){var takeRCTView=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;var iterationCount=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var childTag=null;var parentTag=null;if(node&&nodeTypeName&&componentName){parentTag=TagFinder.closestNativeNodeTag(node,_traverseOptions.TraverseDirection.Parent,takeRCTView,iterationCount);childTag=TagFinder.closestNativeNodeTag(node,_traverseOptions.TraverseDirection.Child,takeRCTView,iterationCount);}_pendoLogger.Logger.debug('Candidates for '+componentName+' Node: '+nodeTypeName+', Parent: '+parentTag+', Child: '+childTag);}},{key:"LogFiberNode",value:function LogFiberNode(node,msg){if(!_pendoLogger.Logger.isDebugEnabled()){return;}_pendoLogger.Logger.debug(msg,_common.Utils.safePrint(node));}},{key:"LogFiberNodeMatchingElement",value:function LogFiberNodeMatchingElement(node,options){if(!_pendoLogger.Logger.isDebugEnabled()){return;}var nodeTypeName=TagFinder.getNodeTypeName(node);if(nodeTypeName){if(options.isDrawerVisible&&nodeTypeName.includes('drawer')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Drawer',options.drawerTakeRCTView,options.nativeNodeIterationCount);}else if(nodeTypeName.includes('header')||nodeTypeName.includes('top')||nodeTypeName.includes('navigation')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Navigation Bar',options.navigationBarTakeRCTView,options.nativeNodeIterationCount);}else if(nodeTypeName.includes('bottom')&&!nodeTypeName.includes('bottomsheet')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Bottom Tab',options.materialBottomTabTakeRCTView,options.nativeNodeIterationCount);}else if(nodeTypeName.includes('tabbar')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Tab Bar',options.tabBarTakeRCTView,options.nativeNodeIterationCount);}else if(nodeTypeName.includes('tab')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Tab Node',options.navigationBarTakeRCTView,options.nativeNodeIterationCount);}else if(nodeTypeName.includes('modal')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Modal',options.gorhomModalTakeRCTView,options.nativeNodeIterationCount);}else if(nodeTypeName.includes('bottomsheet')){TagFinder.findClosestNativeNodeTagsForLogger(node,nodeTypeName,'Bottom Sheet',options.bottomSheetTakeRCTView,options.nativeNodeIterationCount);}}}},{key:"addClickableElement",value:function addClickableElement(node,options,nativeParams){var nativeTag=TagFinder.closestNativeNodeTag(node,options.regularTraverseDirection,options.regularTakeRCTView,TagFinder.clickableElementIterationCount());if(!nativeTag){return;}var onPressAction=TagFinder.extractFunctionName(node);var existingNode=nativeParams.clickableElements.get(nativeTag);if(existingNode){if(!existingNode.onPressAction&&onPressAction){existingNode.onPressAction=onPressAction;}}else{var pendoNode=new _pendoNode.PendoNode(nativeTag,true,onPressAction);nativeParams.clickableElements.set(nativeTag,pendoNode);}}},{key:"extractFunctionName",value:function extractFunctionName(node){if(node==null||node.pendingProps==null){return'';}var functionRef=null;if(typeof node.pendingProps.onPress==='function'){functionRef=node.pendingProps.onPress;}else if(typeof node.pendingProps.onClick==='function'){functionRef=node.pendingProps.onClick;}if(functionRef!=null){try{return _common.Utils.removeSpacesAndNewLine(_common.Utils.FunctionToString.call(functionRef));}catch(error){_pendoLogger.Logger.debug('Error extracting function name from function reference:',error);return'[Function]';}}return'';}}]);}();_TagFinder=TagFinder;TagFinder.clickableElementsNativeIDsRegex=null;TagFinder.drawerCandidateNamesRegex=null;TagFinder.bottomTabCandidateNamesRegex=null;TagFinder.navigationBarCandidateNamesRegex=null;TagFinder.tabBarCandidateNamesRegex=null;TagFinder.materialBottomTabBarCandidateNamesRegex=null;TagFinder.bottomSheetCandidateNamesRegex=null;TagFinder.modalCandidateNamesRegex=null;TagFinder.closestNativeNode=function(node,direction){var takeRCTView=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;var iterationCount=arguments.length>3&&arguments[3]!==undefined?arguments[3]:1;if(node==null){return null;}var counter=1;if(direction==null){_pendoLogger.Logger.warn(`Direction of traversal must be specified ${new Error().stack}`);return node;}else if(direction===_traverseOptions.TraverseDirection.Child){return _TagFinder.closestNativeNodeChildAndSibling(node,takeRCTView);}else{while(node){var tag=_TagFinder.nativeTag(node,takeRCTView);if(tag){if(counter===iterationCount){return node;}node=node.return;counter+=1;}else if(direction===_traverseOptions.TraverseDirection.Parent){node=node.return;}else if(direction===_traverseOptions.TraverseDirection.Sibling){node=node.sibling;}}return null;}};TagFinder.closestDrawerTag=function(node,options){if(_common.Utils.isFabricEnabled()&&_common.Utils.getOS()===_pendoTypes.PlatformOS.ios){return _TagFinder.closestDrawerFabricTag(node,options.drawerTakeRCTView);}else{return _TagFinder.closestNativeNodeTag(node,options.drawerTraverseDirection,options.drawerTakeRCTView,options.nativeNodeIterationCount);}};TagFinder.closestDrawerFabricTag=function(node){var takeRCTView=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var nodesStack=[];nodesStack.push(node);var siblingsCount=1;var counter=0;var isIterationDone=false;while(nodesStack.length!==0){var currentNode=nodesStack.pop();if(currentNode){var tag=_TagFinder.nativeTag(currentNode,takeRCTView);if(isIterationDone&&tag&&siblingsCount===counter){tag=_TagFinder.nativeTag(currentNode.child,takeRCTView);return tag;}if(tag&&siblingsCount===counter){isIterationDone=true;}if(currentNode.sibling){nodesStack.push(currentNode.sibling);counter+=1;}else if(currentNode.child){nodesStack.push(currentNode.child);}}}return null;};TagFinder.isRootNode=function(node,options){if(node==null){return false;}if(options.isDrawerVisible&&_TagFinder.isDrawerRelatedNode(node,options.drawerBaseNameCandidates)){var drawerTag=_TagFinder.closestDrawerTag(node,options);if(drawerTag){return true;}}var isRoot=false;if(options.screenId&&node.key){if(options.integrationType===_pendoTypes.IntegrationType.expoRouter){var nodeRouteName=node.key;var currentScreenName=options.screenId;if(currentScreenName.length>1&&currentScreenName.startsWith('/')){currentScreenName=currentScreenName.substring(1);}if(nodeRouteName.indexOf('index')===0){nodeRouteName='/';}else if(nodeRouteName.startsWith(`${currentScreenName}`)){nodeRouteName=currentScreenName;}isRoot=nodeRouteName===currentScreenName;}else{isRoot=node.key===options.screenId;}}if(isRoot){_pendoLogger.Logger.debug(`Found rootNode with routeName: ${node.key} and screenId: ${options.screenId}`);}return isRoot;};TagFinder.resetIterationCount=function(){if(_common.Utils.isFabricEnabled()&&_common.Utils.getOS()===_pendoTypes.PlatformOS.ios){return 2;}else{return 1;}};TagFinder.clickableElementIterationCount=function(){if(_common.Utils.isFabricEnabled()&&_common.Utils.getOS()===_pendoTypes.PlatformOS.ios){return 3;}else{return 1;}};