Skip to content

Commit 0d5d223

Browse files
committed
refactor: tree to ts
1 parent 4dbed13 commit 0d5d223

File tree

5 files changed

+37
-27
lines changed

5 files changed

+37
-27
lines changed

components/tree/DirectoryTree.jsx renamed to components/tree/DirectoryTree.tsx

+20-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { inject } from 'vue';
1+
import { defineComponent, inject } from 'vue';
22
import omit from 'omit.js';
33
import debounce from 'lodash-es/debounce';
44
import FolderOpenOutlined from '@ant-design/icons-vue/FolderOpenOutlined';
@@ -15,14 +15,20 @@ import {
1515
getFullKeyListByTreeData,
1616
} from './util';
1717
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';
1920
import { defaultConfigProvider } from '../config-provider';
2021

2122
// export type ExpandAction = false | 'click' | 'dblclick'; export interface
2223
// DirectoryTreeProps extends TreeProps { expandAction?: ExpandAction; }
2324
// export interface DirectoryTreeState { expandedKeys?: string[];
2425
// selectedKeys?: string[]; }
2526

27+
export interface DirectoryTreeState {
28+
_expandedKeys?: string[];
29+
_selectedKeys?: string[];
30+
}
31+
2632
function getIcon(props) {
2733
const { isLeaf, expanded } = props;
2834
if (isLeaf) {
@@ -31,14 +37,10 @@ function getIcon(props) {
3137
return expanded ? <FolderOpenOutlined /> : <FolderOutlined />;
3238
}
3339

34-
export default {
40+
export default defineComponent({
3541
name: 'ADirectoryTree',
3642
mixins: [BaseMixin],
3743
inheritAttrs: false,
38-
// model: {
39-
// prop: 'checkedKeys',
40-
// event: 'check',
41-
// },
4244
props: initDefaultProps(
4345
{
4446
...TreeProps(),
@@ -51,6 +53,11 @@ export default {
5153
),
5254
setup() {
5355
return {
56+
children: null,
57+
onDebounceExpand: null,
58+
tree: null,
59+
lastSelectedKey: [],
60+
cachedSelectedKeys: [],
5461
configProvider: inject('configProvider', defaultConfigProvider),
5562
};
5663
},
@@ -59,7 +66,7 @@ export default {
5966
const { defaultExpandAll, defaultExpandParent, expandedKeys, defaultExpandedKeys } = props;
6067
const children = getSlot(this);
6168
const { keyEntities } = convertTreeToEntities(children);
62-
const state = {};
69+
const state: DirectoryTreeState = {};
6370
// Selected keys
6471
state._selectedKeys = props.selectedKeys || props.defaultSelectedKeys || [];
6572

@@ -75,15 +82,15 @@ export default {
7582
} else {
7683
state._expandedKeys = expandedKeys || defaultExpandedKeys;
7784
}
78-
79-
this.onDebounceExpand = debounce(this.expandFolderNode, 200, { leading: true });
80-
this.children = null;
8185
return {
8286
_selectedKeys: [],
8387
_expandedKeys: [],
8488
...state,
8589
};
8690
},
91+
created() {
92+
this.onDebounceExpand = debounce(this.expandFolderNode, 200, { leading: true });
93+
},
8794
watch: {
8895
expandedKeys(val) {
8996
this.setState({ _expandedKeys: val });
@@ -130,7 +137,7 @@ export default {
130137
const { node, nativeEvent } = event;
131138
const { eventKey = '' } = node;
132139

133-
const newState = {};
140+
const newState: DirectoryTreeState = {};
134141

135142
// We need wrap this event since some value is not same
136143
const newEvent = {
@@ -235,4 +242,4 @@ export default {
235242
};
236243
return <Tree {...treeProps}>{this.children}</Tree>;
237244
},
238-
};
245+
});

components/tree/Tree.jsx renamed to components/tree/Tree.tsx

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { inject } from 'vue';
1+
import { defineComponent, inject } from 'vue';
22
import classNames from '../_util/classNames';
33
import LoadingOutlined from '@ant-design/icons-vue/LoadingOutlined';
44
import FileOutlined from '@ant-design/icons-vue/FileOutlined';
@@ -8,7 +8,8 @@ import PlusSquareOutlined from '@ant-design/icons-vue/PlusSquareOutlined';
88
import VcTree from '../vc-tree';
99
import animation from '../_util/openAnimation';
1010
import PropTypes from '../_util/vue-types';
11-
import { initDefaultProps, getOptionProps, getComponent, getSlot } from '../_util/props-util';
11+
import { getOptionProps, getComponent, getSlot } from '../_util/props-util';
12+
import initDefaultProps from '../_util/props-util/initDefaultProps';
1213
import { cloneElement } from '../_util/vnode';
1314
import { defaultConfigProvider } from '../config-provider';
1415

@@ -102,7 +103,7 @@ function TreeProps() {
102103

103104
export { TreeProps };
104105

105-
export default {
106+
export default defineComponent({
106107
name: 'ATree',
107108
inheritAttrs: false,
108109
props: initDefaultProps(TreeProps(), {
@@ -116,12 +117,13 @@ export default {
116117
}),
117118
setup() {
118119
return {
120+
tree: null,
119121
configProvider: inject('configProvider', defaultConfigProvider),
120122
};
121123
},
122124
TreeNode,
123125
methods: {
124-
renderSwitcherIcon(prefixCls, switcherIcon, { isLeaf, loading, expanded }) {
126+
renderSwitcherIcon(prefixCls: string, switcherIcon, { isLeaf, loading, expanded }) {
125127
const { showLine } = this.$props;
126128
if (loading) {
127129
return <LoadingOutlined class={`${prefixCls}-switcher-loading-icon`} />;
@@ -184,7 +186,7 @@ export default {
184186
this.$emit('update:expandedKeys', expandedKeys);
185187
this.$emit('expand', expandedKeys, eventObj);
186188
},
187-
handleSelect(selectedKeys, eventObj) {
189+
handleSelect(selectedKeys: string[], eventObj) {
188190
this.$emit('update:selectedKeys', selectedKeys);
189191
this.$emit('select', selectedKeys, eventObj);
190192
},
@@ -216,10 +218,10 @@ export default {
216218
onCheck: this.handleCheck,
217219
onExpand: this.handleExpand,
218220
onSelect: this.handleSelect,
219-
};
221+
} as any;
220222
if (treeData) {
221223
vcTreeProps.treeData = treeData;
222224
}
223225
return <VcTree {...vcTreeProps} __propsSymbol__={[]} />;
224226
},
225-
};
227+
});

components/tree/index.jsx renamed to components/tree/index.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import { App } from 'vue';
12
import Tree from './Tree';
23
import DirectoryTree from './DirectoryTree';
34

45
Tree.TreeNode.name = 'ATreeNode';
56
Tree.DirectoryTree = DirectoryTree;
67
/* istanbul ignore next */
7-
Tree.install = function(app) {
8+
Tree.install = function(app: App) {
89
app.component(Tree.name, Tree);
910
app.component(Tree.TreeNode.name, Tree.TreeNode);
1011
app.component(DirectoryTree.name, DirectoryTree);
File renamed without changes.

components/tree/util.js renamed to components/tree/util.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { getNodeChildren, convertTreeToEntities } from '../vc-tree/src/util';
22
import { getSlot } from '../_util/props-util';
33

4-
const Record = {
5-
None: 'node',
6-
Start: 'start',
7-
End: 'end',
8-
};
4+
enum Record {
5+
None,
6+
Start,
7+
End,
8+
}
99

1010
// TODO: Move this logic into `rc-tree`
1111
function traverseNodesKey(rootChildren, callback) {
@@ -88,7 +88,7 @@ export function convertDirectoryKeysToNodes(rootChildren, keys) {
8888
return nodes;
8989
}
9090

91-
export function getFullKeyListByTreeData(treeData, replaceFields = {}) {
91+
export function getFullKeyListByTreeData(treeData: any, replaceFields: any = {}) {
9292
let keys = [];
9393
const { key = 'key', children = 'children' } = replaceFields(treeData || []).forEach(item => {
9494
keys.push(item[key]);

0 commit comments

Comments
 (0)