UNPKG

rn-pendo-sdk

Version:

Pendo Mobile React Native SDK

1 lines 3.47 kB
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 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;}var traverseTree=_fiberTypes.TagFinder.buildTraverseTree(rootFiberNode,options);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;}