@douyinfe/semi-ui 2.47.0 → 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.
@@ -62665,8 +62665,9 @@ class DropdownItem extends BaseComponent {
62665
62665
  ['onClick', 'onMouseEnter', 'onMouseLeave', 'onContextMenu'].forEach(eventName => {
62666
62666
  if (eventName === "onClick") {
62667
62667
  events["onMouseDown"] = e => {
62668
+ var _a, _b;
62668
62669
  if (e.button === 0) {
62669
- this.props[eventName](e);
62670
+ (_b = (_a = this.props)[eventName]) === null || _b === void 0 ? void 0 : _b.call(_a, e);
62670
62671
  }
62671
62672
  };
62672
62673
  } else {
@@ -70315,7 +70316,7 @@ var utils_rest = undefined && undefined.__rest || function (s, e) {
70315
70316
  };
70316
70317
 
70317
70318
 
70318
- const generateOption = (child, parent, index) => {
70319
+ const generateOption = (child, parent, index, newKey) => {
70319
70320
  const childProps = child.props;
70320
70321
  if (!child || !childProps) {
70321
70322
  return null;
@@ -70333,7 +70334,7 @@ const generateOption = (child, parent, index) => {
70333
70334
  // Props are collected from ReactNode, after React.Children.toArray
70334
70335
  // no need to determine whether the key exists in child
70335
70336
  // Even if the user does not explicitly declare it, React will always generate a key.
70336
- option._keyInJsx = child.key;
70337
+ option._keyInJsx = newKey || child.key;
70337
70338
  return option;
70338
70339
  };
70339
70340
  const getOptionsFromGroup = selectChildren => {
@@ -70364,10 +70365,22 @@ const getOptionsFromGroup = selectChildren => {
70364
70365
  children
70365
70366
  } = _a,
70366
70367
  restGroupProps = utils_rest(_a, ["children"]);
70368
+ let originKeys = [];
70369
+ if (Array.isArray(children)) {
70370
+ // if group has children > 1
70371
+ originKeys = children.map(item => item.key);
70372
+ } else {
70373
+ originKeys.push(children.key);
70374
+ }
70367
70375
  children = external_root_React_commonjs2_react_commonjs_react_amd_react_default().Children.toArray(children);
70368
- const childrenOption = children.map(option => {
70376
+ const childrenOption = children.map((option, index) => {
70377
+ let newKey = option.key;
70378
+ if (originKeys[index] === null) {
70379
+ newKey = child.key + '' + option.key; // if option in group and didn't set key, concat parent key to avoid conflict (default generate key just like .0, .1)
70380
+ }
70381
+
70369
70382
  optionIndex++;
70370
- return generateOption(option, restGroupProps, optionIndex);
70383
+ return generateOption(option, restGroupProps, optionIndex, newKey);
70371
70384
  });
70372
70385
  const group = Object.assign(Object.assign({}, child.props), {
70373
70386
  children: childrenOption,
@@ -80504,9 +80517,6 @@ class HeadTable extends (external_root_React_commonjs2_react_commonjs_react_amd_
80504
80517
  bodyHasScrollBar,
80505
80518
  sticky
80506
80519
  } = this.props;
80507
- if (!showHeader) {
80508
- return null;
80509
- }
80510
80520
  const Table = get_default()(components, 'header.outer', 'table');
80511
80521
  const x = get_default()(scroll, 'x');
80512
80522
  const headStyle = {};
@@ -80527,7 +80537,8 @@ class HeadTable extends (external_root_React_commonjs2_react_commonjs_react_amd_
80527
80537
  onDidUpdate: onDidUpdate
80528
80538
  }));
80529
80539
  const headTableCls = classnames_default()(`${prefixCls}-header`, {
80530
- [`${prefixCls}-header-sticky`]: sticky
80540
+ [`${prefixCls}-header-sticky`]: sticky,
80541
+ [`${prefixCls}-header-hidden`]: !showHeader
80531
80542
  });
80532
80543
  const stickyTop = get_default()(sticky, 'top', 0);
80533
80544
  if (typeof stickyTop === 'number') {
@@ -89538,6 +89549,12 @@ class TreeSelectFoundation extends foundation {
89538
89549
  this.close(e);
89539
89550
  });
89540
89551
  };
89552
+ this.clearInputValue = () => {
89553
+ const {
89554
+ inputValue
89555
+ } = this.getStates();
89556
+ inputValue && this._adapter.updateInputValue('');
89557
+ };
89541
89558
  }
89542
89559
  init() {
89543
89560
  const {
@@ -89689,7 +89706,7 @@ class TreeSelectFoundation extends foundation {
89689
89706
  const isSearching = Boolean(inputValue);
89690
89707
  const treeNodeProps = {
89691
89708
  eventKey: key,
89692
- expanded: isSearching && !this._isExpandControlled() ? filteredExpandedKeys.has(key) : expandedKeys.has(key),
89709
+ expanded: isSearching ? filteredExpandedKeys.has(key) : expandedKeys.has(key),
89693
89710
  selected: selectedKeys.includes(key),
89694
89711
  checked: realChecked,
89695
89712
  halfChecked: realHalfChecked,
@@ -89962,8 +89979,8 @@ class TreeSelectFoundation extends foundation {
89962
89979
  expandedOptsKeys.forEach(item => newExpandedKeys.add(item));
89963
89980
  const newFlattenNodes = flattenTreeData(treeData, newExpandedKeys, keyMaps);
89964
89981
  this._adapter.updateState({
89965
- expandedKeys: isExpandControlled ? expandedKeys : newExpandedKeys,
89966
- flattenNodes: isExpandControlled ? flattenNodes : newFlattenNodes,
89982
+ expandedKeys: newExpandedKeys,
89983
+ flattenNodes: newFlattenNodes,
89967
89984
  inputValue: '',
89968
89985
  motionKeys: new Set([]),
89969
89986
  filteredKeys: new Set([]),
@@ -90012,8 +90029,8 @@ class TreeSelectFoundation extends foundation {
90012
90029
  const newFilteredExpandedKeys = new Set(expandedOptsKeys);
90013
90030
  this._adapter.notifySearch(sugInput, Array.from(newFilteredExpandedKeys));
90014
90031
  this._adapter.updateState({
90015
- expandedKeys: this._isExpandControlled() ? expandedKeys : newExpandedKeys,
90016
- flattenNodes: this._isExpandControlled() ? flattenNodes : newFlattenNodes,
90032
+ expandedKeys: newExpandedKeys,
90033
+ flattenNodes: newFlattenNodes,
90017
90034
  motionKeys: new Set([]),
90018
90035
  filteredKeys: new Set(filteredOptsKeys),
90019
90036
  filteredExpandedKeys: newFilteredExpandedKeys,
@@ -90221,7 +90238,7 @@ class TreeSelectFoundation extends foundation {
90221
90238
  return;
90222
90239
  }
90223
90240
  const isExpandControlled = this._isExpandControlled();
90224
- if (isSearching && !isExpandControlled) {
90241
+ if (isSearching) {
90225
90242
  this.handleNodeExpandInSearch(e, treeNode);
90226
90243
  return;
90227
90244
  }
@@ -90991,13 +91008,27 @@ class TreeSelect extends BaseComponent {
90991
91008
  searchAutoFocus,
90992
91009
  searchPosition
90993
91010
  } = this.props;
90994
- if (isVisible === false && Boolean(filterTreeNode)) {
90995
- this.foundation.clearInput();
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();
90996
91015
  }
90997
91016
  if (filterTreeNode && searchPosition === treeSelect_constants_strings.SEARCH_POSITION_DROPDOWN && isVisible && searchAutoFocus) {
90998
91017
  this.foundation.focusInput(true);
90999
91018
  }
91000
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
+ };
91001
91032
  this.renderTreeNode = (treeNode, ind, style) => {
91002
91033
  const {
91003
91034
  data,
@@ -91030,6 +91061,7 @@ class TreeSelect extends BaseComponent {
91030
91061
  this.renderNodeList = () => {
91031
91062
  const {
91032
91063
  flattenNodes,
91064
+ cachedFlattenNodes,
91033
91065
  motionKeys,
91034
91066
  motionType,
91035
91067
  filteredKeys
@@ -91045,7 +91077,7 @@ class TreeSelect extends BaseComponent {
91045
91077
  if (!virtualize || isEmpty_default()(virtualize)) {
91046
91078
  return /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement(NodeList, {
91047
91079
  flattenNodes: flattenNodes,
91048
- flattenList: this._flattenNodes,
91080
+ flattenList: cachedFlattenNodes,
91049
91081
  motionKeys: motionExpand ? motionKeys : new Set([]),
91050
91082
  motionType: motionType,
91051
91083
  // When motionKeys is empty, but filteredKeys is not empty (that is, the search hits), this situation should be distinguished from ordinary motionKeys
@@ -91164,6 +91196,7 @@ class TreeSelect extends BaseComponent {
91164
91196
  keyEntities: {},
91165
91197
  treeData: [],
91166
91198
  flattenNodes: [],
91199
+ cachedFlattenNodes: undefined,
91167
91200
  selectedKeys: [],
91168
91201
  checkedKeys: new Set(),
91169
91202
  halfCheckedKeys: new Set(),
@@ -91193,6 +91226,7 @@ class TreeSelect extends BaseComponent {
91193
91226
  };
91194
91227
  }
91195
91228
  static getDerivedStateFromProps(props, prevState) {
91229
+ var _a;
91196
91230
  const {
91197
91231
  prevProps,
91198
91232
  rePosKey
@@ -91210,6 +91244,8 @@ class TreeSelect extends BaseComponent {
91210
91244
  };
91211
91245
  const needUpdateTreeData = needUpdate('treeData');
91212
91246
  const needUpdateExpandedKeys = needUpdate('expandedKeys');
91247
+ const isExpandControlled = ('expandedKeys' in props);
91248
+ const isSearching = Boolean(props.filterTreeNode && prevState.inputValue && prevState.inputValue.length);
91213
91249
  // TreeNode
91214
91250
  if (needUpdateTreeData) {
91215
91251
  treeData = props.treeData;
@@ -91228,31 +91264,97 @@ class TreeSelect extends BaseComponent {
91228
91264
  }
91229
91265
  }
91230
91266
  const expandAllWhenDataChange = needUpdateTreeData && props.expandAll;
91231
- // expandedKeys
91232
- if (needUpdateExpandedKeys || prevProps && needUpdate('autoExpandParent')) {
91233
- newState.expandedKeys = calcExpandedKeys(props.expandedKeys, keyEntities, props.autoExpandParent || !prevProps);
91234
- // only show animation when treeData does not change
91235
- if (prevProps && props.motion && !treeData) {
91236
- const {
91237
- motionKeys,
91238
- motionType
91239
- } = calcMotionKeys(prevState.expandedKeys, newState.expandedKeys, keyEntities);
91240
- newState.motionKeys = new Set(motionKeys);
91241
- newState.motionType = motionType;
91242
- }
91243
- } else if (!prevProps && (props.defaultExpandAll || props.expandAll) || expandAllWhenDataChange) {
91244
- newState.expandedKeys = new Set(Object.keys(keyEntities));
91245
- } else if (!prevProps && props.defaultExpandedKeys) {
91246
- newState.expandedKeys = calcExpandedKeys(props.defaultExpandedKeys, keyEntities);
91247
- } else if (!prevProps && props.defaultValue) {
91248
- newState.expandedKeys = calcExpandedKeysForValues(normalizeValue(props.defaultValue, withObject, keyMaps), keyEntities, props.multiple, valueEntities);
91249
- } else if (!prevProps && props.value) {
91250
- newState.expandedKeys = calcExpandedKeysForValues(normalizeValue(props.value, withObject, keyMaps), keyEntities, props.multiple, valueEntities);
91251
- }
91252
- // flattenNodes
91253
- if (treeData || needUpdateExpandedKeys) {
91254
- const flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.expandedKeys || prevState.expandedKeys, keyMaps);
91255
- newState.flattenNodes = flattenNodes;
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
+ }
91256
91358
  }
91257
91359
  // selectedKeys: single mode controlled
91258
91360
  const isMultiple = props.multiple;
@@ -91359,7 +91461,9 @@ class TreeSelect extends BaseComponent {
91359
91461
  this.props.onSearch && this.props.onSearch(input, filteredExpandedKeys);
91360
91462
  },
91361
91463
  cacheFlattenNodes: bool => {
91362
- this._flattenNodes = bool ? treeUtil_cloneDeep(this.state.flattenNodes) : null;
91464
+ this.setState({
91465
+ cachedFlattenNodes: bool ? treeUtil_cloneDeep(this.state.flattenNodes) : undefined
91466
+ });
91363
91467
  },
91364
91468
  notifyLoad: (newLoadedKeys, data) => {
91365
91469
  const {
@@ -91504,7 +91608,8 @@ class TreeSelect extends BaseComponent {
91504
91608
  autoAdjustOverflow: autoAdjustOverflow,
91505
91609
  mouseLeaveDelay: mouseLeaveDelay,
91506
91610
  mouseEnterDelay: mouseEnterDelay,
91507
- onVisibleChange: this.handlePopoverClose
91611
+ onVisibleChange: this.handlePopoverClose,
91612
+ afterClose: this.afterClose
91508
91613
  }, selection);
91509
91614
  }
91510
91615
  }
@@ -98435,7 +98540,7 @@ class Form extends BaseComponent {
98435
98540
  [baseForm_prefix + '-vertical']: layout === 'vertical',
98436
98541
  [baseForm_prefix + '-horizontal']: layout === 'horizontal'
98437
98542
  });
98438
- const showldAppendRow = wrapperCol && labelCol;
98543
+ const shouldAppendRow = wrapperCol && labelCol;
98439
98544
  const formContent = /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement("form", Object.assign({
98440
98545
  style: style
98441
98546
  }, rest, {
@@ -98451,7 +98556,7 @@ class Form extends BaseComponent {
98451
98556
  value: this.formApi
98452
98557
  }, /*#__PURE__*/external_root_React_commonjs2_react_commonjs_react_amd_react_default().createElement(FormStateContext.Provider, {
98453
98558
  value: formState
98454
- }, showldAppendRow ? withRowForm : formContent)));
98559
+ }, shouldAppendRow ? withRowForm : formContent)));
98455
98560
  }
98456
98561
  }
98457
98562
  Form.propTypes = {