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:
2019-09-11 16:18:40 +05:30
parent aced1be6e8
commit 0bc8c1af99
+15 -5
View File
@@ -63,11 +63,15 @@ import { FiberNode } from "./mocked-types";
function* traverseGenerator(
node: FiberNode,
{
order = ["self", "child", "sibling"]
}: { order?: Array<"self" | "child" | "sibling"> } = {}
order = ["self", "child", "sibling"],
skipSiblingForStartNode = true
}: {
order?: Array<"self" | "child" | "sibling">;
skipSiblingForStartNode?: boolean;
} = {}
): IterableIterator<FiberNode> {
let skipChild = false,
skipSibling = false;
skipSibling = skipSiblingForStartNode;
function* traverseSelf() {
const controlInput:
@@ -82,14 +86,20 @@ function* traverseGenerator(
function* traverseChild() {
if (!skipChild && node.child !== null) {
const nextNode = node.child;
yield* traverseGenerator(nextNode, { order });
yield* traverseGenerator(nextNode, {
order,
skipSiblingForStartNode: false
});
}
}
function* traverseSibling() {
if (!skipSibling && node.sibling !== null) {
const nextNode = node.sibling;
yield* traverseGenerator(nextNode, { order });
yield* traverseGenerator(nextNode, {
order,
skipSiblingForStartNode: false
});
}
}