findNode* - Support traverseConfig

This commit is contained in:
2019-09-11 16:54:53 +05:30
parent e7e969cf65
commit 1ef5941a9e
+25 -51
View File
@@ -1,4 +1,5 @@
import { FiberNode } from "./mocked-types"; import { FiberNode } from "./mocked-types";
import { traverseGenerator, TTraverseConfig } from "./traverse";
import { isNodeNotHtmlLike } from "./utils"; import { isNodeNotHtmlLike } from "./utils";
/** /**
@@ -20,26 +21,17 @@ import { isNodeNotHtmlLike } from "./utils";
*/ */
function findNodeByComponentName( function findNodeByComponentName(
node: FiberNode | null, node: FiberNode | null,
expectedName: string expectedName: string,
traverseConfig?: TTraverseConfig
): FiberNode | null { ): FiberNode | null {
if (node === null) { if (node === null) {
return null; return null;
} }
if (isNodeNotHtmlLike(node) && node.type.name === expectedName) { const nodeIterator = traverseGenerator(node, traverseConfig);
return node; for (const tmpNode of nodeIterator) {
} if (isNodeNotHtmlLike(tmpNode) && tmpNode.type.name === expectedName) {
return tmpNode;
{
const returnVal = findNodeByComponentName(node.child, expectedName);
if (returnVal !== null) {
return returnVal;
}
}
{
const returnVal = findNodeByComponentName(node.sibling, expectedName);
if (returnVal !== null) {
return returnVal;
} }
} }
@@ -66,29 +58,20 @@ function findNodeByComponentName(
*/ */
function findNodeByComponent( function findNodeByComponent(
node: FiberNode | null, node: FiberNode | null,
expectedClassOrFunction: React.ComponentType expectedClassOrFunction: React.ComponentType,
traverseConfig?: TTraverseConfig
): FiberNode | null { ): FiberNode | null {
if (node === null) { if (node === null) {
return null; return null;
} }
if (isNodeNotHtmlLike(node) && node.type === expectedClassOrFunction) { const nodeIterator = traverseGenerator(node, traverseConfig);
return node; for (const tmpNode of nodeIterator) {
} if (
isNodeNotHtmlLike(tmpNode) &&
{ tmpNode.type === expectedClassOrFunction
const returnVal = findNodeByComponent(node.child, expectedClassOrFunction); ) {
if (returnVal !== null) { return tmpNode;
return returnVal;
}
}
{
const returnVal = findNodeByComponent(
node.sibling,
expectedClassOrFunction
);
if (returnVal !== null) {
return returnVal;
} }
} }
@@ -113,29 +96,20 @@ function findNodeByComponent(
*/ */
function findNodeByComponentRef( function findNodeByComponentRef(
node: FiberNode | null, node: FiberNode | null,
expectedClassInstance: React.Component expectedClassInstance: React.Component,
traverseConfig?: TTraverseConfig
): FiberNode | null { ): FiberNode | null {
if (node === null) { if (node === null) {
return null; return null;
} }
if (isNodeNotHtmlLike(node) && node.stateNode === expectedClassInstance) { const nodeIterator = traverseGenerator(node, traverseConfig);
return node; for (const tmpNode of nodeIterator) {
} if (
isNodeNotHtmlLike(tmpNode) &&
{ tmpNode.stateNode === expectedClassInstance
const returnVal = findNodeByComponentRef(node.child, expectedClassInstance); ) {
if (returnVal !== null) { return tmpNode;
return returnVal;
}
}
{
const returnVal = findNodeByComponentRef(
node.sibling,
expectedClassInstance
);
if (returnVal !== null) {
return returnVal;
} }
} }