diff --git a/src/findNode.ts b/src/findNode.ts index 86e36d9..0c8b9c1 100644 --- a/src/findNode.ts +++ b/src/findNode.ts @@ -1,6 +1,21 @@ import { FiberNode } from "./mocked-types"; import { isNodeNotHtmlLike } from "./utils"; +/** + * Find node by component name, till first match. + * + * Matches against class and function name, doesn't match html-like nodes. + * Returns null if no match is found. + * + * @note Highest chance of collision, least data access needed. + * Different components with same name will collide. + * Needs access to component name. + * + * @example + * // returns FiberNode for first usage of 'AccordionMenu' + * findNodeByComponentName(startNode, "AccordionMenu"); + * + */ function findNodeByComponentName( node: FiberNode | null, expectedName: string @@ -29,6 +44,22 @@ function findNodeByComponentName( return null; } +/** + * Find node by component (i.e. class or function by reference), till first match. + * + * Matches against class and function by reference. + * Returns null if no match is found. + * + * @note Medium chance of collision, medium data access needed. + * This is safer than findNodeByComponentName, as different components with the same name won't collide. + * But, two instances of the same component will still collide. + * Needs access to component class or function. + * + * @example + * // returns FiberNode for first usage of AccordionMenu + * findNodeByComponent(startNode, AccordionMenu); + * + */ function findNodeByComponent( node: FiberNode | null, expectedClassOrFunction: React.ComponentType @@ -60,6 +91,20 @@ function findNodeByComponent( return null; } +/** + * Find node by component instance ref, till first match. + * + * Matches against class instances by reference. + * Returns null if no match is found. + * + * @note Least chance of collision, maximum data access needed. + * Needs access to component instance (through React ref usually). + * + * @example + * // menuRef=createRef(); + * findNodeByComponentRef(startNode, menuRef.current); + * + */ function findNodeByComponentRef( node: FiberNode | null, expectedClassInstance: React.Component