From 0bc8c1af995d91d8237f0869805269f4599ee48f Mon Sep 17 00:00:00 2001 From: bendtherules Date: Wed, 11 Sep 2019 16:18:40 +0530 Subject: [PATCH] traverseGenerator - Add option to skip traversing siblings for first node Which is usually expected, when we think of it as a recursive traversal --- src/traverse.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/traverse.ts b/src/traverse.ts index be64885..885459e 100644 --- a/src/traverse.ts +++ b/src/traverse.ts @@ -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 { 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 + }); } }