traverseGenerator - Add skipSelfForStartNode start param to skip startNode (default:false)

Default false to keep current testcases running
This commit is contained in:
2019-09-20 11:26:33 +05:30
parent 7b27f9c5b7
commit 051bb1f543
+11 -4
View File
@@ -4,6 +4,7 @@ import { FiberNode } from "./mocked-types";
interface TTraverseConfig { interface TTraverseConfig {
order?: Array<"self" | "child" | "sibling">; order?: Array<"self" | "child" | "sibling">;
skipSiblingForStartNode?: boolean; skipSiblingForStartNode?: boolean;
skipSelfForStartNode?: boolean;
} }
/** /**
@@ -69,13 +70,16 @@ function* traverseGenerator(
node: FiberNode, node: FiberNode,
{ {
order = ["self", "child", "sibling"], order = ["self", "child", "sibling"],
skipSiblingForStartNode = true skipSiblingForStartNode = true,
skipSelfForStartNode = false
}: TTraverseConfig = {} }: TTraverseConfig = {}
): IterableIterator<FiberNode> { ): IterableIterator<FiberNode> {
let skipChild = false, let skipChild = false,
skipSibling = skipSiblingForStartNode; skipSibling = skipSiblingForStartNode,
skipSelf = skipSelfForStartNode;
function* traverseSelf() { function* traverseSelf() {
if (!skipSelf) {
const controlInput: const controlInput:
| { skipChild?: boolean; skipSibling?: boolean } | { skipChild?: boolean; skipSibling?: boolean }
| undefined = yield node; | undefined = yield node;
@@ -84,13 +88,15 @@ function* traverseGenerator(
({ skipChild = skipChild, skipSibling = skipSibling } = controlInput); ({ skipChild = skipChild, skipSibling = skipSibling } = controlInput);
} }
} }
}
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, { yield* traverseGenerator(nextNode, {
order, order,
skipSiblingForStartNode: false skipSiblingForStartNode: false,
skipSelfForStartNode: false
}); });
} }
} }
@@ -100,7 +106,8 @@ function* traverseGenerator(
const nextNode = node.sibling; const nextNode = node.sibling;
yield* traverseGenerator(nextNode, { yield* traverseGenerator(nextNode, {
order, order,
skipSiblingForStartNode: false skipSiblingForStartNode: false,
skipSelfForStartNode: false
}); });
} }
} }