diff --git a/packages/cdk/utils/__tests__/vNode.spec.ts b/packages/cdk/utils/__tests__/vNode.spec.ts index cd0746b91..8679cd1b5 100644 --- a/packages/cdk/utils/__tests__/vNode.spec.ts +++ b/packages/cdk/utils/__tests__/vNode.spec.ts @@ -23,6 +23,16 @@ describe('vNode.ts', () => { expect(getFirstValidNode(arrayValue as VNodeChild)).toBeUndefined() expect(getFirstValidNode(vNode as VNodeChild)).toBeUndefined() + vNode.type = Comment + const textvNode: FakeVNode = { + type: Text, + } + const startCommentNodeArrayValue: FakeVNode[] = [vNode, textvNode] + expect(getFirstValidNode(startCommentNodeArrayValue as VNodeChild, 0)).toEqual(textvNode) + expect(getFirstValidNode(vNode as VNodeChild, 0)).toBeUndefined() + expect(getFirstValidNode(startCommentNodeArrayValue as VNodeChild, 1)).toEqual(textvNode) + expect(getFirstValidNode(vNode as VNodeChild, 1)).toBeUndefined() + vNode.type = Fragment expect(getFirstValidNode(arrayValue as VNodeChild, 0)).toBeUndefined() expect(getFirstValidNode(vNode as VNodeChild, 0)).toBeUndefined() diff --git a/packages/cdk/utils/src/vNode.ts b/packages/cdk/utils/src/vNode.ts index 5ef89b0d8..0ad226544 100644 --- a/packages/cdk/utils/src/vNode.ts +++ b/packages/cdk/utils/src/vNode.ts @@ -37,13 +37,14 @@ function getChildren(node: VNode, depth: number): VNode | undefined { * @param maxDepth depth to be searched, default is 3 */ export function getFirstValidNode(nodes: VNodeChild, maxDepth = 3): VNode | undefined { - if (isNil(nodes) || (Array.isArray(nodes) && !nodes.length)) { + const targetNodes = Array.isArray(nodes) ? nodes.filter(item => !isComment(item)) : nodes + if (isNil(targetNodes) || (Array.isArray(targetNodes) && !targetNodes.length)) { return } - if (Array.isArray(nodes) && nodes.length > 0) { - return getChildren(nodes[0] as VNode, maxDepth) + if (Array.isArray(targetNodes) && targetNodes.length > 0) { + return getChildren(targetNodes[0] as VNode, maxDepth) } - return getChildren(nodes as VNode, maxDepth) + return getChildren(targetNodes as VNode, maxDepth) } /**