48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
* @providesModule InspectorUtils
|
|
*/
|
|
'use strict';
|
|
|
|
var ReactNativeComponentTree = require('ReactNativeComponentTree');
|
|
|
|
function traverseOwnerTreeUp(hierarchy, instance) {
|
|
if (instance) {
|
|
hierarchy.unshift(instance);
|
|
traverseOwnerTreeUp(hierarchy, instance._currentElement._owner);
|
|
}
|
|
}
|
|
|
|
function findInstanceByNativeTag(nativeTag) {
|
|
var instance = ReactNativeComponentTree.getInstanceFromNode(nativeTag);
|
|
if (!instance || typeof instance.tag === 'number') {
|
|
// TODO(sema): We've disabled the inspector when using Fiber. Fix #15953531
|
|
return null;
|
|
}
|
|
return instance;
|
|
}
|
|
|
|
function getOwnerHierarchy(instance) {
|
|
var hierarchy = [];
|
|
traverseOwnerTreeUp(hierarchy, instance);
|
|
return hierarchy;
|
|
}
|
|
|
|
function lastNotNativeInstance(hierarchy) {
|
|
for (let i = hierarchy.length - 1; i > 1; i--) {
|
|
const instance = hierarchy[i];
|
|
if (!instance.viewConfig) {
|
|
return instance;
|
|
}
|
|
}
|
|
return hierarchy[0];
|
|
}
|
|
|
|
module.exports = {findInstanceByNativeTag, getOwnerHierarchy, lastNotNativeInstance};
|