Skip to content

Commit 896fee0

Browse files
committed
fix half checked node
1 parent aae20c4 commit 896fee0

File tree

3 files changed

+38
-43
lines changed

3 files changed

+38
-43
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-virtual-tree",
3-
"version": "4.0.2",
3+
"version": "4.0.3",
44
"description": "Tree component for large amount of data, base on Vue3",
55
"scripts": {
66
"serve": "vue-cli-service serve --port 4200",

src/components/VirtualTree/index.tsx

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {defineComponent, watch, ref, shallowRef, PropType, h, watchEffect} from 'vue';
1+
import {defineComponent, watch, ref, shallowRef, PropType, h} from 'vue';
22
import { cloneDeep } from 'lodash-es';
33
import {NodeKey, TreeNodeInstance, TreeNodeOptions, TypeWithNull, TypeWithUndefined} from "./types";
44

@@ -63,6 +63,7 @@ export default defineComponent({
6363
watch(() => props.defaultExpandedKeys, newVal => {
6464
service.resetDefaultExpandedKeys(newVal);
6565
service.expandedKeys.value.clear();
66+
service.expandedKeys.value.select(...newVal);
6667
flatList.value = service.flattenTree(props.source, props.defaultSelectedKey, props.defaultCheckedKeys, props.defaultExpandedKeys, props.defaultDisabledKeys);
6768
});
6869

@@ -82,7 +83,6 @@ export default defineComponent({
8283
});
8384

8485
watch(() => props.defaultCheckedKeys, newVal => {
85-
8686
const targets = flatList.value.filter(item => newVal.includes(item.nodeKey));
8787
// console.log('watch defaultCheckedKeys:>> ', targets);
8888
service.resetDefaultCheckedKeys(newVal);
@@ -115,7 +115,6 @@ export default defineComponent({
115115
if (!checked) {
116116
service.removeDefaultCheckedKeys(node);
117117
}
118-
119118
if (!props.checkStrictly) {
120119
service.updateDownwards(checked, node);
121120
service.updateUpwards(node, flatList.value);
@@ -125,33 +124,14 @@ export default defineComponent({
125124

126125
const expandNode = (node: Required<TreeNodeOptions>, children: TreeNodeOptions[] = []) => {
127126
const trueChildren = children.length ? children : cloneDeep(node.children)!;
128-
node.children = (trueChildren as Required<TreeNodeOptions>[]).map(item => {
129-
item.loading = false;
130-
item.level = item.level || node.level! + 1;
131-
item.children = item.children || [];
132-
item.hasChildren = item.hasChildren || false;
133-
item.parentKey = node.nodeKey || null;
134-
135-
if (props.defaultDisabledKeys.includes(item.nodeKey)) {
136-
service.disabledKeys.value.select(item.nodeKey);
137-
}
138-
139-
const selectedKey = service.selectedNodes.value.selected[0]?.nodeKey || service.defaultSelectedKey;
140-
if (selectedKey === item.nodeKey) {
141-
service.selectedNodes.value.select(item as Required<TreeNodeOptions>);
142-
}
143-
144-
const allCheckedKeys = service.checkedNodes.value.selected.map(item => item.nodeKey).concat(service.defaultCheckedKeys);
145-
if (allCheckedKeys.includes(item.nodeKey) || (!props.checkStrictly && service.checkedNodes.value.isSelected(node))) {
146-
service.checkedNodes.value.select(item as Required<TreeNodeOptions>);
147-
}
148-
149-
const allExpandedKeys = service.expandedKeys.value.selected.concat(service.defaultExpandedKeys);
150-
if (allExpandedKeys.includes(item.nodeKey)) {
151-
service.expandedKeys.value.select(item.nodeKey);
152-
}
153-
return item;
154-
});
127+
const selectedKey = service.selectedNodes.value.selected[0]?.nodeKey || service.defaultSelectedKey;
128+
const allExpandedKeys = service.expandedKeys.value.selected.concat(service.defaultExpandedKeys);
129+
const allCheckedKeys = service.checkedNodes.value.selected.map(item => item.nodeKey).concat(service.defaultCheckedKeys);
130+
if (service.checkedNodes.value.isSelected(node)) {
131+
allCheckedKeys.push(...trueChildren.map(item => item.nodeKey));
132+
}
133+
// console.log('allCheckedKeys', allCheckedKeys);
134+
node.children = service.flattenTree(trueChildren, selectedKey, allCheckedKeys, allExpandedKeys, props.defaultDisabledKeys, node);
155135
const targetIndex = flatList.value.findIndex(item => item.nodeKey === node.nodeKey);
156136
flatList.value.splice(targetIndex + 1, 0, ...(node.children as Required<TreeNodeOptions>[]));
157137
}

src/components/VirtualTree/service.ts

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class TreeService {
2323
defaultCheckedKeys: NodeKey[],
2424
defaultExpandedKeys: NodeKey[],
2525
defaultDisabledKeys: NodeKey[],
26+
parent: Required<TreeNodeOptions> | null = null
2627
): Required<TreeNodeOptions>[] {
2728

2829
this.defaultSelectedKey = defaultSelectedKey;
@@ -34,33 +35,47 @@ class TreeService {
3435
return list.map(item => {
3536
const flatNode: Required<TreeNodeOptions> = {
3637
...item,
37-
level,
38+
level: item.level || level + 1,
3839
loading: false,
3940
hasChildren: item.hasChildren || false,
4041
parentKey: parent?.nodeKey || null,
4142
children: item.children || []
4243
};
43-
result.push(flatNode);
44-
if (defaultDisabledKeys.includes(item.nodeKey)) {
45-
this.disabledKeys.value.select(item.nodeKey);
44+
let goon = true;
45+
if (parent) {
46+
if (defaultExpandedKeys.includes(parent.nodeKey)) {
47+
this.expandedKeys.value.select(parent.nodeKey);
48+
if (defaultCheckedKeys.includes(parent.nodeKey)) {
49+
defaultCheckedKeys.push(flatNode.nodeKey);
50+
}
51+
result.push(flatNode);
52+
} else {
53+
goon = false;
54+
}
55+
} else {
56+
result.push(flatNode);
4657
}
47-
if (defaultSelectedKey === item.nodeKey) {
48-
this.selectedNodes.value.select(flatNode);
58+
if (goon) {
59+
if (defaultDisabledKeys.includes(item.nodeKey)) {
60+
this.disabledKeys.value.select(item.nodeKey);
61+
}
62+
if (defaultSelectedKey === item.nodeKey) {
63+
this.selectedNodes.value.select(flatNode);
64+
}
65+
if (item.children?.length) {
66+
flatNode.children = recursion(item.children, level + 1, flatNode);
67+
}
4968
}
5069

51-
// console.log('defaultCheckedKeys :>> ', item.nodeKey, defaultDisabledKeys.includes(item.nodeKey));
70+
// || (parent && defaultCheckedKeys.includes(parent.nodeKey))
5271
if (defaultCheckedKeys.includes(item.nodeKey)) {
5372
this.checkedNodes.value.select(flatNode);
5473
}
55-
if (defaultExpandedKeys.includes(item.nodeKey) && item.children?.length) {
56-
this.expandedKeys.value.select(item.nodeKey);
57-
flatNode.children = recursion(item.children, level + 1, flatNode);
58-
}
5974
return flatNode;
6075
});
6176
}
6277

63-
recursion(source);
78+
recursion(source, parent?.level);
6479
return result;
6580
}
6681

0 commit comments

Comments
 (0)