Skip to content

Commit

Permalink
fix(comp: tree): Asynchronous loading node hierarchy error
Browse files Browse the repository at this point in the history
  • Loading branch information
liuzaijiang committed Apr 6, 2022
1 parent c516259 commit f650e2d
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 6 deletions.
15 changes: 11 additions & 4 deletions packages/components/tree/__tests__/tree.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -737,7 +737,7 @@ describe('Tree', () => {
},
})

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

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

await wait(50)

expect(wrapper.findAll('.ix-tree-node').length).toBe(4)
allNodes = wrapper.findAll('.ix-tree-node')

expect(allNodes.length).toBe(4)
expect(allNodes[0].find('.ix-tree-node-expand').find('.ix-icon-loading').exists()).toBe(false)
expect(allNodes[0].find('.ix-tree-node-expand').find('.ix-icon-right').exists()).toBe(true)
expect(
allNodes[1].find('.ix-tree-node').find('.ix-tree-node-indent').findAll('.ix-tree-node-indent-unit').length,
).toBe(1)
})

test('loadedKeys work', async () => {
Expand Down Expand Up @@ -782,7 +787,7 @@ describe('Tree', () => {
},
})

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

expect(allNodes.length).toBe(2)

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

await wait(50)

expect(wrapper.findAll('.ix-tree-node').length).toBe(2)
allNodes = wrapper.findAll('.ix-tree-node')

expect(allNodes.length).toBe(2)

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

Expand Down
6 changes: 5 additions & 1 deletion packages/components/tree/src/composables/useDataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import type { ComputedRef } from 'vue'

import { computed } from 'vue'

import { isNil } from 'lodash-es'

export interface MergedNode {
children?: MergedNode[]
label: string
Expand Down Expand Up @@ -68,11 +70,13 @@ export function convertMergeNodes(
getNodeKey: ComputedRef<GetNodeKey>,
nodes: TreeNode[],
parentKey?: VKey,
parentLevel?: number,
): MergedNode[] {
const getKey = getNodeKey.value

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

const level = isNil(parentLevel) ? -1 : parentLevel
return nodes.map((node, index) =>
convertMergeNode(
node,
Expand All @@ -83,7 +87,7 @@ export function convertMergeNodes(
!!loadChildren,
index === 0,
index === nodes.length - 1,
-1,
level,
parentKey,
),
)
Expand Down
3 changes: 2 additions & 1 deletion packages/components/tree/src/composables/useExpandable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ export function useExpandable(
const nodeMap = mergedNodeMap.value
const currNode = nodeMap.get(key)!
if (childrenNodes.length) {
const mergedChildren = convertMergeNodes(props, getNodeKey, childrenNodes, key)
const level = currNode.level
const mergedChildren = convertMergeNodes(props, getNodeKey, childrenNodes, key, level)
convertMergedNodeMap(mergedChildren, nodeMap)
currNode.rawNode[childrenKey] = childrenNodes
currNode.children = mergedChildren
Expand Down

0 comments on commit f650e2d

Please sign in to comment.