@douyinfe/semi-foundation 2.46.1 → 2.47.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/button/button.scss +88 -20
- package/button/variables.scss +13 -0
- package/datePicker/inputFoundation.ts +7 -5
- package/lib/cjs/button/button.css +30 -2
- package/lib/cjs/button/button.scss +88 -20
- package/lib/cjs/button/variables.scss +13 -0
- package/lib/cjs/cascader/foundation.d.ts +1 -4
- package/lib/cjs/datePicker/inputFoundation.js +17 -8
- package/lib/cjs/table/foundation.d.ts +1 -1
- package/lib/cjs/tree/foundation.d.ts +2 -1
- package/lib/cjs/tree/foundation.js +17 -8
- package/lib/cjs/tree/treeUtil.d.ts +15 -6
- package/lib/cjs/tree/treeUtil.js +39 -20
- package/lib/cjs/treeSelect/foundation.d.ts +0 -1
- package/lib/cjs/treeSelect/foundation.js +47 -26
- package/lib/cjs/typography/typography.css +5 -0
- package/lib/cjs/typography/typography.scss +5 -0
- package/lib/cjs/typography/variables.scss +4 -0
- package/lib/cjs/utils/array.d.ts +2 -2
- package/lib/cjs/utils/array.js +2 -2
- package/lib/es/button/button.css +30 -2
- package/lib/es/button/button.scss +88 -20
- package/lib/es/button/variables.scss +13 -0
- package/lib/es/cascader/foundation.d.ts +1 -4
- package/lib/es/datePicker/inputFoundation.js +17 -8
- package/lib/es/table/foundation.d.ts +1 -1
- package/lib/es/tree/foundation.d.ts +2 -1
- package/lib/es/tree/foundation.js +17 -8
- package/lib/es/tree/treeUtil.d.ts +15 -6
- package/lib/es/tree/treeUtil.js +39 -20
- package/lib/es/treeSelect/foundation.d.ts +0 -1
- package/lib/es/treeSelect/foundation.js +47 -26
- package/lib/es/typography/typography.css +5 -0
- package/lib/es/typography/typography.scss +5 -0
- package/lib/es/typography/variables.scss +4 -0
- package/lib/es/utils/array.d.ts +2 -2
- package/lib/es/utils/array.js +2 -2
- package/package.json +3 -3
- package/table/foundation.ts +1 -1
- package/tree/foundation.ts +14 -7
- package/tree/treeUtil.ts +47 -18
- package/treeSelect/foundation.ts +35 -26
- package/typography/typography.scss +5 -0
- package/typography/variables.scss +4 -0
- package/utils/array.ts +4 -4
package/lib/es/tree/treeUtil.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _omit from "lodash/omit";
|
|
1
2
|
import _get from "lodash/get";
|
|
2
3
|
import _pick from "lodash/pick";
|
|
3
4
|
import _isEmpty from "lodash/isEmpty";
|
|
@@ -25,17 +26,27 @@ function isValid(val) {
|
|
|
25
26
|
* @param filteredShownKeys
|
|
26
27
|
* need expanded keys, provides `true` means all expanded
|
|
27
28
|
*/
|
|
28
|
-
export function flattenTreeData(treeNodeList, expandedKeys) {
|
|
29
|
-
let filteredShownKeys = arguments.length >
|
|
29
|
+
export function flattenTreeData(treeNodeList, expandedKeys, keyMaps) {
|
|
30
|
+
let filteredShownKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
30
31
|
const flattenList = [];
|
|
31
32
|
const filterSearch = Boolean(filteredShownKeys);
|
|
33
|
+
const realKeyName = _get(keyMaps, 'key', 'key');
|
|
34
|
+
const realChildrenName = _get(keyMaps, 'children', 'children');
|
|
32
35
|
function flatten(list) {
|
|
33
36
|
let parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
34
37
|
return list.map((treeNode, index) => {
|
|
35
38
|
const pos = getPosition(parent ? parent.pos : '0', index);
|
|
36
|
-
const mergedKey = treeNode
|
|
39
|
+
const mergedKey = treeNode[realKeyName];
|
|
40
|
+
const otherData = {};
|
|
41
|
+
if (keyMaps) {
|
|
42
|
+
Object.entries(_omit(keyMaps, 'children')).forEach(_ref => {
|
|
43
|
+
let [key, value] = _ref;
|
|
44
|
+
const result = treeNode[value];
|
|
45
|
+
!_isUndefined(result) && (otherData[key] = result);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
37
48
|
// Add FlattenDataNode into list
|
|
38
|
-
const flattenNode = Object.assign(Object.assign({}, _pick(treeNode, ['key', 'label', 'value', 'icon', 'disabled', 'isLeaf'])), {
|
|
49
|
+
const flattenNode = Object.assign(Object.assign(Object.assign({}, _pick(treeNode, ['key', 'label', 'value', 'icon', 'disabled', 'isLeaf'])), otherData), {
|
|
39
50
|
parent,
|
|
40
51
|
pos,
|
|
41
52
|
children: null,
|
|
@@ -48,7 +59,7 @@ export function flattenTreeData(treeNodeList, expandedKeys) {
|
|
|
48
59
|
}
|
|
49
60
|
// Loop treeNode children
|
|
50
61
|
if (expandedKeys.has(mergedKey) && (!filterSearch || !isBooleanFilteredShownKeys && filteredShownKeys.has(mergedKey))) {
|
|
51
|
-
flattenNode.children = flatten(treeNode
|
|
62
|
+
flattenNode.children = flatten(treeNode[realChildrenName] || [], flattenNode);
|
|
52
63
|
} else {
|
|
53
64
|
flattenNode.children = [];
|
|
54
65
|
}
|
|
@@ -83,17 +94,20 @@ export function convertJsonToData(treeJson) {
|
|
|
83
94
|
/**
|
|
84
95
|
* Traverse all the data by `treeData`.
|
|
85
96
|
*/
|
|
86
|
-
export function traverseDataNodes(treeNodes, callback) {
|
|
97
|
+
export function traverseDataNodes(treeNodes, callback, keyMaps) {
|
|
98
|
+
const realKeyName = _get(keyMaps, 'key', 'key');
|
|
99
|
+
const realChildrenName = _get(keyMaps, 'children', 'children');
|
|
87
100
|
const processNode = (node, ind, parent) => {
|
|
88
|
-
const children = node ? node
|
|
101
|
+
const children = node ? node[realChildrenName] : treeNodes;
|
|
89
102
|
const pos = node ? getPosition(parent.pos, ind) : '0';
|
|
90
103
|
// Process node if is not root
|
|
91
104
|
if (node) {
|
|
105
|
+
const nodeKey = _get(node, realKeyName, null);
|
|
92
106
|
const data = {
|
|
93
107
|
data: Object.assign({}, node),
|
|
94
108
|
ind,
|
|
95
109
|
pos,
|
|
96
|
-
key:
|
|
110
|
+
key: nodeKey !== null ? nodeKey : pos,
|
|
97
111
|
parentPos: parent.node ? parent.pos : null,
|
|
98
112
|
level: Number(parent.level) + 1
|
|
99
113
|
};
|
|
@@ -113,7 +127,7 @@ export function traverseDataNodes(treeNodes, callback) {
|
|
|
113
127
|
processNode(null);
|
|
114
128
|
}
|
|
115
129
|
/* Convert data to entities map */
|
|
116
|
-
export function convertDataToEntities(dataNodes) {
|
|
130
|
+
export function convertDataToEntities(dataNodes, keyMaps) {
|
|
117
131
|
const posEntities = {};
|
|
118
132
|
const keyEntities = {};
|
|
119
133
|
const valueEntities = {};
|
|
@@ -122,6 +136,7 @@ export function convertDataToEntities(dataNodes) {
|
|
|
122
136
|
keyEntities,
|
|
123
137
|
valueEntities
|
|
124
138
|
};
|
|
139
|
+
const realValueName = _get(keyMaps, 'value', 'value');
|
|
125
140
|
traverseDataNodes(dataNodes, data => {
|
|
126
141
|
const {
|
|
127
142
|
pos,
|
|
@@ -129,7 +144,7 @@ export function convertDataToEntities(dataNodes) {
|
|
|
129
144
|
parentPos
|
|
130
145
|
} = data;
|
|
131
146
|
const entity = Object.assign({}, data);
|
|
132
|
-
const value = _get(entity,
|
|
147
|
+
const value = _get(entity, `data.${realValueName}`, null);
|
|
133
148
|
if (value !== null) {
|
|
134
149
|
valueEntities[value] = key;
|
|
135
150
|
}
|
|
@@ -141,7 +156,7 @@ export function convertDataToEntities(dataNodes) {
|
|
|
141
156
|
entity.parent.children = entity.parent.children || [];
|
|
142
157
|
entity.parent.children.push(entity);
|
|
143
158
|
}
|
|
144
|
-
});
|
|
159
|
+
}, keyMaps);
|
|
145
160
|
return wrapper;
|
|
146
161
|
}
|
|
147
162
|
/* Get key by value */
|
|
@@ -539,7 +554,8 @@ export function filterTreeData(info) {
|
|
|
539
554
|
treeData,
|
|
540
555
|
filterTreeNode,
|
|
541
556
|
filterProps,
|
|
542
|
-
prevExpandedKeys
|
|
557
|
+
prevExpandedKeys,
|
|
558
|
+
keyMaps
|
|
543
559
|
} = info;
|
|
544
560
|
let filteredOptsKeys = [];
|
|
545
561
|
filteredOptsKeys = Object.values(keyEntities).filter(item => filter(inputValue, item.data, filterTreeNode, filterProps)).map(item => item.key);
|
|
@@ -550,7 +566,7 @@ export function filterTreeData(info) {
|
|
|
550
566
|
}
|
|
551
567
|
const shownChildKeys = findDescendantKeys(filteredOptsKeys, keyEntities, true);
|
|
552
568
|
const filteredShownKeys = new Set([...shownChildKeys, ...expandedOptsKeys]);
|
|
553
|
-
const flattenNodes = flattenTreeData(treeData, new Set(expandedOptsKeys), showFilteredOnly && filteredShownKeys);
|
|
569
|
+
const flattenNodes = flattenTreeData(treeData, new Set(expandedOptsKeys), keyMaps, showFilteredOnly && filteredShownKeys);
|
|
554
570
|
return {
|
|
555
571
|
flattenNodes,
|
|
556
572
|
filteredKeys: new Set(filteredOptsKeys),
|
|
@@ -559,16 +575,18 @@ export function filterTreeData(info) {
|
|
|
559
575
|
};
|
|
560
576
|
}
|
|
561
577
|
// return data.value if data.value exist else fall back to key
|
|
562
|
-
export function getValueOrKey(data) {
|
|
578
|
+
export function getValueOrKey(data, keyMaps) {
|
|
579
|
+
const valueName = _get(keyMaps, 'value', 'value');
|
|
580
|
+
const keyName = _get(keyMaps, 'key', 'key');
|
|
563
581
|
if (Array.isArray(data)) {
|
|
564
|
-
return data.map(item => _get(item,
|
|
582
|
+
return data.map(item => _get(item, valueName, item[keyName]));
|
|
565
583
|
}
|
|
566
|
-
return _get(data,
|
|
584
|
+
return _get(data, valueName, data[keyName]);
|
|
567
585
|
}
|
|
568
586
|
/* Convert value to string */
|
|
569
|
-
export function normalizeValue(value, withObject) {
|
|
587
|
+
export function normalizeValue(value, withObject, keyMaps) {
|
|
570
588
|
if (withObject && isValid(value)) {
|
|
571
|
-
return getValueOrKey(value);
|
|
589
|
+
return getValueOrKey(value, keyMaps);
|
|
572
590
|
} else {
|
|
573
591
|
return value;
|
|
574
592
|
}
|
|
@@ -577,8 +595,9 @@ export function updateKeys(keySet, keyEntities) {
|
|
|
577
595
|
const keyArr = [...keySet];
|
|
578
596
|
return keyArr.filter(key => key in keyEntities);
|
|
579
597
|
}
|
|
580
|
-
export function calcDisabledKeys(keyEntities) {
|
|
581
|
-
const
|
|
598
|
+
export function calcDisabledKeys(keyEntities, keyMaps) {
|
|
599
|
+
const disabledName = _get(keyMaps, 'disabled', 'disabled');
|
|
600
|
+
const disabledKeys = Object.keys(keyEntities).filter(key => keyEntities[key].data[disabledName]);
|
|
582
601
|
const {
|
|
583
602
|
checkedKeys
|
|
584
603
|
} = calcCheckedKeys(disabledKeys, keyEntities);
|
|
@@ -122,7 +122,6 @@ export default class TreeSelectFoundation<P = Record<string, any>, S = Record<st
|
|
|
122
122
|
findDataForValue(findValue: string): any;
|
|
123
123
|
constructDataForValue(value: string): {
|
|
124
124
|
[x: number]: string;
|
|
125
|
-
key: string;
|
|
126
125
|
};
|
|
127
126
|
getDataForKeyNotInKeyEntities(value: string): any;
|
|
128
127
|
getCopyFromState(items: string | string[]): BasicTreeInnerData;
|
|
@@ -89,8 +89,11 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
89
89
|
findDataForValue(findValue) {
|
|
90
90
|
const {
|
|
91
91
|
value,
|
|
92
|
-
defaultValue
|
|
92
|
+
defaultValue,
|
|
93
|
+
keyMaps
|
|
93
94
|
} = this.getProps();
|
|
95
|
+
const realValueName = _get(keyMaps, 'value', 'value');
|
|
96
|
+
const realKeyName = _get(keyMaps, 'key', 'key');
|
|
94
97
|
let valueArr = [];
|
|
95
98
|
if (value) {
|
|
96
99
|
valueArr = Array.isArray(value) ? value : [value];
|
|
@@ -98,16 +101,19 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
98
101
|
valueArr = Array.isArray(defaultValue) ? defaultValue : [defaultValue];
|
|
99
102
|
}
|
|
100
103
|
return valueArr.find(item => {
|
|
101
|
-
return item
|
|
104
|
+
return item[realValueName] === findValue || item[realKeyName] === findValue;
|
|
102
105
|
});
|
|
103
106
|
}
|
|
104
107
|
constructDataForValue(value) {
|
|
105
108
|
const {
|
|
106
|
-
treeNodeLabelProp
|
|
109
|
+
treeNodeLabelProp,
|
|
110
|
+
keyMaps
|
|
107
111
|
} = this.getProps();
|
|
112
|
+
const keyName = _get(keyMaps, 'key', 'key');
|
|
113
|
+
const labelName = _get(keyMaps, 'label', treeNodeLabelProp);
|
|
108
114
|
return {
|
|
109
|
-
|
|
110
|
-
[
|
|
115
|
+
[keyName]: value,
|
|
116
|
+
[labelName]: value
|
|
111
117
|
};
|
|
112
118
|
}
|
|
113
119
|
getDataForKeyNotInKeyEntities(value) {
|
|
@@ -224,7 +230,8 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
224
230
|
} = this.getStates();
|
|
225
231
|
const {
|
|
226
232
|
leafOnly,
|
|
227
|
-
checkRelation
|
|
233
|
+
checkRelation,
|
|
234
|
+
keyMaps
|
|
228
235
|
} = this.getProps();
|
|
229
236
|
let keyList = [];
|
|
230
237
|
if (checkRelation === 'related') {
|
|
@@ -232,11 +239,11 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
232
239
|
} else if (checkRelation === 'unRelated') {
|
|
233
240
|
keyList = key;
|
|
234
241
|
}
|
|
235
|
-
const nodes = keyList.map(key => keyEntities[key] && keyEntities[key].
|
|
242
|
+
const nodes = keyList.map(key => keyEntities[key] && keyEntities[key].key === key ? keyEntities[key].data : this.getDataForKeyNotInKeyEntities(key));
|
|
236
243
|
if (this.getProp('onChangeWithObject')) {
|
|
237
244
|
this._adapter.notifyChangeWithObject(nodes, e);
|
|
238
245
|
} else {
|
|
239
|
-
const value = getValueOrKey(nodes);
|
|
246
|
+
const value = getValueOrKey(nodes, keyMaps);
|
|
240
247
|
this._adapter.notifyChange(value, nodes, e);
|
|
241
248
|
}
|
|
242
249
|
}
|
|
@@ -244,11 +251,14 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
244
251
|
const {
|
|
245
252
|
keyEntities
|
|
246
253
|
} = this.getStates();
|
|
254
|
+
const {
|
|
255
|
+
keyMaps
|
|
256
|
+
} = this.getProps();
|
|
247
257
|
if (this._isMultiple() && Array.isArray(key)) {
|
|
248
258
|
this._notifyMultipleChange(key, e);
|
|
249
259
|
} else {
|
|
250
260
|
const nodes = _isUndefined(key) ? key : keyEntities[key].data;
|
|
251
|
-
const value = _isUndefined(key) ? key : getValueOrKey(nodes);
|
|
261
|
+
const value = _isUndefined(key) ? key : getValueOrKey(nodes, keyMaps);
|
|
252
262
|
if (this.getProp('onChangeWithObject')) {
|
|
253
263
|
this._adapter.notifyChangeWithObject(nodes, e);
|
|
254
264
|
} else {
|
|
@@ -375,15 +385,17 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
375
385
|
removeTag(eventKey) {
|
|
376
386
|
const {
|
|
377
387
|
disableStrictly,
|
|
378
|
-
checkRelation
|
|
388
|
+
checkRelation,
|
|
389
|
+
keyMaps
|
|
379
390
|
} = this.getProps();
|
|
380
391
|
const {
|
|
381
392
|
keyEntities,
|
|
382
393
|
disabledKeys,
|
|
383
394
|
realCheckedKeys
|
|
384
395
|
} = this.getStates();
|
|
385
|
-
const item = keyEntities[eventKey] && keyEntities[eventKey].
|
|
386
|
-
|
|
396
|
+
const item = keyEntities[eventKey] && keyEntities[eventKey].key === eventKey ? keyEntities[eventKey].data : this.getDataForKeyNotInKeyEntities(eventKey);
|
|
397
|
+
const disabledName = _get(keyMaps, 'disabled', 'disabled');
|
|
398
|
+
if (item[disabledName] || disableStrictly && disabledKeys.has(eventKey)) {
|
|
387
399
|
return;
|
|
388
400
|
}
|
|
389
401
|
if (checkRelation === 'unRelated') {
|
|
@@ -422,11 +434,14 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
422
434
|
keyEntities,
|
|
423
435
|
treeData
|
|
424
436
|
} = this.getStates();
|
|
437
|
+
const {
|
|
438
|
+
keyMaps
|
|
439
|
+
} = this.getProps();
|
|
425
440
|
const newExpandedKeys = new Set(expandedKeys);
|
|
426
441
|
const isExpandControlled = this._isExpandControlled();
|
|
427
442
|
const expandedOptsKeys = findAncestorKeys(selectedKeys, keyEntities);
|
|
428
443
|
expandedOptsKeys.forEach(item => newExpandedKeys.add(item));
|
|
429
|
-
const newFlattenNodes = flattenTreeData(treeData, newExpandedKeys);
|
|
444
|
+
const newFlattenNodes = flattenTreeData(treeData, newExpandedKeys, keyMaps);
|
|
430
445
|
this._adapter.updateState({
|
|
431
446
|
expandedKeys: isExpandControlled ? expandedKeys : newExpandedKeys,
|
|
432
447
|
flattenNodes: isExpandControlled ? flattenNodes : newFlattenNodes,
|
|
@@ -450,8 +465,10 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
450
465
|
const {
|
|
451
466
|
showFilteredOnly,
|
|
452
467
|
filterTreeNode,
|
|
453
|
-
treeNodeFilterProp
|
|
468
|
+
treeNodeFilterProp,
|
|
469
|
+
keyMaps
|
|
454
470
|
} = this.getProps();
|
|
471
|
+
const realFilterProp = treeNodeFilterProp !== 'label' ? treeNodeFilterProp : _get(keyMaps, 'label', 'label');
|
|
455
472
|
const newExpandedKeys = new Set(expandedKeys);
|
|
456
473
|
let filteredOptsKeys = [];
|
|
457
474
|
let expandedOptsKeys = [];
|
|
@@ -460,18 +477,18 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
460
477
|
if (!sugInput) {
|
|
461
478
|
expandedOptsKeys = findAncestorKeys(selectedKeys, keyEntities);
|
|
462
479
|
expandedOptsKeys.forEach(item => newExpandedKeys.add(item));
|
|
463
|
-
newFlattenNodes = flattenTreeData(treeData, newExpandedKeys);
|
|
480
|
+
newFlattenNodes = flattenTreeData(treeData, newExpandedKeys, keyMaps);
|
|
464
481
|
} else {
|
|
465
482
|
filteredOptsKeys = Object.values(keyEntities).filter(item => {
|
|
466
483
|
const {
|
|
467
484
|
data
|
|
468
485
|
} = item;
|
|
469
|
-
return filter(sugInput, data, filterTreeNode,
|
|
486
|
+
return filter(sugInput, data, filterTreeNode, realFilterProp);
|
|
470
487
|
}).map(item => item.key);
|
|
471
488
|
expandedOptsKeys = findAncestorKeys(filteredOptsKeys, keyEntities, false);
|
|
472
489
|
const shownChildKeys = findDescendantKeys(filteredOptsKeys, keyEntities, true);
|
|
473
490
|
filteredShownKeys = new Set([...shownChildKeys, ...expandedOptsKeys]);
|
|
474
|
-
newFlattenNodes = flattenTreeData(treeData, new Set(expandedOptsKeys), showFilteredOnly && filteredShownKeys);
|
|
491
|
+
newFlattenNodes = flattenTreeData(treeData, new Set(expandedOptsKeys), keyMaps, showFilteredOnly && filteredShownKeys);
|
|
475
492
|
}
|
|
476
493
|
const newFilteredExpandedKeys = new Set(expandedOptsKeys);
|
|
477
494
|
this._adapter.notifySearch(sugInput, Array.from(newFilteredExpandedKeys));
|
|
@@ -605,7 +622,7 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
605
622
|
return this.calcCheckedKeys(eventKey, targetStatus);
|
|
606
623
|
}
|
|
607
624
|
const nonDisabled = descendantKeys.filter(key => !disabledKeys.has(key));
|
|
608
|
-
const newCheckedKeys = targetStatus ? [...nonDisabled, ...checkedKeys] : _difference(normalizeKeyList([...checkedKeys], keyEntities, true), nonDisabled);
|
|
625
|
+
const newCheckedKeys = targetStatus ? [...nonDisabled, ...checkedKeys] : _difference(normalizeKeyList([...checkedKeys], keyEntities, true, true), nonDisabled);
|
|
609
626
|
return calcCheckedKeys(newCheckedKeys, keyEntities);
|
|
610
627
|
}
|
|
611
628
|
calcCheckedStatus(targetStatus, eventKey) {
|
|
@@ -630,7 +647,8 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
630
647
|
const {
|
|
631
648
|
treeData,
|
|
632
649
|
filteredShownKeys,
|
|
633
|
-
keyEntities
|
|
650
|
+
keyEntities,
|
|
651
|
+
keyMaps
|
|
634
652
|
} = this.getStates();
|
|
635
653
|
const showFilteredOnly = this._showFilteredOnly();
|
|
636
654
|
// clone otherwise will be modified unexpectedly
|
|
@@ -654,7 +672,7 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
654
672
|
this._adapter.cacheFlattenNodes(motionType === 'hide' && this._isAnimated());
|
|
655
673
|
if (!this._isExpandControlled()) {
|
|
656
674
|
// debugger;
|
|
657
|
-
const flattenNodes = flattenTreeData(treeData, filteredExpandedKeys, showFilteredOnly && filteredShownKeys);
|
|
675
|
+
const flattenNodes = flattenTreeData(treeData, filteredExpandedKeys, keyMaps, showFilteredOnly && filteredShownKeys);
|
|
658
676
|
const motionKeys = this._isAnimated() ? getMotionKeys(eventKey, filteredExpandedKeys, keyEntities) : [];
|
|
659
677
|
const newState = {
|
|
660
678
|
filteredExpandedKeys,
|
|
@@ -672,7 +690,8 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
672
690
|
handleNodeExpand(e, treeNode) {
|
|
673
691
|
// debugger;
|
|
674
692
|
const {
|
|
675
|
-
loadData
|
|
693
|
+
loadData,
|
|
694
|
+
keyMaps
|
|
676
695
|
} = this.getProps();
|
|
677
696
|
const {
|
|
678
697
|
inputValue,
|
|
@@ -709,7 +728,7 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
709
728
|
this._adapter.cacheFlattenNodes(motionType === 'hide' && this._isAnimated());
|
|
710
729
|
if (!isExpandControlled) {
|
|
711
730
|
// debugger;
|
|
712
|
-
const flattenNodes = flattenTreeData(treeData, expandedKeys);
|
|
731
|
+
const flattenNodes = flattenTreeData(treeData, expandedKeys, keyMaps);
|
|
713
732
|
const motionKeys = this._isAnimated() ? getMotionKeys(eventKey, expandedKeys, keyEntities) : [];
|
|
714
733
|
const newState = {
|
|
715
734
|
expandedKeys,
|
|
@@ -730,19 +749,21 @@ export default class TreeSelectFoundation extends BaseFoundation {
|
|
|
730
749
|
getRenderTextInSingle() {
|
|
731
750
|
const {
|
|
732
751
|
renderSelectedItem: propRenderSelectedItem,
|
|
733
|
-
treeNodeLabelProp
|
|
752
|
+
treeNodeLabelProp,
|
|
753
|
+
keyMaps
|
|
734
754
|
} = this.getProps();
|
|
735
755
|
const {
|
|
736
756
|
selectedKeys,
|
|
737
757
|
keyEntities
|
|
738
758
|
} = this.getStates();
|
|
739
|
-
const
|
|
759
|
+
const realLabelName = _get(keyMaps, 'label', treeNodeLabelProp);
|
|
760
|
+
const renderSelectedItem = _isFunction(propRenderSelectedItem) ? propRenderSelectedItem : item => _get(item, realLabelName, null);
|
|
740
761
|
let item;
|
|
741
762
|
if (selectedKeys.length) {
|
|
742
763
|
const key = selectedKeys[0];
|
|
743
|
-
item = keyEntities[key] && keyEntities[key].
|
|
764
|
+
item = keyEntities[key] && keyEntities[key].key === key ? keyEntities[key].data : this.getDataForKeyNotInKeyEntities(key);
|
|
744
765
|
}
|
|
745
|
-
const renderText = item
|
|
766
|
+
const renderText = item ? renderSelectedItem(item) : null;
|
|
746
767
|
return renderText;
|
|
747
768
|
}
|
|
748
769
|
/**
|
|
@@ -46,6 +46,10 @@
|
|
|
46
46
|
font-size: 12px;
|
|
47
47
|
line-height: 16px;
|
|
48
48
|
font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
49
|
+
font-weight: 400;
|
|
50
|
+
}
|
|
51
|
+
.semi-typography-small.semi-typography-paragraph {
|
|
52
|
+
font-weight: 400;
|
|
49
53
|
}
|
|
50
54
|
.semi-typography code {
|
|
51
55
|
border: 1px solid var(--semi-color-border);
|
|
@@ -315,6 +319,7 @@ h6.semi-typography.semi-typography-h6-weight-bold,
|
|
|
315
319
|
p.semi-typography-extended,
|
|
316
320
|
.semi-typography-paragraph.semi-typography-extended {
|
|
317
321
|
line-height: 24px;
|
|
322
|
+
font-weight: 400;
|
|
318
323
|
}
|
|
319
324
|
|
|
320
325
|
.semi-rtl .semi-typography,
|
|
@@ -53,6 +53,10 @@ $module: #{$prefix}-typography;
|
|
|
53
53
|
|
|
54
54
|
&-small {
|
|
55
55
|
@include font-size-small;
|
|
56
|
+
font-weight: $font-typography_smallText-regular-fontWeight;
|
|
57
|
+
&.#{$module}-paragraph{
|
|
58
|
+
font-weight: $font-typography_smallParagraph-regular-fontWeight;
|
|
59
|
+
}
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
code {
|
|
@@ -351,6 +355,7 @@ h6.#{$module},
|
|
|
351
355
|
p.#{$module}-extended,
|
|
352
356
|
.#{$module}-paragraph.#{$module}-extended {
|
|
353
357
|
line-height: $font-typography_paragraph_extended-lineHeight;
|
|
358
|
+
font-weight: $font-typography_normalParagraph-regular-fontWeight;
|
|
354
359
|
}
|
|
355
360
|
|
|
356
361
|
@import "./rtl.scss";
|
|
@@ -26,6 +26,10 @@ $font-typography_title-fontWeight: $font-weight-bold; // 标题文本字重
|
|
|
26
26
|
$font-typography_link-fontWeight: $font-weight-bold; // 链接文本字重
|
|
27
27
|
$font-typography_strong-fontWeight: $font-weight-bold; // 强调文本字重
|
|
28
28
|
$font-typography_paragraph_extended-lineHeight: 24px; // 宽松行距段落文本行高
|
|
29
|
+
$font-typography_normalText-regular-fontWeight: $font-weight-regular; // normal text 字重 - 正常
|
|
30
|
+
$font-typography_smallText-regular-fontWeight: $font-weight-regular; // small text 字重 - 正常
|
|
31
|
+
$font-typography_normalParagraph-regular-fontWeight: $font-weight-regular; // normal paragraph 字重 - 正常
|
|
32
|
+
$font-typography_smallParagraph-regular-fontWeight: $font-weight-regular; // small paragraph 字重 - 正常
|
|
29
33
|
|
|
30
34
|
$font-typography_title1-fontWeight: $font-typography_title-fontWeight; // 一级标题文本字重
|
|
31
35
|
$font-typography_title2-fontWeight: $font-typography_title-fontWeight; // 二级标题文本字重
|
package/lib/es/utils/array.d.ts
CHANGED
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
* => ['b', 'b']
|
|
12
12
|
*/
|
|
13
13
|
export declare function pullAll(arrayA: any[], arrayB: any[]): any[];
|
|
14
|
-
type CompareFn<T> = (a: T, b: T) => number;
|
|
14
|
+
type CompareFn<T> = (a: T, b: T, sortOrder: 'ascend' | 'descend') => number;
|
|
15
15
|
/**
|
|
16
16
|
* Adapt the descending order
|
|
17
17
|
* @param {Function} fn
|
|
18
18
|
* @param {String} order
|
|
19
19
|
* @returns
|
|
20
20
|
*/
|
|
21
|
-
export declare function withOrderSort<T = any>(fn: CompareFn<T>, order?:
|
|
21
|
+
export declare function withOrderSort<T = any>(fn: CompareFn<T>, order?: 'ascend' | 'descend'): (a: T, b: T) => number;
|
|
22
22
|
export {};
|
package/lib/es/utils/array.js
CHANGED
|
@@ -31,11 +31,11 @@ export function withOrderSort(fn) {
|
|
|
31
31
|
switch (order) {
|
|
32
32
|
case 'descend':
|
|
33
33
|
return (a, b) => {
|
|
34
|
-
const result = Number(fn(a, b));
|
|
34
|
+
const result = Number(fn(a, b, order));
|
|
35
35
|
return result !== 0 ? -result : result;
|
|
36
36
|
};
|
|
37
37
|
case 'ascend':
|
|
38
38
|
default:
|
|
39
|
-
return fn;
|
|
39
|
+
return (a, b) => fn(a, b, order);
|
|
40
40
|
}
|
|
41
41
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@douyinfe/semi-foundation",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.47.0-beta.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build:lib": "node ./scripts/compileLib.js",
|
|
7
7
|
"prepublishOnly": "npm run build:lib"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@douyinfe/semi-animation": "2.
|
|
10
|
+
"@douyinfe/semi-animation": "2.47.0-beta.0",
|
|
11
11
|
"async-validator": "^3.5.0",
|
|
12
12
|
"classnames": "^2.2.6",
|
|
13
13
|
"date-fns": "^2.29.3",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"*.scss",
|
|
24
24
|
"*.css"
|
|
25
25
|
],
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "201c3696de1cfe4686903a3a50c68ca07272742a",
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@babel/plugin-transform-runtime": "^7.15.8",
|
|
29
29
|
"@babel/preset-env": "^7.15.8",
|
package/table/foundation.ts
CHANGED
|
@@ -1202,7 +1202,7 @@ export interface BaseSorterInfo<RecordType> {
|
|
|
1202
1202
|
sorter?: BaseSorter<RecordType>
|
|
1203
1203
|
}
|
|
1204
1204
|
export type BaseSortOrder = boolean | ArrayElement<typeof strings.SORT_DIRECTIONS>;
|
|
1205
|
-
export type BaseSorter<RecordType> = boolean | ((a?: RecordType, b?: RecordType) => number);
|
|
1205
|
+
export type BaseSorter<RecordType> = boolean | ((a?: RecordType, b?: RecordType, sortOrder?: 'ascend' | 'descend') => number);
|
|
1206
1206
|
export interface BaseChangeInfoFilter<RecordType> {
|
|
1207
1207
|
dataIndex?: string;
|
|
1208
1208
|
value?: any;
|
package/tree/foundation.ts
CHANGED
|
@@ -22,6 +22,8 @@ import {
|
|
|
22
22
|
calcDropActualPosition
|
|
23
23
|
} from './treeUtil';
|
|
24
24
|
|
|
25
|
+
export { KeyMapProps } from './treeUtil';
|
|
26
|
+
|
|
25
27
|
export interface BasicTreeNodeProps {
|
|
26
28
|
[x: string]: any;
|
|
27
29
|
expanded?: boolean;
|
|
@@ -44,7 +46,7 @@ export interface BasicTreeNodeProps {
|
|
|
44
46
|
|
|
45
47
|
export interface BasicTreeNodeData {
|
|
46
48
|
[x: string]: any;
|
|
47
|
-
key
|
|
49
|
+
key?: string;
|
|
48
50
|
value?: number | string;
|
|
49
51
|
label?: any;
|
|
50
52
|
icon?: any;
|
|
@@ -425,7 +427,7 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
425
427
|
|
|
426
428
|
notifyMultipleChange(key: string[], e: any) {
|
|
427
429
|
const { keyEntities } = this.getStates();
|
|
428
|
-
const { leafOnly, checkRelation } = this.getProps();
|
|
430
|
+
const { leafOnly, checkRelation, keyMaps } = this.getProps();
|
|
429
431
|
let value;
|
|
430
432
|
let keyList = [];
|
|
431
433
|
if (checkRelation === 'related') {
|
|
@@ -436,13 +438,14 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
436
438
|
if (this.getProp('onChangeWithObject')) {
|
|
437
439
|
value = keyList.map((itemKey: string) => keyEntities[itemKey].data);
|
|
438
440
|
} else {
|
|
439
|
-
value = getValueOrKey(keyList.map((itemKey: string) => keyEntities[itemKey].data));
|
|
441
|
+
value = getValueOrKey(keyList.map((itemKey: string) => keyEntities[itemKey].data), keyMaps);
|
|
440
442
|
}
|
|
441
443
|
this._adapter.notifyChange(value);
|
|
442
444
|
}
|
|
443
445
|
|
|
444
446
|
notifyChange(key: string[] | string, e: any) {
|
|
445
447
|
const isMultiple = this._isMultiple();
|
|
448
|
+
const { keyMaps } = this.getProps();
|
|
446
449
|
const { keyEntities } = this.getStates();
|
|
447
450
|
if (this.getProp('treeDataSimpleJson')) {
|
|
448
451
|
this.notifyJsonChange(key, e);
|
|
@@ -454,7 +457,7 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
454
457
|
value = get(keyEntities, key).data;
|
|
455
458
|
} else {
|
|
456
459
|
const { data } = get(keyEntities, key);
|
|
457
|
-
value = getValueOrKey(data);
|
|
460
|
+
value = getValueOrKey(data, keyMaps);
|
|
458
461
|
}
|
|
459
462
|
this._adapter.notifyChange(value);
|
|
460
463
|
}
|
|
@@ -464,7 +467,8 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
464
467
|
// Input is a controlled component, so the value value needs to be updated
|
|
465
468
|
this._adapter.updateInputValue(sugInput);
|
|
466
469
|
const { expandedKeys, selectedKeys, keyEntities, treeData } = this.getStates();
|
|
467
|
-
const { showFilteredOnly, filterTreeNode, treeNodeFilterProp } = this.getProps();
|
|
470
|
+
const { showFilteredOnly, filterTreeNode, treeNodeFilterProp, keyMaps } = this.getProps();
|
|
471
|
+
const realFilterProp = treeNodeFilterProp !== 'label' ? treeNodeFilterProp : get(keyMaps, 'label', 'label');
|
|
468
472
|
let filteredOptsKeys: string[] = [];
|
|
469
473
|
let expandedOptsKeys: string[] = [];
|
|
470
474
|
let flattenNodes: BasicFlattenNode[] = [];
|
|
@@ -473,10 +477,10 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
473
477
|
if (!sugInput) {
|
|
474
478
|
expandedOptsKeys = findAncestorKeys(selectedKeys, keyEntities);
|
|
475
479
|
expandedOptsKeys.forEach(item => expandedKeys.add(item));
|
|
476
|
-
flattenNodes = flattenTreeData(treeData, expandedKeys);
|
|
480
|
+
flattenNodes = flattenTreeData(treeData, expandedKeys, keyMaps);
|
|
477
481
|
} else {
|
|
478
482
|
filteredOptsKeys = Object.values(keyEntities)
|
|
479
|
-
.filter((item: BasicKeyEntity) => filter(sugInput, item.data, filterTreeNode,
|
|
483
|
+
.filter((item: BasicKeyEntity) => filter(sugInput, item.data, filterTreeNode, realFilterProp))
|
|
480
484
|
.map((item: BasicKeyEntity) => item.key);
|
|
481
485
|
expandedOptsKeys = findAncestorKeys(filteredOptsKeys, keyEntities, false);
|
|
482
486
|
const shownChildKeys = findDescendantKeys(filteredOptsKeys, keyEntities, true);
|
|
@@ -484,6 +488,7 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
484
488
|
flattenNodes = flattenTreeData(
|
|
485
489
|
treeData,
|
|
486
490
|
new Set(expandedOptsKeys),
|
|
491
|
+
keyMaps,
|
|
487
492
|
showFilteredOnly && filteredShownKeys
|
|
488
493
|
);
|
|
489
494
|
}
|
|
@@ -627,6 +632,7 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
627
632
|
|
|
628
633
|
setExpandedStatus(treeNode: BasicTreeNodeProps) {
|
|
629
634
|
const { inputValue, treeData, filteredShownKeys, keyEntities } = this.getStates();
|
|
635
|
+
const { keyMaps } = this.getProps();
|
|
630
636
|
const isSearching = Boolean(inputValue);
|
|
631
637
|
const showFilteredOnly = this._showFilteredOnly();
|
|
632
638
|
const expandedStateKey = isSearching ? 'filteredExpandedKeys' : 'expandedKeys';
|
|
@@ -646,6 +652,7 @@ export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTre
|
|
|
646
652
|
const flattenNodes = flattenTreeData(
|
|
647
653
|
treeData,
|
|
648
654
|
expandedKeys,
|
|
655
|
+
keyMaps,
|
|
649
656
|
isSearching && showFilteredOnly && filteredShownKeys
|
|
650
657
|
);
|
|
651
658
|
const motionKeys = this._isAnimated() ? getMotionKeys(eventKey, expandedKeys, keyEntities) : [];
|