Skip to content

Commit 2b1fd14

Browse files
authored
Merge pull request #106 from wsfe/fix/2.x-animation-duplicate-key
fix: 2.x animation duplicate key
2 parents ec4f63f + 7ee51ed commit 2b1fd14

File tree

6 files changed

+29
-21
lines changed

6 files changed

+29
-21
lines changed

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@wsfe/ctree",
3-
"version": "2.4.0",
3+
"version": "2.4.1",
44
"main": "./dist/ctree.umd.min.js",
55
"types": "./types",
66
"description": "A vue tree component using virtual list.",

Diff for: src/components/Tree.vue

+8-3
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,7 @@ export default (Vue as VueConstructor<Vue & {
458458
ready: false,
459459
currentExpandState: false,
460460
461+
expandRenderStart: 0,
461462
topNodes: [] as TreeNode[],
462463
middleNodes: [] as TreeNode[],
463464
bottomNodes: [] as TreeNode[],
@@ -945,6 +946,7 @@ export default (Vue as VueConstructor<Vue & {
945946
this.expandAnimation.index = -1
946947
this.expandAnimation.level = -1
947948
949+
this.expandAnimation.expandRenderStart = 0
948950
this.expandAnimation.topNodes = []
949951
this.expandAnimation.middleNodes = []
950952
this.expandAnimation.bottomNodes = []
@@ -954,7 +956,8 @@ export default (Vue as VueConstructor<Vue & {
954956
const nodeToExpandLevel = this.expandAnimation.level
955957
const middleNodes: TreeNode[] = []
956958
const renderNodesLength = this.renderNodes.length
957-
for (let i = this.expandAnimation.index + 1; i < renderNodesLength; i++) {
959+
const expandRenderStartDiff = this.renderStart - this.expandAnimation.expandRenderStart
960+
for (let i = this.expandAnimation.index - expandRenderStartDiff + 1; i < renderNodesLength; i++) {
958961
if (this.renderNodes[i]._level > nodeToExpandLevel) {
959962
middleNodes.push(this.renderNodes[i])
960963
} else break
@@ -974,6 +977,7 @@ export default (Vue as VueConstructor<Vue & {
974977
this.expandAnimation.start = true
975978
this.expandAnimation.currentExpandState = nodeToExpand.expand
976979
this.expandAnimation.nextState = !nodeToExpand.expand
980+
this.expandAnimation.expandRenderStart = this.renderStart
977981
978982
if (this.expandAnimation.nextState) {
979983
this.expandAnimation.bottomNodes = this.renderNodes.slice(this.expandAnimation.index + 1)
@@ -994,11 +998,12 @@ export default (Vue as VueConstructor<Vue & {
994998
if (this.expandAnimation.index === -1) return
995999
9961000
this.$nextTick(() => {
997-
this.expandAnimation.topNodes = this.renderNodes.slice(0, this.expandAnimation.index + 1)
1001+
const expandRenderStartDiff = this.renderStart - this.expandAnimation.expandRenderStart
1002+
this.expandAnimation.topNodes = this.renderNodes.slice(0, this.expandAnimation.index - expandRenderStartDiff + 1)
9981003
if (this.expandAnimation.nextState) {
9991004
this.updateMiddleNodes()
10001005
} else {
1001-
this.expandAnimation.bottomNodes = this.renderNodes.slice(this.expandAnimation.index + 1)
1006+
this.expandAnimation.bottomNodes = this.renderNodes.slice(this.expandAnimation.index - expandRenderStartDiff + 1)
10021007
}
10031008
this.expandAnimation.ready = true
10041009
this.$nextTick(() => {

Diff for: types/src/components/Tree.vue.d.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
5454
nextState: boolean;
5555
ready: boolean;
5656
currentExpandState: boolean;
57+
expandRenderStart: number;
5758
topNodes: TreeNode[];
5859
middleNodes: TreeNode[];
5960
bottomNodes: TreeNode[];
@@ -70,8 +71,8 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
7071
setExpand(key: TreeNodeKeyType, value: boolean, expandParent?: boolean): void;
7172
setExpandKeys(keys: TreeNodeKeyType[], value: boolean): void;
7273
setExpandAll(value: boolean): void;
73-
getCheckedNodes(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNode[];
74-
getCheckedKeys(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNodeKeyType[];
74+
getCheckedNodes(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNode[];
75+
getCheckedKeys(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNodeKeyType[];
7576
getIndeterminateNodes(): TreeNode[];
7677
getSelectedNode(): TreeNode | null;
7778
getSelectedKey(): string | number | null;
@@ -189,7 +190,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
189190
draggable: boolean;
190191
droppable: boolean;
191192
beforeDropMethod: (dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: dragHoverPartEnum) => boolean;
192-
ignoreMode: "none" | "parents" | "children";
193+
ignoreMode: "children" | "none" | "parents";
193194
autoLoad: boolean;
194195
load: (node: TreeNode | null, resolve: Function, reject: Function) => any;
195196
render: (h: CreateElement, node: TreeNode) => VNode;

Diff for: types/src/components/TreeDrop.vue.d.ts

+8-7
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
3838
setExpand: (key: TreeNodeKeyType, value: boolean, expandParent?: boolean) => void;
3939
setExpandKeys: (keys: TreeNodeKeyType[], value: boolean) => void;
4040
setExpandAll: (value: boolean) => void;
41-
getCheckedNodes: (ignoreMode?: "none" | "parents" | "children" | undefined) => TreeNode[];
42-
getCheckedKeys: (ignoreMode?: "none" | "parents" | "children" | undefined) => TreeNodeKeyType[];
41+
getCheckedNodes: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNode[];
42+
getCheckedKeys: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNodeKeyType[];
4343
getIndeterminateNodes: () => TreeNode[];
4444
getSelectedNode: () => TreeNode | null;
4545
getSelectedKey: () => string | number | null;
@@ -106,6 +106,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
106106
nextState: boolean;
107107
ready: boolean;
108108
currentExpandState: boolean;
109+
expandRenderStart: number;
109110
topNodes: TreeNode[];
110111
middleNodes: TreeNode[];
111112
bottomNodes: TreeNode[];
@@ -123,8 +124,8 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
123124
setExpand(key: TreeNodeKeyType, value: boolean, expandParent?: boolean): void;
124125
setExpandKeys(keys: TreeNodeKeyType[], value: boolean): void;
125126
setExpandAll(value: boolean): void;
126-
getCheckedNodes(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNode[];
127-
getCheckedKeys(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNodeKeyType[];
127+
getCheckedNodes(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNode[];
128+
getCheckedKeys(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNodeKeyType[];
128129
getIndeterminateNodes(): TreeNode[];
129130
getSelectedNode(): TreeNode | null;
130131
getSelectedKey(): string | number | null;
@@ -205,7 +206,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
205206
draggable: boolean;
206207
droppable: boolean;
207208
beforeDropMethod: (dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: import("../const").dragHoverPartEnum) => boolean;
208-
ignoreMode: "none" | "parents" | "children";
209+
ignoreMode: "children" | "none" | "parents";
209210
autoLoad: boolean;
210211
load: (node: TreeNode | null, resolve: Function, reject: Function) => any;
211212
render: (h: import("vue").CreateElement, node: TreeNode) => import("vue").VNode;
@@ -274,8 +275,8 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
274275
setExpand: (key: TreeNodeKeyType, value: boolean, expandParent?: boolean) => void;
275276
setExpandKeys: (keys: TreeNodeKeyType[], value: boolean) => void;
276277
setExpandAll: (value: boolean) => void;
277-
getCheckedNodes: (ignoreMode?: "none" | "parents" | "children" | undefined) => TreeNode[];
278-
getCheckedKeys: (ignoreMode?: "none" | "parents" | "children" | undefined) => TreeNodeKeyType[];
278+
getCheckedNodes: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNode[];
279+
getCheckedKeys: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNodeKeyType[];
279280
getIndeterminateNodes: () => TreeNode[];
280281
getSelectedNode: () => TreeNode | null;
281282
getSelectedKey: () => string | number | null;

Diff for: types/src/components/TreeSearch.vue.d.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
2525
nextState: boolean;
2626
ready: boolean;
2727
currentExpandState: boolean;
28+
expandRenderStart: number;
2829
topNodes: TreeNode[];
2930
middleNodes: TreeNode[];
3031
bottomNodes: TreeNode[];
@@ -42,8 +43,8 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
4243
setExpand(key: TreeNodeKeyType, value: boolean, expandParent?: boolean): void;
4344
setExpandKeys(keys: TreeNodeKeyType[], value: boolean): void;
4445
setExpandAll(value: boolean): void;
45-
getCheckedNodes(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNode[];
46-
getCheckedKeys(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNodeKeyType[];
46+
getCheckedNodes(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNode[];
47+
getCheckedKeys(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNodeKeyType[];
4748
getIndeterminateNodes(): TreeNode[];
4849
getSelectedNode(): TreeNode | null;
4950
getSelectedKey(): string | number | null;
@@ -124,7 +125,7 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
124125
draggable: boolean;
125126
droppable: boolean;
126127
beforeDropMethod: (dragKey: TreeNodeKeyType, dropKey: TreeNodeKeyType, hoverPart: import("../const").dragHoverPartEnum) => boolean;
127-
ignoreMode: "none" | "parents" | "children";
128+
ignoreMode: "children" | "none" | "parents";
128129
autoLoad: boolean;
129130
load: (node: TreeNode | null, resolve: Function, reject: Function) => any;
130131
render: (h: import("vue").CreateElement, node: TreeNode) => import("vue").VNode;
@@ -199,8 +200,8 @@ declare const _default: import("vue/types/vue").ExtendedVue<Vue & {
199200
setExpand: (key: TreeNodeKeyType, value: boolean, expandParent?: boolean) => void;
200201
setExpandKeys: (keys: TreeNodeKeyType[], value: boolean) => void;
201202
setExpandAll: (value: boolean) => void;
202-
getCheckedNodes: (ignoreMode?: "none" | "parents" | "children" | undefined) => TreeNode[];
203-
getCheckedKeys: (ignoreMode?: "none" | "parents" | "children" | undefined) => TreeNodeKeyType[];
203+
getCheckedNodes: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNode[];
204+
getCheckedKeys: (ignoreMode?: "children" | "none" | "parents" | undefined) => TreeNodeKeyType[];
204205
getIndeterminateNodes: () => TreeNode[];
205206
getSelectedNode: () => TreeNode | null;
206207
getSelectedKey: () => string | number | null;

Diff for: types/src/store/tree-store.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,12 @@ export default class TreeStore {
128128
* 获取多选选中节点
129129
* @param ignoreMode 忽略模式,可选择忽略父节点或子节点,默认值是 CTree 的 ignoreMode Prop
130130
*/
131-
getCheckedNodes(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNode[];
131+
getCheckedNodes(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNode[];
132132
/**
133133
* 获取多选选中的节点 key ,包括未加载的 key
134134
* @param ignoreMode 忽略模式,同 `getCheckedNodes`
135135
*/
136-
getCheckedKeys(ignoreMode?: "none" | "parents" | "children" | undefined): TreeNodeKeyType[];
136+
getCheckedKeys(ignoreMode?: "children" | "none" | "parents" | undefined): TreeNodeKeyType[];
137137
/**
138138
* 获取多选半选状态节点
139139
*/

0 commit comments

Comments
 (0)