1
- import { inject } from 'vue' ;
1
+ import { defineComponent , inject } from 'vue' ;
2
2
import omit from 'omit.js' ;
3
3
import debounce from 'lodash-es/debounce' ;
4
4
import FolderOpenOutlined from '@ant-design/icons-vue/FolderOpenOutlined' ;
@@ -15,14 +15,20 @@ import {
15
15
getFullKeyListByTreeData ,
16
16
} from './util' ;
17
17
import BaseMixin from '../_util/BaseMixin' ;
18
- import { initDefaultProps , getOptionProps , getComponent , getSlot } from '../_util/props-util' ;
18
+ import { getOptionProps , getComponent , getSlot } from '../_util/props-util' ;
19
+ import initDefaultProps from '../_util/props-util/initDefaultProps' ;
19
20
import { defaultConfigProvider } from '../config-provider' ;
20
21
21
22
// export type ExpandAction = false | 'click' | 'dblclick'; export interface
22
23
// DirectoryTreeProps extends TreeProps { expandAction?: ExpandAction; }
23
24
// export interface DirectoryTreeState { expandedKeys?: string[];
24
25
// selectedKeys?: string[]; }
25
26
27
+ export interface DirectoryTreeState {
28
+ _expandedKeys ?: string [ ] ;
29
+ _selectedKeys ?: string [ ] ;
30
+ }
31
+
26
32
function getIcon ( props ) {
27
33
const { isLeaf, expanded } = props ;
28
34
if ( isLeaf ) {
@@ -31,14 +37,10 @@ function getIcon(props) {
31
37
return expanded ? < FolderOpenOutlined /> : < FolderOutlined /> ;
32
38
}
33
39
34
- export default {
40
+ export default defineComponent ( {
35
41
name : 'ADirectoryTree' ,
36
42
mixins : [ BaseMixin ] ,
37
43
inheritAttrs : false ,
38
- // model: {
39
- // prop: 'checkedKeys',
40
- // event: 'check',
41
- // },
42
44
props : initDefaultProps (
43
45
{
44
46
...TreeProps ( ) ,
@@ -51,6 +53,11 @@ export default {
51
53
) ,
52
54
setup ( ) {
53
55
return {
56
+ children : null ,
57
+ onDebounceExpand : null ,
58
+ tree : null ,
59
+ lastSelectedKey : [ ] ,
60
+ cachedSelectedKeys : [ ] ,
54
61
configProvider : inject ( 'configProvider' , defaultConfigProvider ) ,
55
62
} ;
56
63
} ,
@@ -59,7 +66,7 @@ export default {
59
66
const { defaultExpandAll, defaultExpandParent, expandedKeys, defaultExpandedKeys } = props ;
60
67
const children = getSlot ( this ) ;
61
68
const { keyEntities } = convertTreeToEntities ( children ) ;
62
- const state = { } ;
69
+ const state : DirectoryTreeState = { } ;
63
70
// Selected keys
64
71
state . _selectedKeys = props . selectedKeys || props . defaultSelectedKeys || [ ] ;
65
72
@@ -75,15 +82,15 @@ export default {
75
82
} else {
76
83
state . _expandedKeys = expandedKeys || defaultExpandedKeys ;
77
84
}
78
-
79
- this . onDebounceExpand = debounce ( this . expandFolderNode , 200 , { leading : true } ) ;
80
- this . children = null ;
81
85
return {
82
86
_selectedKeys : [ ] ,
83
87
_expandedKeys : [ ] ,
84
88
...state ,
85
89
} ;
86
90
} ,
91
+ created ( ) {
92
+ this . onDebounceExpand = debounce ( this . expandFolderNode , 200 , { leading : true } ) ;
93
+ } ,
87
94
watch : {
88
95
expandedKeys ( val ) {
89
96
this . setState ( { _expandedKeys : val } ) ;
@@ -130,7 +137,7 @@ export default {
130
137
const { node, nativeEvent } = event ;
131
138
const { eventKey = '' } = node ;
132
139
133
- const newState = { } ;
140
+ const newState : DirectoryTreeState = { } ;
134
141
135
142
// We need wrap this event since some value is not same
136
143
const newEvent = {
@@ -235,4 +242,4 @@ export default {
235
242
} ;
236
243
return < Tree { ...treeProps } > { this . children } </ Tree > ;
237
244
} ,
238
- } ;
245
+ } ) ;
0 commit comments