@douyinfe/semi-ui 2.10.1 → 2.10.2

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/form/baseForm.tsx CHANGED
@@ -151,7 +151,6 @@ class Form extends BaseComponent<BaseFormProps, BaseFormState> {
151
151
 
152
152
  componentWillUnmount() {
153
153
  this.foundation.destroy();
154
- this.foundation = null;
155
154
  this.formApi = null;
156
155
  }
157
156
 
@@ -150,6 +150,7 @@ class Checkbox extends _baseComponent.default {
150
150
  } = this.context.checkboxGroup;
151
151
  props.isCardType = isCardType;
152
152
  props.isPureCardType = isPureCardType;
153
+ props['name'] = this.context.checkboxGroup.name;
153
154
  }
154
155
 
155
156
  const prefix = prefixCls || _constants.checkboxClasses.PREFIX;
@@ -168,7 +169,6 @@ class Checkbox extends _baseComponent.default {
168
169
  const extraCls = (0, _classnames.default)("".concat(prefix, "-extra"), {
169
170
  ["".concat(prefix, "-cardType_extra_noChildren")]: props.isCardType && !children
170
171
  });
171
- const name = inGroup && this.context.checkboxGroup.name;
172
172
 
173
173
  const renderContent = () => /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children ? /*#__PURE__*/_react.default.createElement("span", {
174
174
  id: this.addonId,
@@ -196,7 +196,6 @@ class Checkbox extends _baseComponent.default {
196
196
  }, /*#__PURE__*/_react.default.createElement(_checkboxInner.default, (0, _assign.default)({}, this.props, props, {
197
197
  addonId: children && this.addonId,
198
198
  extraId: extra && this.extraId,
199
- name: name,
200
199
  isPureCardType: props.isPureCardType,
201
200
  ref: ref => {
202
201
  this.checkboxEntity = ref;
@@ -14,6 +14,8 @@ _Object$defineProperty(exports, "__esModule", {
14
14
 
15
15
  exports.default = void 0;
16
16
 
17
+ var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
18
+
17
19
  var _noop2 = _interopRequireDefault(require("lodash/noop"));
18
20
 
19
21
  var _react = _interopRequireWildcard(require("react"));
@@ -63,27 +65,29 @@ class CheckboxInner extends _react.PureComponent {
63
65
  ["".concat(prefix, "-inner-display")]: true
64
66
  });
65
67
  const icon = checked ? /*#__PURE__*/_react.default.createElement(_semiIcons.IconCheckboxTick, null) : indeterminate ? /*#__PURE__*/_react.default.createElement(_semiIcons.IconCheckboxIndeterminate, null) : null;
66
- return /*#__PURE__*/_react.default.createElement("span", {
67
- className: wrapper
68
- }, /*#__PURE__*/_react.default.createElement("input", {
68
+ const inputProps = {
69
69
  type: "checkbox",
70
- "aria-label": this.props['aria-label'],
71
- "aria-disabled": disabled,
72
- "aria-checked": checked,
73
- "aria-labelledby": addonId,
74
- "aria-describedby": extraId || this.props['aria-describedby'],
75
- "aria-invalid": this.props['aria-invalid'],
76
- "aria-errormessage": this.props['aria-errormessage'],
77
- "aria-required": this.props['aria-required'],
78
- ref: ref => {
79
- this.inputEntity = ref;
80
- },
70
+ 'aria-label': this.props['aria-label'],
71
+ 'aria-disabled': disabled,
72
+ 'aria-checked': checked,
73
+ 'aria-labelledby': addonId,
74
+ 'aria-describedby': extraId || this.props['aria-describedby'],
75
+ 'aria-invalid': this.props['aria-invalid'],
76
+ 'aria-errormessage': this.props['aria-errormessage'],
77
+ 'aria-required': this.props['aria-required'],
81
78
  className: _constants.checkboxClasses.INPUT,
82
79
  onChange: _noop2.default,
83
80
  checked: checked,
84
- disabled: disabled,
85
- name: name
86
- }), /*#__PURE__*/_react.default.createElement("span", {
81
+ disabled: disabled
82
+ };
83
+ name && (inputProps['name'] = name);
84
+ return /*#__PURE__*/_react.default.createElement("span", {
85
+ className: wrapper
86
+ }, /*#__PURE__*/_react.default.createElement("input", (0, _assign.default)({}, inputProps, {
87
+ ref: ref => {
88
+ this.inputEntity = ref;
89
+ }
90
+ })), /*#__PURE__*/_react.default.createElement("span", {
87
91
  className: inner
88
92
  }, icon));
89
93
  }
@@ -106,7 +106,6 @@ class Form extends _baseComponent.default {
106
106
 
107
107
  componentWillUnmount() {
108
108
  this.foundation.destroy();
109
- this.foundation = null;
110
109
  this.formApi = null;
111
110
  }
112
111
 
@@ -16,8 +16,6 @@ exports.default = void 0;
16
16
 
17
17
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
18
18
 
19
- var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
20
-
21
19
  var _bind = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/bind"));
22
20
 
23
21
  var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
@@ -34,6 +32,8 @@ var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
34
32
 
35
33
  var _some = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/some"));
36
34
 
35
+ var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
36
+
37
37
  var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
38
38
 
39
39
  var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
@@ -56,7 +56,7 @@ var _classnames = _interopRequireDefault(require("classnames"));
56
56
 
57
57
  var _propTypes = _interopRequireDefault(require("prop-types"));
58
58
 
59
- var _context16 = _interopRequireDefault(require("../configProvider/context"));
59
+ var _context15 = _interopRequireDefault(require("../configProvider/context"));
60
60
 
61
61
  var _foundation = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/select/foundation"));
62
62
 
@@ -96,6 +96,8 @@ var _utils2 = require("../_utils");
96
96
 
97
97
  var _warning = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/utils/warning"));
98
98
 
99
+ var _uuid = require("@douyinfe/semi-foundation/lib/cjs/utils/uuid");
100
+
99
101
  require("@douyinfe/semi-foundation/lib/cjs/select/select.css");
100
102
 
101
103
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -110,7 +112,7 @@ const key = 0; // Notes: Use the label of the option as the identifier, that is,
110
112
 
111
113
  class Select extends _baseComponent.default {
112
114
  constructor(props) {
113
- var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8;
115
+ var _context, _context2, _context3, _context4, _context5, _context6, _context7;
114
116
 
115
117
  super(props);
116
118
 
@@ -132,19 +134,19 @@ class Select extends _baseComponent.default {
132
134
  };
133
135
  /* Generate random string */
134
136
 
135
- this.selectOptionListID = (0, _slice.default)(_context = Math.random().toString(36)).call(_context, 2);
137
+ this.selectOptionListID = '';
136
138
  this.virtualizeListRef = /*#__PURE__*/_react.default.createRef();
137
139
  this.inputRef = /*#__PURE__*/_react.default.createRef();
138
140
  this.triggerRef = /*#__PURE__*/_react.default.createRef();
139
141
  this.optionsRef = /*#__PURE__*/_react.default.createRef();
140
142
  this.clickOutsideHandler = null;
141
- this.onSelect = (0, _bind.default)(_context2 = this.onSelect).call(_context2, this);
142
- this.onClear = (0, _bind.default)(_context3 = this.onClear).call(_context3, this);
143
- this.onMouseEnter = (0, _bind.default)(_context4 = this.onMouseEnter).call(_context4, this);
144
- this.onMouseLeave = (0, _bind.default)(_context5 = this.onMouseLeave).call(_context5, this);
145
- this.renderOption = (0, _bind.default)(_context6 = this.renderOption).call(_context6, this);
146
- this.onKeyPress = (0, _bind.default)(_context7 = this.onKeyPress).call(_context7, this);
147
- this.onClearBtnEnterPress = (0, _bind.default)(_context8 = this.onClearBtnEnterPress).call(_context8, this);
143
+ this.onSelect = (0, _bind.default)(_context = this.onSelect).call(_context, this);
144
+ this.onClear = (0, _bind.default)(_context2 = this.onClear).call(_context2, this);
145
+ this.onMouseEnter = (0, _bind.default)(_context3 = this.onMouseEnter).call(_context3, this);
146
+ this.onMouseLeave = (0, _bind.default)(_context4 = this.onMouseLeave).call(_context4, this);
147
+ this.renderOption = (0, _bind.default)(_context5 = this.renderOption).call(_context5, this);
148
+ this.onKeyPress = (0, _bind.default)(_context6 = this.onKeyPress).call(_context6, this);
149
+ this.onClearBtnEnterPress = (0, _bind.default)(_context7 = this.onClearBtnEnterPress).call(_context7, this);
148
150
  this.foundation = new _foundation.default(this.adapter);
149
151
  (0, _warning.default)('optionLabelProp' in this.props, '[Semi Select] \'optionLabelProp\' has already been deprecated, please use \'renderSelectedItem\' instead.');
150
152
  (0, _warning.default)('labelInValue' in this.props, '[Semi Select] \'labelInValue\' has already been deprecated, please use \'onChangeWithObject\' instead.');
@@ -348,18 +350,18 @@ class Select extends _baseComponent.default {
348
350
  } catch (error) {}
349
351
  },
350
352
  updateScrollTop: index => {
351
- var _context10, _context11;
353
+ var _context9, _context10;
352
354
 
353
355
  // eslint-disable-next-line max-len
354
356
  let optionClassName = ".".concat(prefixcls, "-option-selected");
355
357
 
356
358
  if (index !== undefined) {
357
- var _context9;
359
+ var _context8;
358
360
 
359
- optionClassName = (0, _concat.default)(_context9 = ".".concat(prefixcls, "-option:nth-child(")).call(_context9, index, ")");
361
+ optionClassName = (0, _concat.default)(_context8 = ".".concat(prefixcls, "-option:nth-child(")).call(_context8, index, ")");
360
362
  }
361
363
 
362
- let destNode = document.querySelector((0, _concat.default)(_context10 = (0, _concat.default)(_context11 = "#".concat(prefixcls, "-")).call(_context11, this.selectOptionListID, " ")).call(_context10, optionClassName));
364
+ let destNode = document.querySelector((0, _concat.default)(_context9 = (0, _concat.default)(_context10 = "#".concat(prefixcls, "-")).call(_context10, this.selectOptionListID, " ")).call(_context9, optionClassName));
363
365
 
364
366
  if ((0, _isArray.default)(destNode)) {
365
367
  // eslint-disable-next-line prefer-destructuring
@@ -380,6 +382,7 @@ class Select extends _baseComponent.default {
380
382
 
381
383
  componentDidMount() {
382
384
  this.foundation.init();
385
+ this.selectOptionListID = (0, _uuid.getUuidShort)();
383
386
  }
384
387
 
385
388
  componentWillUnmount() {
@@ -387,10 +390,10 @@ class Select extends _baseComponent.default {
387
390
  }
388
391
 
389
392
  componentDidUpdate(prevProps, prevState) {
390
- var _context12, _context13;
393
+ var _context11, _context12;
391
394
 
392
- const prevChildrenKeys = (0, _map2.default)(_context12 = _react.default.Children.toArray(prevProps.children)).call(_context12, child => child.key);
393
- const nowChildrenKeys = (0, _map2.default)(_context13 = _react.default.Children.toArray(this.props.children)).call(_context13, child => child.key);
395
+ const prevChildrenKeys = (0, _map2.default)(_context11 = _react.default.Children.toArray(prevProps.children)).call(_context11, child => child.key);
396
+ const nowChildrenKeys = (0, _map2.default)(_context12 = _react.default.Children.toArray(this.props.children)).call(_context12, child => child.key);
394
397
  let isOptionsChanged = false;
395
398
 
396
399
  if (!(0, _isEqual2.default)(prevChildrenKeys, nowChildrenKeys) || !(0, _isEqual2.default)(prevProps.optionList, this.props.optionList)) {
@@ -631,7 +634,7 @@ class Select extends _baseComponent.default {
631
634
  }
632
635
 
633
636
  renderOptions(children) {
634
- var _context14;
637
+ var _context13;
635
638
 
636
639
  const {
637
640
  dropdownMinWidth,
@@ -667,7 +670,7 @@ class Select extends _baseComponent.default {
667
670
  });
668
671
  const isEmpty = !options.length || !(0, _some.default)(options).call(options, item => item._show);
669
672
  return /*#__PURE__*/_react.default.createElement("div", {
670
- id: (0, _concat.default)(_context14 = "".concat(prefixcls, "-")).call(_context14, this.selectOptionListID),
673
+ id: (0, _concat.default)(_context13 = "".concat(prefixcls, "-")).call(_context13, this.selectOptionListID),
671
674
  className: dropdownClassName,
672
675
  style: style
673
676
  }, outerTopSlot, /*#__PURE__*/_react.default.createElement("div", {
@@ -898,7 +901,7 @@ class Select extends _baseComponent.default {
898
901
  }
899
902
 
900
903
  renderSelection() {
901
- var _context15;
904
+ var _context14;
902
905
 
903
906
  const {
904
907
  disabled,
@@ -982,7 +985,7 @@ class Select extends _baseComponent.default {
982
985
  role: "combobox",
983
986
  "aria-disabled": disabled,
984
987
  "aria-expanded": isOpen,
985
- "aria-controls": (0, _concat.default)(_context15 = "".concat(prefixcls, "-")).call(_context15, this.selectOptionListID),
988
+ "aria-controls": (0, _concat.default)(_context14 = "".concat(prefixcls, "-")).call(_context14, this.selectOptionListID),
986
989
  "aria-haspopup": "listbox",
987
990
  "aria-label": "select value",
988
991
  "aria-invalid": this.props['aria-invalid'],
@@ -1049,7 +1052,7 @@ class Select extends _baseComponent.default {
1049
1052
 
1050
1053
  }
1051
1054
 
1052
- Select.contextType = _context16.default;
1055
+ Select.contextType = _context15.default;
1053
1056
  Select.Option = _option.default;
1054
1057
  Select.OptGroup = _optionGroup.default;
1055
1058
  Select.propTypes = {
@@ -113,6 +113,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
113
113
  get adapter(): TableRowAdapter<BaseRowProps>;
114
114
  ref: React.MutableRefObject<any>;
115
115
  constructor(props: BaseRowProps);
116
+ componentDidMount(): void;
116
117
  shouldComponentUpdate(nextProps: BaseRowProps): boolean;
117
118
  _cacheNode: (node: any) => void;
118
119
  renderExpandIcon: (record: Record<string, any>) => React.ReactNode;
@@ -141,6 +141,28 @@ class TableRow extends _baseComponent.default {
141
141
  });
142
142
  }
143
143
 
144
+ componentDidMount() {
145
+ // fix #745
146
+ // didmount/willUnmount may be called twice when React.StrictMode is true in React 18, we need to ensure that this.cache.customRowProps is correct
147
+ const {
148
+ onRow,
149
+ index,
150
+ record
151
+ } = this.props;
152
+ const customRowProps = this.adapter.getCache('customRowProps');
153
+
154
+ if (typeof customRowProps === 'undefined') {
155
+ const _a = onRow(record, index) || {},
156
+ {
157
+ className: customClassName,
158
+ style: customStyle
159
+ } = _a,
160
+ rowProps = __rest(_a, ["className", "style"]);
161
+
162
+ this.adapter.setCache('customRowProps', (0, _assign.default)({}, rowProps));
163
+ }
164
+ }
165
+
144
166
  shouldComponentUpdate(nextProps) {
145
167
  /**
146
168
  * Shallow comparison of incoming props to simulate PureComponent
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Fixed, TableComponents, Scroll, BodyScrollEvent, ColumnProps } from './interface';
2
+ import { Fixed, TableComponents, Scroll, BodyScrollEvent, ColumnProps, OnHeaderRow } from './interface';
3
3
  export interface HeadTableProps {
4
4
  [x: string]: any;
5
5
  anyColumnFixed?: boolean;
@@ -15,6 +15,7 @@ export interface HeadTableProps {
15
15
  selectedRowKeysSet: Set<any>;
16
16
  showHeader?: boolean;
17
17
  onDidUpdate?: (ref: React.MutableRefObject<any>) => void;
18
+ onHeaderRow?: OnHeaderRow<any>;
18
19
  }
19
20
  declare const _default: React.ForwardRefExoticComponent<Pick<HeadTableProps, keyof HeadTableProps> & React.RefAttributes<HTMLDivElement>>;
20
21
  export default _default;
@@ -116,7 +116,8 @@ HeadTable.propTypes = {
116
116
  }),
117
117
  selectedRowKeysSet: _propTypes.default.instanceOf(_set.default).isRequired,
118
118
  showHeader: _propTypes.default.bool,
119
- onDidUpdate: _propTypes.default.func
119
+ onDidUpdate: _propTypes.default.func,
120
+ onHeaderRow: _propTypes.default.func
120
121
  };
121
122
  HeadTable.defaultProps = {
122
123
  handleBodyScroll: _noop2.default
@@ -718,6 +718,7 @@ class Table extends _baseComponent.default {
718
718
  components,
719
719
  headerRef,
720
720
  bodyRef,
721
+ onHeaderRow,
721
722
  rowSelection,
722
723
  dataSource,
723
724
  bodyHasScrollBar,
@@ -736,6 +737,7 @@ class Table extends _baseComponent.default {
736
737
  scroll: scroll,
737
738
  showHeader: showHeader,
738
739
  selectedRowKeysSet: selectedRowKeysSet,
740
+ onHeaderRow: onHeaderRow,
739
741
  dataSource: dataSource,
740
742
  bodyHasScrollBar: bodyHasScrollBar
741
743
  }) : null;
@@ -126,6 +126,7 @@ class Checkbox extends BaseComponent {
126
126
  } = this.context.checkboxGroup;
127
127
  props.isCardType = isCardType;
128
128
  props.isPureCardType = isPureCardType;
129
+ props['name'] = this.context.checkboxGroup.name;
129
130
  }
130
131
 
131
132
  const prefix = prefixCls || css.PREFIX;
@@ -144,7 +145,6 @@ class Checkbox extends BaseComponent {
144
145
  const extraCls = classnames("".concat(prefix, "-extra"), {
145
146
  ["".concat(prefix, "-cardType_extra_noChildren")]: props.isCardType && !children
146
147
  });
147
- const name = inGroup && this.context.checkboxGroup.name;
148
148
 
149
149
  const renderContent = () => /*#__PURE__*/React.createElement(React.Fragment, null, children ? /*#__PURE__*/React.createElement("span", {
150
150
  id: this.addonId,
@@ -172,7 +172,6 @@ class Checkbox extends BaseComponent {
172
172
  }, /*#__PURE__*/React.createElement(CheckboxInner, _Object$assign({}, this.props, props, {
173
173
  addonId: children && this.addonId,
174
174
  extraId: extra && this.extraId,
175
- name: name,
176
175
  isPureCardType: props.isPureCardType,
177
176
  ref: ref => {
178
177
  this.checkboxEntity = ref;
@@ -1,4 +1,5 @@
1
1
  import _noop from "lodash/noop";
2
+ import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
2
3
 
3
4
  /* eslint-disable no-nested-ternary */
4
5
  import React, { PureComponent } from 'react';
@@ -38,27 +39,29 @@ class CheckboxInner extends PureComponent {
38
39
  ["".concat(prefix, "-inner-display")]: true
39
40
  });
40
41
  const icon = checked ? /*#__PURE__*/React.createElement(IconCheckboxTick, null) : indeterminate ? /*#__PURE__*/React.createElement(IconCheckboxIndeterminate, null) : null;
41
- return /*#__PURE__*/React.createElement("span", {
42
- className: wrapper
43
- }, /*#__PURE__*/React.createElement("input", {
42
+ const inputProps = {
44
43
  type: "checkbox",
45
- "aria-label": this.props['aria-label'],
46
- "aria-disabled": disabled,
47
- "aria-checked": checked,
48
- "aria-labelledby": addonId,
49
- "aria-describedby": extraId || this.props['aria-describedby'],
50
- "aria-invalid": this.props['aria-invalid'],
51
- "aria-errormessage": this.props['aria-errormessage'],
52
- "aria-required": this.props['aria-required'],
53
- ref: ref => {
54
- this.inputEntity = ref;
55
- },
44
+ 'aria-label': this.props['aria-label'],
45
+ 'aria-disabled': disabled,
46
+ 'aria-checked': checked,
47
+ 'aria-labelledby': addonId,
48
+ 'aria-describedby': extraId || this.props['aria-describedby'],
49
+ 'aria-invalid': this.props['aria-invalid'],
50
+ 'aria-errormessage': this.props['aria-errormessage'],
51
+ 'aria-required': this.props['aria-required'],
56
52
  className: css.INPUT,
57
53
  onChange: _noop,
58
54
  checked: checked,
59
- disabled: disabled,
60
- name: name
61
- }), /*#__PURE__*/React.createElement("span", {
55
+ disabled: disabled
56
+ };
57
+ name && (inputProps['name'] = name);
58
+ return /*#__PURE__*/React.createElement("span", {
59
+ className: wrapper
60
+ }, /*#__PURE__*/React.createElement("input", _Object$assign({}, inputProps, {
61
+ ref: ref => {
62
+ this.inputEntity = ref;
63
+ }
64
+ })), /*#__PURE__*/React.createElement("span", {
62
65
  className: inner
63
66
  }, icon));
64
67
  }
@@ -68,7 +68,6 @@ class Form extends BaseComponent {
68
68
 
69
69
  componentWillUnmount() {
70
70
  this.foundation.destroy();
71
- this.foundation = null;
72
71
  this.formApi = null;
73
72
  }
74
73
 
@@ -4,7 +4,6 @@ import _noop from "lodash/noop";
4
4
  import _isString from "lodash/isString";
5
5
  import _isEqual from "lodash/isEqual";
6
6
  import _Map from "@babel/runtime-corejs3/core-js-stable/map";
7
- import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
8
7
  import _bindInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/bind";
9
8
  import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
10
9
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
@@ -13,6 +12,7 @@ import _Array$isArray from "@babel/runtime-corejs3/core-js-stable/array/is-array
13
12
  import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
14
13
  import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
15
14
  import _someInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/some";
15
+ import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
16
16
  import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
17
17
  import _valuesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/values";
18
18
 
@@ -43,13 +43,14 @@ import Trigger from '../trigger';
43
43
  import { IconChevronDown, IconClear } from '@douyinfe/semi-icons';
44
44
  import { isSemiIcon } from '../_utils';
45
45
  import warning from '@douyinfe/semi-foundation/lib/es/utils/warning';
46
+ import { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';
46
47
  import '@douyinfe/semi-foundation/lib/es/select/select.css';
47
48
  const prefixcls = cssClasses.PREFIX;
48
49
  const key = 0; // Notes: Use the label of the option as the identifier, that is, the option in Select, the value is allowed to be the same, but the label must be unique
49
50
 
50
51
  class Select extends BaseComponent {
51
52
  constructor(props) {
52
- var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8;
53
+ var _context, _context2, _context3, _context4, _context5, _context6, _context7;
53
54
 
54
55
  super(props);
55
56
 
@@ -71,19 +72,19 @@ class Select extends BaseComponent {
71
72
  };
72
73
  /* Generate random string */
73
74
 
74
- this.selectOptionListID = _sliceInstanceProperty(_context = Math.random().toString(36)).call(_context, 2);
75
+ this.selectOptionListID = '';
75
76
  this.virtualizeListRef = /*#__PURE__*/React.createRef();
76
77
  this.inputRef = /*#__PURE__*/React.createRef();
77
78
  this.triggerRef = /*#__PURE__*/React.createRef();
78
79
  this.optionsRef = /*#__PURE__*/React.createRef();
79
80
  this.clickOutsideHandler = null;
80
- this.onSelect = _bindInstanceProperty(_context2 = this.onSelect).call(_context2, this);
81
- this.onClear = _bindInstanceProperty(_context3 = this.onClear).call(_context3, this);
82
- this.onMouseEnter = _bindInstanceProperty(_context4 = this.onMouseEnter).call(_context4, this);
83
- this.onMouseLeave = _bindInstanceProperty(_context5 = this.onMouseLeave).call(_context5, this);
84
- this.renderOption = _bindInstanceProperty(_context6 = this.renderOption).call(_context6, this);
85
- this.onKeyPress = _bindInstanceProperty(_context7 = this.onKeyPress).call(_context7, this);
86
- this.onClearBtnEnterPress = _bindInstanceProperty(_context8 = this.onClearBtnEnterPress).call(_context8, this);
81
+ this.onSelect = _bindInstanceProperty(_context = this.onSelect).call(_context, this);
82
+ this.onClear = _bindInstanceProperty(_context2 = this.onClear).call(_context2, this);
83
+ this.onMouseEnter = _bindInstanceProperty(_context3 = this.onMouseEnter).call(_context3, this);
84
+ this.onMouseLeave = _bindInstanceProperty(_context4 = this.onMouseLeave).call(_context4, this);
85
+ this.renderOption = _bindInstanceProperty(_context5 = this.renderOption).call(_context5, this);
86
+ this.onKeyPress = _bindInstanceProperty(_context6 = this.onKeyPress).call(_context6, this);
87
+ this.onClearBtnEnterPress = _bindInstanceProperty(_context7 = this.onClearBtnEnterPress).call(_context7, this);
87
88
  this.foundation = new SelectFoundation(this.adapter);
88
89
  warning('optionLabelProp' in this.props, '[Semi Select] \'optionLabelProp\' has already been deprecated, please use \'renderSelectedItem\' instead.');
89
90
  warning('labelInValue' in this.props, '[Semi Select] \'labelInValue\' has already been deprecated, please use \'onChangeWithObject\' instead.');
@@ -286,18 +287,18 @@ class Select extends BaseComponent {
286
287
  } catch (error) {}
287
288
  },
288
289
  updateScrollTop: index => {
289
- var _context10, _context11;
290
+ var _context9, _context10;
290
291
 
291
292
  // eslint-disable-next-line max-len
292
293
  let optionClassName = ".".concat(prefixcls, "-option-selected");
293
294
 
294
295
  if (index !== undefined) {
295
- var _context9;
296
+ var _context8;
296
297
 
297
- optionClassName = _concatInstanceProperty(_context9 = ".".concat(prefixcls, "-option:nth-child(")).call(_context9, index, ")");
298
+ optionClassName = _concatInstanceProperty(_context8 = ".".concat(prefixcls, "-option:nth-child(")).call(_context8, index, ")");
298
299
  }
299
300
 
300
- let destNode = document.querySelector(_concatInstanceProperty(_context10 = _concatInstanceProperty(_context11 = "#".concat(prefixcls, "-")).call(_context11, this.selectOptionListID, " ")).call(_context10, optionClassName));
301
+ let destNode = document.querySelector(_concatInstanceProperty(_context9 = _concatInstanceProperty(_context10 = "#".concat(prefixcls, "-")).call(_context10, this.selectOptionListID, " ")).call(_context9, optionClassName));
301
302
 
302
303
  if (_Array$isArray(destNode)) {
303
304
  // eslint-disable-next-line prefer-destructuring
@@ -318,6 +319,7 @@ class Select extends BaseComponent {
318
319
 
319
320
  componentDidMount() {
320
321
  this.foundation.init();
322
+ this.selectOptionListID = getUuidShort();
321
323
  }
322
324
 
323
325
  componentWillUnmount() {
@@ -325,11 +327,11 @@ class Select extends BaseComponent {
325
327
  }
326
328
 
327
329
  componentDidUpdate(prevProps, prevState) {
328
- var _context12, _context13;
330
+ var _context11, _context12;
329
331
 
330
- const prevChildrenKeys = _mapInstanceProperty(_context12 = React.Children.toArray(prevProps.children)).call(_context12, child => child.key);
332
+ const prevChildrenKeys = _mapInstanceProperty(_context11 = React.Children.toArray(prevProps.children)).call(_context11, child => child.key);
331
333
 
332
- const nowChildrenKeys = _mapInstanceProperty(_context13 = React.Children.toArray(this.props.children)).call(_context13, child => child.key);
334
+ const nowChildrenKeys = _mapInstanceProperty(_context12 = React.Children.toArray(this.props.children)).call(_context12, child => child.key);
333
335
 
334
336
  let isOptionsChanged = false;
335
337
 
@@ -575,7 +577,7 @@ class Select extends BaseComponent {
575
577
  }
576
578
 
577
579
  renderOptions(children) {
578
- var _context14;
580
+ var _context13;
579
581
 
580
582
  const {
581
583
  dropdownMinWidth,
@@ -613,7 +615,7 @@ class Select extends BaseComponent {
613
615
  });
614
616
  const isEmpty = !options.length || !_someInstanceProperty(options).call(options, item => item._show);
615
617
  return /*#__PURE__*/React.createElement("div", {
616
- id: _concatInstanceProperty(_context14 = "".concat(prefixcls, "-")).call(_context14, this.selectOptionListID),
618
+ id: _concatInstanceProperty(_context13 = "".concat(prefixcls, "-")).call(_context13, this.selectOptionListID),
617
619
  className: dropdownClassName,
618
620
  style: style
619
621
  }, outerTopSlot, /*#__PURE__*/React.createElement("div", {
@@ -847,7 +849,7 @@ class Select extends BaseComponent {
847
849
  }
848
850
 
849
851
  renderSelection() {
850
- var _context15;
852
+ var _context14;
851
853
 
852
854
  const {
853
855
  disabled,
@@ -931,7 +933,7 @@ class Select extends BaseComponent {
931
933
  role: "combobox",
932
934
  "aria-disabled": disabled,
933
935
  "aria-expanded": isOpen,
934
- "aria-controls": _concatInstanceProperty(_context15 = "".concat(prefixcls, "-")).call(_context15, this.selectOptionListID),
936
+ "aria-controls": _concatInstanceProperty(_context14 = "".concat(prefixcls, "-")).call(_context14, this.selectOptionListID),
935
937
  "aria-haspopup": "listbox",
936
938
  "aria-label": "select value",
937
939
  "aria-invalid": this.props['aria-invalid'],
@@ -113,6 +113,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
113
113
  get adapter(): TableRowAdapter<BaseRowProps>;
114
114
  ref: React.MutableRefObject<any>;
115
115
  constructor(props: BaseRowProps);
116
+ componentDidMount(): void;
116
117
  shouldComponentUpdate(nextProps: BaseRowProps): boolean;
117
118
  _cacheNode: (node: any) => void;
118
119
  renderExpandIcon: (record: Record<string, any>) => React.ReactNode;
@@ -103,6 +103,28 @@ export default class TableRow extends BaseComponent {
103
103
  });
104
104
  }
105
105
 
106
+ componentDidMount() {
107
+ // fix #745
108
+ // didmount/willUnmount may be called twice when React.StrictMode is true in React 18, we need to ensure that this.cache.customRowProps is correct
109
+ const {
110
+ onRow,
111
+ index,
112
+ record
113
+ } = this.props;
114
+ const customRowProps = this.adapter.getCache('customRowProps');
115
+
116
+ if (typeof customRowProps === 'undefined') {
117
+ const _a = onRow(record, index) || {},
118
+ {
119
+ className: customClassName,
120
+ style: customStyle
121
+ } = _a,
122
+ rowProps = __rest(_a, ["className", "style"]);
123
+
124
+ this.adapter.setCache('customRowProps', _Object$assign({}, rowProps));
125
+ }
126
+ }
127
+
106
128
  shouldComponentUpdate(nextProps) {
107
129
  /**
108
130
  * Shallow comparison of incoming props to simulate PureComponent
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Fixed, TableComponents, Scroll, BodyScrollEvent, ColumnProps } from './interface';
2
+ import { Fixed, TableComponents, Scroll, BodyScrollEvent, ColumnProps, OnHeaderRow } from './interface';
3
3
  export interface HeadTableProps {
4
4
  [x: string]: any;
5
5
  anyColumnFixed?: boolean;
@@ -15,6 +15,7 @@ export interface HeadTableProps {
15
15
  selectedRowKeysSet: Set<any>;
16
16
  showHeader?: boolean;
17
17
  onDidUpdate?: (ref: React.MutableRefObject<any>) => void;
18
+ onHeaderRow?: OnHeaderRow<any>;
18
19
  }
19
20
  declare const _default: React.ForwardRefExoticComponent<Pick<HeadTableProps, keyof HeadTableProps> & React.RefAttributes<HTMLDivElement>>;
20
21
  export default _default;
@@ -96,7 +96,8 @@ HeadTable.propTypes = {
96
96
  }),
97
97
  selectedRowKeysSet: PropTypes.instanceOf(_Set).isRequired,
98
98
  showHeader: PropTypes.bool,
99
- onDidUpdate: PropTypes.func
99
+ onDidUpdate: PropTypes.func,
100
+ onHeaderRow: PropTypes.func
100
101
  };
101
102
  HeadTable.defaultProps = {
102
103
  handleBodyScroll: _noop
@@ -658,6 +658,7 @@ class Table extends BaseComponent {
658
658
  components,
659
659
  headerRef,
660
660
  bodyRef,
661
+ onHeaderRow,
661
662
  rowSelection,
662
663
  dataSource,
663
664
  bodyHasScrollBar,
@@ -678,6 +679,7 @@ class Table extends BaseComponent {
678
679
  scroll: scroll,
679
680
  showHeader: showHeader,
680
681
  selectedRowKeysSet: selectedRowKeysSet,
682
+ onHeaderRow: onHeaderRow,
681
683
  dataSource: dataSource,
682
684
  bodyHasScrollBar: bodyHasScrollBar
683
685
  }) : null;