Files
react-fiber-traverse/src/findNode.ts
T

92 lines
2.0 KiB
TypeScript

import { FiberNode } from "./mocked-types";
import { isNotHtmlLike } from "./utils";
function findNodeByComponentName(
node: FiberNode | null,
expectedName: string
): FiberNode | null {
if (node === null) {
return null;
}
if (isNotHtmlLike(node) && node.type.name === expectedName) {
// console.debug("Found node " + node);
return node;
}
{
const returnVal = findNodeByComponentName(node.child, expectedName);
if (returnVal !== null) {
return returnVal;
}
}
{
const returnVal = findNodeByComponentName(node.sibling, expectedName);
if (returnVal !== null) {
return returnVal;
}
}
return null;
}
function findNodeByComponent(
node: FiberNode | null,
expectedClassOrFunction: React.ComponentType
): FiberNode | null {
if (node === null) {
return null;
}
if (isNotHtmlLike(node) && node.type === expectedClassOrFunction) {
// console.debug("Found node " + node);
return node;
}
{
const returnVal = findNodeByComponent(node.child, expectedClassOrFunction);
if (returnVal !== null) {
return returnVal;
}
}
{
const returnVal = findNodeByComponent(node.sibling, expectedClassOrFunction);
if (returnVal !== null) {
return returnVal;
}
}
return null;
}
function findNodeByComponentInstance(
node: FiberNode | null,
expectedClassInstance: React.Component
): FiberNode | null {
if (node === null) {
return null;
}
if (isNotHtmlLike(node) && node.stateNode === expectedClassInstance) {
// console.debug("Found node " + node);
return node;
}
{
const returnVal = findNodeByComponentInstance(node.child, expectedClassInstance);
if (returnVal !== null) {
return returnVal;
}
}
{
const returnVal = findNodeByComponentInstance(node.sibling, expectedClassInstance);
if (returnVal !== null) {
return returnVal;
}
}
return null;
}
export { findNodeByComponentName, findNodeByComponent, findNodeByComponentInstance };