@douyinfe/semi-ui 2.47.1 → 2.48.0-alpha.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/dist/umd/semi-ui.js +130 -36
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/lib/cjs/treeSelect/index.d.ts +1 -1
- package/lib/cjs/treeSelect/index.js +117 -29
- package/lib/es/treeSelect/index.d.ts +1 -1
- package/lib/es/treeSelect/index.js +118 -30
- package/package.json +8 -8
package/dist/umd/semi-ui.js
CHANGED
|
@@ -89549,6 +89549,12 @@ class TreeSelectFoundation extends foundation {
|
|
|
89549
89549
|
this.close(e);
|
|
89550
89550
|
});
|
|
89551
89551
|
};
|
|
89552
|
+
this.clearInputValue = () => {
|
|
89553
|
+
const {
|
|
89554
|
+
inputValue
|
|
89555
|
+
} = this.getStates();
|
|
89556
|
+
inputValue && this._adapter.updateInputValue('');
|
|
89557
|
+
};
|
|
89552
89558
|
}
|
|
89553
89559
|
init() {
|
|
89554
89560
|
const {
|
|
@@ -89700,7 +89706,7 @@ class TreeSelectFoundation extends foundation {
|
|
|
89700
89706
|
const isSearching = Boolean(inputValue);
|
|
89701
89707
|
const treeNodeProps = {
|
|
89702
89708
|
eventKey: key,
|
|
89703
|
-
expanded: isSearching
|
|
89709
|
+
expanded: isSearching ? filteredExpandedKeys.has(key) : expandedKeys.has(key),
|
|
89704
89710
|
selected: selectedKeys.includes(key),
|
|
89705
89711
|
checked: realChecked,
|
|
89706
89712
|
halfChecked: realHalfChecked,
|
|
@@ -89973,8 +89979,8 @@ class TreeSelectFoundation extends foundation {
|
|
|
89973
89979
|
expandedOptsKeys.forEach(item => newExpandedKeys.add(item));
|
|
89974
89980
|
const newFlattenNodes = flattenTreeData(treeData, newExpandedKeys, keyMaps);
|
|
89975
89981
|
this._adapter.updateState({
|
|
89976
|
-
expandedKeys:
|
|
89977
|
-
flattenNodes:
|
|
89982
|
+
expandedKeys: newExpandedKeys,
|
|
89983
|
+
flattenNodes: newFlattenNodes,
|
|
89978
89984
|
inputValue: '',
|
|
89979
89985
|
motionKeys: new Set([]),
|
|
89980
89986
|
filteredKeys: new Set([]),
|
|
@@ -90023,8 +90029,8 @@ class TreeSelectFoundation extends foundation {
|
|
|
90023
90029
|
const newFilteredExpandedKeys = new Set(expandedOptsKeys);
|
|
90024
90030
|
this._adapter.notifySearch(sugInput, Array.from(newFilteredExpandedKeys));
|
|
90025
90031
|
this._adapter.updateState({
|
|
90026
|
-
expandedKeys:
|
|
90027
|
-
flattenNodes:
|
|
90032
|
+
expandedKeys: newExpandedKeys,
|
|
90033
|
+
flattenNodes: newFlattenNodes,
|
|
90028
90034
|
motionKeys: new Set([]),
|
|
90029
90035
|
filteredKeys: new Set(filteredOptsKeys),
|
|
90030
90036
|
filteredExpandedKeys: newFilteredExpandedKeys,
|
|
@@ -90232,7 +90238,7 @@ class TreeSelectFoundation extends foundation {
|
|
|
90232
90238
|
return;
|
|
90233
90239
|
}
|
|
90234
90240
|
const isExpandControlled = this._isExpandControlled();
|
|
90235
|
-
if (isSearching
|
|
90241
|
+
if (isSearching) {
|
|
90236
90242
|
this.handleNodeExpandInSearch(e, treeNode);
|
|
90237
90243
|
return;
|
|
90238
90244
|
}
|
|
@@ -91002,13 +91008,27 @@ class TreeSelect extends BaseComponent {
|
|
|
91002
91008
|
searchAutoFocus,
|
|
91003
91009
|
searchPosition
|
|
91004
91010
|
} = this.props;
|
|
91005
|
-
|
|
91006
|
-
|
|
91011
|
+
// 将 inputValue 清空,如果有选中值的话,选中项能够快速回显
|
|
91012
|
+
// Clear the inputValue. If there is a selected value, the selected item can be quickly echoed.
|
|
91013
|
+
if (isVisible === false && filterTreeNode) {
|
|
91014
|
+
this.foundation.clearInputValue();
|
|
91007
91015
|
}
|
|
91008
91016
|
if (filterTreeNode && searchPosition === treeSelect_constants_strings.SEARCH_POSITION_DROPDOWN && isVisible && searchAutoFocus) {
|
|
91009
91017
|
this.foundation.focusInput(true);
|
|
91010
91018
|
}
|
|
91011
91019
|
};
|
|
91020
|
+
this.afterClose = () => {
|
|
91021
|
+
// flattenNode 的变化将导致弹出层面板中的选项数目变化
|
|
91022
|
+
// 在弹层完全收起之后,再通过 clearInput 重新计算 state 中的 expandedKey, flattenNode
|
|
91023
|
+
// 防止在弹出层未收起时弹层面板中选项数目变化导致视觉上出现弹层闪动问题
|
|
91024
|
+
// Changes to flattenNode will cause the number of options in the popup panel to change
|
|
91025
|
+
// After the pop-up layer is completely closed, recalculate the expandedKey and flattenNode in the state through clearInput.
|
|
91026
|
+
// Prevent the pop-up layer from flickering visually due to changes in the number of options in the pop-up panel when the pop-up layer is not collapsed.
|
|
91027
|
+
const {
|
|
91028
|
+
filterTreeNode
|
|
91029
|
+
} = this.props;
|
|
91030
|
+
filterTreeNode && this.foundation.clearInput();
|
|
91031
|
+
};
|
|
91012
91032
|
this.renderTreeNode = (treeNode, ind, style) => {
|
|
91013
91033
|
const {
|
|
91014
91034
|
data,
|
|
@@ -91041,6 +91061,7 @@ class TreeSelect extends BaseComponent {
|
|
|
91041
91061
|
this.renderNodeList = () => {
|
|
91042
91062
|
const {
|
|
91043
91063
|
flattenNodes,
|
|
91064
|
+
cachedFlattenNodes,
|
|
91044
91065
|
motionKeys,
|
|
91045
91066
|
motionType,
|
|
91046
91067
|
filteredKeys
|
|
@@ -91056,7 +91077,7 @@ class TreeSelect extends BaseComponent {
|
|
|
91056
91077
|
if (!virtualize || isEmpty_default()(virtualize)) {
|
|
91057
91078
|
return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement(NodeList, {
|
|
91058
91079
|
flattenNodes: flattenNodes,
|
|
91059
|
-
flattenList:
|
|
91080
|
+
flattenList: cachedFlattenNodes,
|
|
91060
91081
|
motionKeys: motionExpand ? motionKeys : new Set([]),
|
|
91061
91082
|
motionType: motionType,
|
|
91062
91083
|
// When motionKeys is empty, but filteredKeys is not empty (that is, the search hits), this situation should be distinguished from ordinary motionKeys
|
|
@@ -91175,6 +91196,7 @@ class TreeSelect extends BaseComponent {
|
|
|
91175
91196
|
keyEntities: {},
|
|
91176
91197
|
treeData: [],
|
|
91177
91198
|
flattenNodes: [],
|
|
91199
|
+
cachedFlattenNodes: undefined,
|
|
91178
91200
|
selectedKeys: [],
|
|
91179
91201
|
checkedKeys: new Set(),
|
|
91180
91202
|
halfCheckedKeys: new Set(),
|
|
@@ -91204,6 +91226,7 @@ class TreeSelect extends BaseComponent {
|
|
|
91204
91226
|
};
|
|
91205
91227
|
}
|
|
91206
91228
|
static getDerivedStateFromProps(props, prevState) {
|
|
91229
|
+
var _a;
|
|
91207
91230
|
const {
|
|
91208
91231
|
prevProps,
|
|
91209
91232
|
rePosKey
|
|
@@ -91221,6 +91244,8 @@ class TreeSelect extends BaseComponent {
|
|
|
91221
91244
|
};
|
|
91222
91245
|
const needUpdateTreeData = needUpdate('treeData');
|
|
91223
91246
|
const needUpdateExpandedKeys = needUpdate('expandedKeys');
|
|
91247
|
+
const isExpandControlled = ('expandedKeys' in props);
|
|
91248
|
+
const isSearching = Boolean(props.filterTreeNode && prevState.inputValue && prevState.inputValue.length);
|
|
91224
91249
|
// TreeNode
|
|
91225
91250
|
if (needUpdateTreeData) {
|
|
91226
91251
|
treeData = props.treeData;
|
|
@@ -91239,31 +91264,97 @@ class TreeSelect extends BaseComponent {
|
|
|
91239
91264
|
}
|
|
91240
91265
|
}
|
|
91241
91266
|
const expandAllWhenDataChange = needUpdateTreeData && props.expandAll;
|
|
91242
|
-
|
|
91243
|
-
|
|
91244
|
-
|
|
91245
|
-
|
|
91246
|
-
|
|
91247
|
-
|
|
91248
|
-
|
|
91249
|
-
|
|
91250
|
-
|
|
91251
|
-
|
|
91252
|
-
|
|
91253
|
-
|
|
91254
|
-
|
|
91255
|
-
|
|
91256
|
-
|
|
91257
|
-
|
|
91258
|
-
|
|
91259
|
-
|
|
91260
|
-
|
|
91261
|
-
|
|
91262
|
-
|
|
91263
|
-
|
|
91264
|
-
|
|
91265
|
-
|
|
91266
|
-
|
|
91267
|
+
if (!isSearching) {
|
|
91268
|
+
// expandedKeys
|
|
91269
|
+
if (needUpdateExpandedKeys || prevProps && needUpdate('autoExpandParent')) {
|
|
91270
|
+
newState.expandedKeys = calcExpandedKeys(props.expandedKeys, keyEntities, props.autoExpandParent || !prevProps);
|
|
91271
|
+
// only show animation when treeData does not change
|
|
91272
|
+
if (prevProps && props.motion && !treeData) {
|
|
91273
|
+
const {
|
|
91274
|
+
motionKeys,
|
|
91275
|
+
motionType
|
|
91276
|
+
} = calcMotionKeys(prevState.expandedKeys, newState.expandedKeys, keyEntities);
|
|
91277
|
+
newState.motionKeys = new Set(motionKeys);
|
|
91278
|
+
newState.motionType = motionType;
|
|
91279
|
+
if (motionType === 'hide') {
|
|
91280
|
+
// cache flatten nodes: expandedKeys changed may not be triggered by interaction
|
|
91281
|
+
newState.cachedFlattenNodes = treeUtil_cloneDeep(prevState.flattenNodes);
|
|
91282
|
+
}
|
|
91283
|
+
}
|
|
91284
|
+
} else if (!prevProps && (props.defaultExpandAll || props.expandAll) || expandAllWhenDataChange) {
|
|
91285
|
+
newState.expandedKeys = new Set(Object.keys(keyEntities));
|
|
91286
|
+
} else if (!prevProps && props.defaultExpandedKeys) {
|
|
91287
|
+
newState.expandedKeys = calcExpandedKeys(props.defaultExpandedKeys, keyEntities);
|
|
91288
|
+
} else if (!prevProps && props.defaultValue) {
|
|
91289
|
+
newState.expandedKeys = calcExpandedKeysForValues(normalizeValue(props.defaultValue, withObject, keyMaps), keyEntities, props.multiple, valueEntities);
|
|
91290
|
+
} else if (!prevProps && props.value) {
|
|
91291
|
+
newState.expandedKeys = calcExpandedKeysForValues(normalizeValue(props.value, withObject, keyMaps), keyEntities, props.multiple, valueEntities);
|
|
91292
|
+
} else if (!isExpandControlled && needUpdateTreeData && props.value) {
|
|
91293
|
+
// 当 treeData 已经设置具体的值,并且设置了 props.loadData ,则认为 treeData 的更新是因为 loadData 导致的
|
|
91294
|
+
// 如果是因为 loadData 导致 treeData改变, 此时在这里重新计算 key 会导致为未选中的展开项目被收起
|
|
91295
|
+
// 所以此时不需要重新计算 expandedKeys,因为在点击展开按钮时候已经把被展开的项添加到 expandedKeys 中
|
|
91296
|
+
// When treeData has a specific value and props.loadData is set, it is considered that the update of treeData is caused by loadData
|
|
91297
|
+
// If the treeData is changed because of loadData, recalculating the key here will cause the unselected expanded items to be collapsed
|
|
91298
|
+
// So there is no need to recalculate expandedKeys at this time, because the expanded item has been added to expandedKeys when the expand button is clicked
|
|
91299
|
+
if (!(prevState.treeData && ((_a = prevState.treeData) === null || _a === void 0 ? void 0 : _a.length) > 0 && props.loadData)) {
|
|
91300
|
+
newState.expandedKeys = calcExpandedKeysForValues(props.value, keyEntities, props.multiple, valueEntities);
|
|
91301
|
+
}
|
|
91302
|
+
}
|
|
91303
|
+
if (!newState.expandedKeys) {
|
|
91304
|
+
delete newState.expandedKeys;
|
|
91305
|
+
}
|
|
91306
|
+
if (treeData || newState.expandedKeys) {
|
|
91307
|
+
const flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.expandedKeys || prevState.expandedKeys, keyMaps);
|
|
91308
|
+
newState.flattenNodes = flattenNodes;
|
|
91309
|
+
}
|
|
91310
|
+
} else {
|
|
91311
|
+
let filteredState;
|
|
91312
|
+
// treeData changed while searching
|
|
91313
|
+
if (treeData) {
|
|
91314
|
+
// Get filter data
|
|
91315
|
+
filteredState = filterTreeData({
|
|
91316
|
+
treeData,
|
|
91317
|
+
inputValue: prevState.inputValue,
|
|
91318
|
+
filterTreeNode: props.filterTreeNode,
|
|
91319
|
+
filterProps: props.treeNodeFilterProp,
|
|
91320
|
+
showFilteredOnly: props.showFilteredOnly,
|
|
91321
|
+
keyEntities: newState.keyEntities,
|
|
91322
|
+
prevExpandedKeys: [...prevState.filteredExpandedKeys],
|
|
91323
|
+
keyMaps: keyMaps
|
|
91324
|
+
});
|
|
91325
|
+
newState.flattenNodes = filteredState.flattenNodes;
|
|
91326
|
+
newState.motionKeys = new Set([]);
|
|
91327
|
+
newState.filteredKeys = filteredState.filteredKeys;
|
|
91328
|
+
newState.filteredShownKeys = filteredState.filteredShownKeys;
|
|
91329
|
+
newState.filteredExpandedKeys = filteredState.filteredExpandedKeys;
|
|
91330
|
+
}
|
|
91331
|
+
// expandedKeys changed while searching
|
|
91332
|
+
if (props.expandedKeys) {
|
|
91333
|
+
newState.filteredExpandedKeys = calcExpandedKeys(props.expandedKeys, keyEntities, props.autoExpandParent || !prevProps);
|
|
91334
|
+
if (prevProps && props.motion) {
|
|
91335
|
+
const prevKeys = prevState ? prevState.filteredExpandedKeys : new Set([]);
|
|
91336
|
+
// only show animation when treeData does not change
|
|
91337
|
+
if (!treeData) {
|
|
91338
|
+
const motionResult = calcMotionKeys(prevKeys, newState.filteredExpandedKeys, keyEntities);
|
|
91339
|
+
let {
|
|
91340
|
+
motionKeys
|
|
91341
|
+
} = motionResult;
|
|
91342
|
+
const {
|
|
91343
|
+
motionType
|
|
91344
|
+
} = motionResult;
|
|
91345
|
+
if (props.showFilteredOnly) {
|
|
91346
|
+
motionKeys = motionKeys.filter(key => prevState.filteredShownKeys.has(key));
|
|
91347
|
+
}
|
|
91348
|
+
if (motionType === 'hide') {
|
|
91349
|
+
// cache flatten nodes: expandedKeys changed may not be triggered by interaction
|
|
91350
|
+
newState.cachedFlattenNodes = treeUtil_cloneDeep(prevState.flattenNodes);
|
|
91351
|
+
}
|
|
91352
|
+
newState.motionKeys = new Set(motionKeys);
|
|
91353
|
+
newState.motionType = motionType;
|
|
91354
|
+
}
|
|
91355
|
+
}
|
|
91356
|
+
newState.flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.filteredExpandedKeys || prevState.filteredExpandedKeys, keyMaps, props.showFilteredOnly && prevState.filteredShownKeys);
|
|
91357
|
+
}
|
|
91267
91358
|
}
|
|
91268
91359
|
// selectedKeys: single mode controlled
|
|
91269
91360
|
const isMultiple = props.multiple;
|
|
@@ -91370,7 +91461,9 @@ class TreeSelect extends BaseComponent {
|
|
|
91370
91461
|
this.props.onSearch && this.props.onSearch(input, filteredExpandedKeys);
|
|
91371
91462
|
},
|
|
91372
91463
|
cacheFlattenNodes: bool => {
|
|
91373
|
-
this.
|
|
91464
|
+
this.setState({
|
|
91465
|
+
cachedFlattenNodes: bool ? treeUtil_cloneDeep(this.state.flattenNodes) : undefined
|
|
91466
|
+
});
|
|
91374
91467
|
},
|
|
91375
91468
|
notifyLoad: (newLoadedKeys, data) => {
|
|
91376
91469
|
const {
|
|
@@ -91515,7 +91608,8 @@ class TreeSelect extends BaseComponent {
|
|
|
91515
91608
|
autoAdjustOverflow: autoAdjustOverflow,
|
|
91516
91609
|
mouseLeaveDelay: mouseLeaveDelay,
|
|
91517
91610
|
mouseEnterDelay: mouseEnterDelay,
|
|
91518
|
-
onVisibleChange: this.handlePopoverClose
|
|
91611
|
+
onVisibleChange: this.handlePopoverClose,
|
|
91612
|
+
afterClose: this.afterClose
|
|
91519
91613
|
}, selection);
|
|
91520
91614
|
}
|
|
91521
91615
|
}
|