Skip to content

Commit 1e41588

Browse files
authored
fix(comp: tree): Asynchronous loading node hierarchy error (#838)
fix #835
1 parent c516259 commit 1e41588

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

packages/components/tree/__tests__/tree.spec.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,7 @@ describe('Tree', () => {
737737
},
738738
})
739739

740-
const allNodes = wrapper.findAll('.ix-tree-node')
740+
let allNodes = wrapper.findAll('.ix-tree-node')
741741

742742
expect(allNodes.length).toBe(2)
743743
expect(allNodes[0].find('.ix-tree-node-expand').exists()).toBe(true)
@@ -749,9 +749,14 @@ describe('Tree', () => {
749749

750750
await wait(50)
751751

752-
expect(wrapper.findAll('.ix-tree-node').length).toBe(4)
752+
allNodes = wrapper.findAll('.ix-tree-node')
753+
754+
expect(allNodes.length).toBe(4)
753755
expect(allNodes[0].find('.ix-tree-node-expand').find('.ix-icon-loading').exists()).toBe(false)
754756
expect(allNodes[0].find('.ix-tree-node-expand').find('.ix-icon-right').exists()).toBe(true)
757+
expect(
758+
allNodes[1].find('.ix-tree-node').find('.ix-tree-node-indent').findAll('.ix-tree-node-indent-unit').length,
759+
).toBe(1)
755760
})
756761

757762
test('loadedKeys work', async () => {
@@ -782,7 +787,7 @@ describe('Tree', () => {
782787
},
783788
})
784789

785-
const allNodes = wrapper.findAll('.ix-tree-node')
790+
let allNodes = wrapper.findAll('.ix-tree-node')
786791

787792
expect(allNodes.length).toBe(2)
788793

@@ -792,7 +797,9 @@ describe('Tree', () => {
792797

793798
await wait(50)
794799

795-
expect(wrapper.findAll('.ix-tree-node').length).toBe(2)
800+
allNodes = wrapper.findAll('.ix-tree-node')
801+
802+
expect(allNodes.length).toBe(2)
796803

797804
await wrapper.setProps({ loadedKeys: [] })
798805

packages/components/tree/src/composables/useDataSource.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import type { ComputedRef } from 'vue'
1313

1414
import { computed } from 'vue'
1515

16+
import { isNil } from 'lodash-es'
17+
1618
export interface MergedNode {
1719
children?: MergedNode[]
1820
label: string
@@ -68,11 +70,13 @@ export function convertMergeNodes(
6870
getNodeKey: ComputedRef<GetNodeKey>,
6971
nodes: TreeNode[],
7072
parentKey?: VKey,
73+
parentLevel?: number,
7174
): MergedNode[] {
7275
const getKey = getNodeKey.value
7376

7477
const { childrenKey, labelKey, disabled, loadChildren } = props
7578

79+
const level = isNil(parentLevel) ? -1 : parentLevel
7680
return nodes.map((node, index) =>
7781
convertMergeNode(
7882
node,
@@ -83,7 +87,7 @@ export function convertMergeNodes(
8387
!!loadChildren,
8488
index === 0,
8589
index === nodes.length - 1,
86-
-1,
90+
level,
8791
parentKey,
8892
),
8993
)

packages/components/tree/src/composables/useExpandable.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ export function useExpandable(
7171
const nodeMap = mergedNodeMap.value
7272
const currNode = nodeMap.get(key)!
7373
if (childrenNodes.length) {
74-
const mergedChildren = convertMergeNodes(props, getNodeKey, childrenNodes, key)
74+
const level = currNode.level
75+
const mergedChildren = convertMergeNodes(props, getNodeKey, childrenNodes, key, level)
7576
convertMergedNodeMap(mergedChildren, nodeMap)
7677
currNode.rawNode[childrenKey] = childrenNodes
7778
currNode.children = mergedChildren

0 commit comments

Comments
 (0)