rn-pendo-sdk
Version:
Pendo Mobile React Native SDK
1 lines • 4.54 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});exports.traverseOnComponent=traverseOnComponent;var _reactNative=require("react-native");var _fiberTypes=require("./fiber-types");var _iosTraverse=require("./iosTraverse");var _nativeParams=require("./nativeParams");var _pendoLogger=require("./pendoLogger");var _pendoTypes=require("./pendoTypes");var ReactNativePendo=_reactNative.NativeModules.ReactNativePendo;function traverseOnComponent(options){var results=new _nativeParams.NativeParams();if(!options.reactComponent){results.error='traverseOnComponent: Missing react component';return results;}var rootFiberNode=_fiberTypes.TagFinder.fiberNodeFromComponent(options.reactComponent);if(!rootFiberNode){results.error='traverseOnComponent: Missing root fiberNode';return results;}if(!options.screenId){results.error='traverseOnComponent: Missing screenId';_pendoLogger.Logger.warn('traverseOnComponent: Missing screenId, Scan aborted');return results;}if(options.startFromRoot){_pendoLogger.Logger.debug('traverseOnComponent: Finding real root node');while(rootFiberNode.return!=null){rootFiberNode=rootFiberNode.return;}}var traverseTree=_fiberTypes.TagFinder.buildTraverseTree(rootFiberNode,options);if(options.integrationType===_pendoTypes.IntegrationType.reactNativeNavigation){var _componentInternal$_r,_componentInternal$_r2,_componentInternal$_r3,_componentInternal$_r4;var componentInternal=options.reactComponent;var rootTag=(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(rootTag){results.rootTags.push(rootTag);_pendoLogger.Logger.debug(`RNN: Using root tag from component: ${rootTag}`);}else{_pendoLogger.Logger.warn('RNN: Could not extract root tag from component');}}else{if(options.screenToIterationCount==null){options.screenToIterationCount=new Map();}var foundIterationCount=false;var cachedIterationCount=options.screenToIterationCount.get(options.screenId);if(cachedIterationCount!=null){options.nativeNodeIterationCount=cachedIterationCount;_pendoLogger.Logger.debug(`Found iteration count ${options.nativeNodeIterationCount} for screen ${options.screenId}`);foundIterationCount=true;}else{options.nativeNodeIterationCount=_fiberTypes.TagFinder.resetIterationCount();}_pendoLogger.Logger.debug(`traversing ${traverseTree.rootList.length} root nodes`);while(results.rootTags.length===0&&options.nativeNodeIterationCount<5){for(var node of traverseTree.rootList){(0,_iosTraverse.traverseRootsOniOS)(node,options,results);}if(results.rootTags.length===0||!ReactNativePendo.viewsVisible(results.rootTags)){if(foundIterationCount){options.nativeNodeIterationCount=_fiberTypes.TagFinder.resetIterationCount();foundIterationCount=false;}else{options.nativeNodeIterationCount++;}_pendoLogger.Logger.debug(`${results.rootTags.length} root tags found setting iteration count to ${options.nativeNodeIterationCount} for screen ${options.screenId}`);results.rootTags=[];}}if(results.rootTags.length===0&&options.fallbackToScreenContainer){options.nativeNodeIterationCount=_fiberTypes.TagFinder.resetIterationCount();while(results.rootTags.length===0&&options.nativeNodeIterationCount<5){_pendoLogger.Logger.debug('No rootTags were found, will try to find screenContainer tag');_fiberTypes.TagFinder.findScreenContainerRootTag(rootFiberNode,options,results);if(results.rootTags.length===0||!ReactNativePendo.viewsVisible(results.rootTags)){options.nativeNodeIterationCount++;_pendoLogger.Logger.debug(`No container root tags found setting iteration count to ${options.nativeNodeIterationCount} for screen ${options.screenId}`);results.rootTags=[];}}}if(!foundIterationCount){options.screenToIterationCount.set(options.screenId,options.nativeNodeIterationCount);_pendoLogger.Logger.debug(`Set iteration count for screen ${options.screenId} is ${options.nativeNodeIterationCount} with ${results.rootTags.length} root tags`);}}if(results.rootTags.length===0){_pendoLogger.Logger.info('Failed to find screenContainer tag. Screen will not be scanned.');}else{_pendoLogger.Logger.debug(`Traversing ${traverseTree.nodeList.length} nodes`);for(var _node of traverseTree.nodeList){(0,_iosTraverse.traverseOniOS)(_node,options,results);}}return results;}