Skip to content

Commit 62c6f0e

Browse files
committed
fix: directory tree fieldsname error #4726
close #4726
1 parent 75cf264 commit 62c6f0e

File tree

2 files changed

+39
-15
lines changed

2 files changed

+39
-15
lines changed

components/tree/DirectoryTree.tsx

+25-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ExtractPropTypes, PropType } from 'vue';
2-
import { nextTick, onUpdated, ref, watch, defineComponent } from 'vue';
2+
import { nextTick, onUpdated, ref, watch, defineComponent, computed } from 'vue';
33
import debounce from 'lodash-es/debounce';
44
import FolderOpenOutlined from '@ant-design/icons-vue/FolderOpenOutlined';
55
import FolderOutlined from '@ant-design/icons-vue/FolderOutlined';
@@ -8,7 +8,11 @@ import classNames from '../_util/classNames';
88
import type { AntdTreeNodeAttribute, TreeProps } from './Tree';
99
import Tree, { treeProps } from './Tree';
1010
import initDefaultProps from '../_util/props-util/initDefaultProps';
11-
import { convertDataToEntities, convertTreeToData } from '../vc-tree/utils/treeUtil';
11+
import {
12+
convertDataToEntities,
13+
convertTreeToData,
14+
fillFieldNames,
15+
} from '../vc-tree/utils/treeUtil';
1216
import type { DataNode, EventDataNode, Key } from '../vc-tree/interface';
1317
import { conductExpandParent } from '../vc-tree/util';
1418
import { calcRangeKeys, convertDirectoryKeysToNodes } from './utils/dictUtil';
@@ -168,7 +172,7 @@ export default defineComponent({
168172
emit('doubleclick', event, node);
169173
emit('dblclick', event, node);
170174
};
171-
175+
const fieldNames = computed(() => fillFieldNames(props.fieldNames));
172176
const onSelect = (
173177
keys: Key[],
174178
event: {
@@ -181,8 +185,7 @@ export default defineComponent({
181185
) => {
182186
const { multiple } = props;
183187
const { node, nativeEvent } = event;
184-
const { key = '' } = node;
185-
188+
const key = node[fieldNames.value.key];
186189
// const newState: DirectoryTreeState = {};
187190

188191
// We need wrap this event since some value is not same
@@ -202,7 +205,11 @@ export default defineComponent({
202205
newSelectedKeys = keys;
203206
lastSelectedKey.value = key;
204207
cachedSelectedKeys.value = newSelectedKeys;
205-
newEvent.selectedNodes = convertDirectoryKeysToNodes(treeData.value, newSelectedKeys);
208+
newEvent.selectedNodes = convertDirectoryKeysToNodes(
209+
treeData.value,
210+
newSelectedKeys,
211+
fieldNames.value,
212+
);
206213
} else if (multiple && shiftPick) {
207214
// Shift click
208215
newSelectedKeys = Array.from(
@@ -213,16 +220,25 @@ export default defineComponent({
213220
expandedKeys: expandedKeys.value,
214221
startKey: key,
215222
endKey: lastSelectedKey.value,
223+
fieldNames: fieldNames.value,
216224
}),
217225
]),
218226
);
219-
newEvent.selectedNodes = convertDirectoryKeysToNodes(treeData.value, newSelectedKeys);
227+
newEvent.selectedNodes = convertDirectoryKeysToNodes(
228+
treeData.value,
229+
newSelectedKeys,
230+
fieldNames.value,
231+
);
220232
} else {
221233
// Single click
222-
newSelectedKeys = [key];
234+
newSelectedKeys = keys;
223235
lastSelectedKey.value = key;
224236
cachedSelectedKeys.value = newSelectedKeys;
225-
newEvent.selectedNodes = convertDirectoryKeysToNodes(treeData.value, newSelectedKeys);
237+
newEvent.selectedNodes = convertDirectoryKeysToNodes(
238+
treeData.value,
239+
newSelectedKeys,
240+
fieldNames.value,
241+
);
226242
}
227243

228244
emit('update:selectedKeys', newSelectedKeys);

components/tree/utils/dictUtil.ts

+14-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { DataNode, Key } from '../../vc-tree/interface';
1+
import type { DataNode, FieldNames, Key } from '../../vc-tree/interface';
22

33
enum Record {
44
None,
@@ -8,12 +8,14 @@ enum Record {
88

99
function traverseNodesKey(
1010
treeData: DataNode[],
11+
fieldNames: FieldNames,
1112
callback: (key: Key | number | null, node: DataNode) => boolean,
1213
) {
1314
function processNode(dataNode: DataNode) {
14-
const { key, children } = dataNode;
15+
const key = dataNode[fieldNames.key];
16+
const children = dataNode[fieldNames.children];
1517
if (callback(key, dataNode) !== false) {
16-
traverseNodesKey(children || [], callback);
18+
traverseNodesKey(children || [], fieldNames, callback);
1719
}
1820
}
1921

@@ -26,11 +28,13 @@ export function calcRangeKeys({
2628
expandedKeys,
2729
startKey,
2830
endKey,
31+
fieldNames,
2932
}: {
3033
treeData: DataNode[];
3134
expandedKeys: Key[];
3235
startKey?: Key;
3336
endKey?: Key;
37+
fieldNames: FieldNames;
3438
}): Key[] {
3539
const keys: Key[] = [];
3640
let record: Record = Record.None;
@@ -46,7 +50,7 @@ export function calcRangeKeys({
4650
return key === startKey || key === endKey;
4751
}
4852

49-
traverseNodesKey(treeData, (key: Key) => {
53+
traverseNodesKey(treeData, fieldNames, (key: Key) => {
5054
if (record === Record.End) {
5155
return false;
5256
}
@@ -76,10 +80,14 @@ export function calcRangeKeys({
7680
return keys;
7781
}
7882

79-
export function convertDirectoryKeysToNodes(treeData: DataNode[], keys: Key[]) {
83+
export function convertDirectoryKeysToNodes(
84+
treeData: DataNode[],
85+
keys: Key[],
86+
fieldNames: FieldNames,
87+
) {
8088
const restKeys: Key[] = [...keys];
8189
const nodes: DataNode[] = [];
82-
traverseNodesKey(treeData, (key: Key, node: DataNode) => {
90+
traverseNodesKey(treeData, fieldNames, (key: Key, node: DataNode) => {
8391
const index = restKeys.indexOf(key);
8492
if (index !== -1) {
8593
nodes.push(node);

0 commit comments

Comments
 (0)