mirror of
https://github.com/bendtherules/react-fiber-traverse.git
synced 2026-08-18 13:52:36 +00:00
traverseGenerator - Add option to skip traversing siblings for first node
Which is usually expected, when we think of it as a recursive traversal
This commit is contained in:
+15
-5
@@ -63,11 +63,15 @@ import { FiberNode } from "./mocked-types";
|
|||||||
function* traverseGenerator(
|
function* traverseGenerator(
|
||||||
node: FiberNode,
|
node: FiberNode,
|
||||||
{
|
{
|
||||||
order = ["self", "child", "sibling"]
|
order = ["self", "child", "sibling"],
|
||||||
}: { order?: Array<"self" | "child" | "sibling"> } = {}
|
skipSiblingForStartNode = true
|
||||||
|
}: {
|
||||||
|
order?: Array<"self" | "child" | "sibling">;
|
||||||
|
skipSiblingForStartNode?: boolean;
|
||||||
|
} = {}
|
||||||
): IterableIterator<FiberNode> {
|
): IterableIterator<FiberNode> {
|
||||||
let skipChild = false,
|
let skipChild = false,
|
||||||
skipSibling = false;
|
skipSibling = skipSiblingForStartNode;
|
||||||
|
|
||||||
function* traverseSelf() {
|
function* traverseSelf() {
|
||||||
const controlInput:
|
const controlInput:
|
||||||
@@ -82,14 +86,20 @@ function* traverseGenerator(
|
|||||||
function* traverseChild() {
|
function* traverseChild() {
|
||||||
if (!skipChild && node.child !== null) {
|
if (!skipChild && node.child !== null) {
|
||||||
const nextNode = node.child;
|
const nextNode = node.child;
|
||||||
yield* traverseGenerator(nextNode, { order });
|
yield* traverseGenerator(nextNode, {
|
||||||
|
order,
|
||||||
|
skipSiblingForStartNode: false
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function* traverseSibling() {
|
function* traverseSibling() {
|
||||||
if (!skipSibling && node.sibling !== null) {
|
if (!skipSibling && node.sibling !== null) {
|
||||||
const nextNode = node.sibling;
|
const nextNode = node.sibling;
|
||||||
yield* traverseGenerator(nextNode, { order });
|
yield* traverseGenerator(nextNode, {
|
||||||
|
order,
|
||||||
|
skipSiblingForStartNode: false
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user