@douyinfe/semi-ui 2.51.4 → 2.52.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.
Files changed (65) hide show
  1. package/dist/css/semi.css +285 -0
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +488 -214
  4. package/dist/umd/semi-ui.js.map +1 -1
  5. package/dist/umd/semi-ui.min.js +1 -1
  6. package/dist/umd/semi-ui.min.js.map +1 -1
  7. package/lib/cjs/_utils/index.d.ts +2 -1
  8. package/lib/cjs/_utils/index.js +0 -5
  9. package/lib/cjs/avatar/TopSlotSvg.d.ts +5 -0
  10. package/lib/cjs/avatar/TopSlotSvg.js +74 -0
  11. package/lib/cjs/avatar/index.d.ts +25 -0
  12. package/lib/cjs/avatar/index.js +126 -8
  13. package/lib/cjs/avatar/interface.d.ts +24 -1
  14. package/lib/cjs/cascader/index.d.ts +2 -3
  15. package/lib/cjs/cascader/index.js +19 -28
  16. package/lib/cjs/datePicker/datePicker.js +1 -1
  17. package/lib/cjs/datePicker/yearAndMonth.js +16 -20
  18. package/lib/cjs/dropdown/dropdownItem.js +2 -1
  19. package/lib/cjs/form/hoc/withField.d.ts +3 -3
  20. package/lib/cjs/input/index.d.ts +1 -0
  21. package/lib/cjs/input/index.js +12 -4
  22. package/lib/cjs/modal/Modal.d.ts +1 -0
  23. package/lib/cjs/modal/Modal.js +13 -5
  24. package/lib/cjs/modal/confirm.d.ts +5 -0
  25. package/lib/cjs/select/option.js +1 -2
  26. package/lib/cjs/slider/index.js +33 -1
  27. package/lib/cjs/table/ColumnFilter.d.ts +34 -18
  28. package/lib/cjs/table/ColumnFilter.js +134 -73
  29. package/lib/cjs/table/ResizableTable.js +1 -1
  30. package/lib/cjs/table/Table.d.ts +5 -5
  31. package/lib/cjs/table/Table.js +38 -13
  32. package/lib/cjs/table/index.d.ts +1 -1
  33. package/lib/cjs/table/interface.d.ts +30 -10
  34. package/lib/cjs/treeSelect/index.d.ts +2 -0
  35. package/lib/cjs/treeSelect/index.js +4 -0
  36. package/lib/es/_utils/index.d.ts +2 -1
  37. package/lib/es/_utils/index.js +0 -5
  38. package/lib/es/avatar/TopSlotSvg.d.ts +5 -0
  39. package/lib/es/avatar/TopSlotSvg.js +66 -0
  40. package/lib/es/avatar/index.d.ts +25 -0
  41. package/lib/es/avatar/index.js +126 -8
  42. package/lib/es/avatar/interface.d.ts +24 -1
  43. package/lib/es/cascader/index.d.ts +2 -3
  44. package/lib/es/cascader/index.js +19 -28
  45. package/lib/es/datePicker/datePicker.js +1 -1
  46. package/lib/es/datePicker/yearAndMonth.js +16 -20
  47. package/lib/es/dropdown/dropdownItem.js +2 -1
  48. package/lib/es/form/hoc/withField.d.ts +3 -3
  49. package/lib/es/input/index.d.ts +1 -0
  50. package/lib/es/input/index.js +12 -4
  51. package/lib/es/modal/Modal.d.ts +1 -0
  52. package/lib/es/modal/Modal.js +13 -5
  53. package/lib/es/modal/confirm.d.ts +5 -0
  54. package/lib/es/select/option.js +1 -2
  55. package/lib/es/slider/index.js +33 -1
  56. package/lib/es/table/ColumnFilter.d.ts +34 -18
  57. package/lib/es/table/ColumnFilter.js +135 -74
  58. package/lib/es/table/ResizableTable.js +1 -1
  59. package/lib/es/table/Table.d.ts +5 -5
  60. package/lib/es/table/Table.js +38 -13
  61. package/lib/es/table/index.d.ts +1 -1
  62. package/lib/es/table/interface.d.ts +30 -10
  63. package/lib/es/treeSelect/index.d.ts +2 -0
  64. package/lib/es/treeSelect/index.js +4 -0
  65. package/package.json +8 -8
@@ -36,7 +36,6 @@ exports.destroyFns = destroyFns;
36
36
  class Modal extends _baseComponent.default {
37
37
  constructor(props) {
38
38
  super(props);
39
- this.bodyOverflow = null;
40
39
  this.handleCancel = e => {
41
40
  this.foundation.handleCancel(e);
42
41
  };
@@ -56,7 +55,8 @@ class Modal extends _baseComponent.default {
56
55
  cancelText,
57
56
  confirmLoading,
58
57
  cancelLoading,
59
- hasCancel
58
+ hasCancel,
59
+ footerFill
60
60
  } = this.props;
61
61
  const getCancelButton = locale => {
62
62
  if (!hasCancel) {
@@ -67,6 +67,7 @@ class Modal extends _baseComponent.default {
67
67
  onClick: this.handleCancel,
68
68
  loading: cancelLoading === undefined ? this.state.onCancelReturnPromiseStatus === "pending" : cancelLoading,
69
69
  type: "tertiary",
70
+ block: footerFill,
70
71
  autoFocus: true
71
72
  }, this.props.cancelButtonProps, {
72
73
  "x-semi-children-alias": "cancelText"
@@ -75,10 +76,15 @@ class Modal extends _baseComponent.default {
75
76
  };
76
77
  return /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
77
78
  componentName: "Modal"
78
- }, (locale, localeCode) => /*#__PURE__*/_react.default.createElement("div", null, getCancelButton(locale), /*#__PURE__*/_react.default.createElement(_button.default, Object.assign({
79
+ }, (locale, localeCode) => /*#__PURE__*/_react.default.createElement("div", {
80
+ className: (0, _classnames.default)({
81
+ [`${_constants.cssClasses.DIALOG}-footerfill`]: footerFill
82
+ })
83
+ }, getCancelButton(locale), /*#__PURE__*/_react.default.createElement(_button.default, Object.assign({
79
84
  "aria-label": "confirm",
80
85
  type: okType,
81
86
  theme: "solid",
87
+ block: footerFill,
82
88
  loading: confirmLoading === undefined ? this.state.onOKReturnPromiseStatus === "pending" : confirmLoading,
83
89
  onClick: this.handleOk
84
90
  }, this.props.okButtonProps, {
@@ -176,6 +182,7 @@ class Modal extends _baseComponent.default {
176
182
  };
177
183
  this.foundation = new _modalFoundation.default(this.adapter);
178
184
  this.modalRef = /*#__PURE__*/_react.default.createRef();
185
+ this.bodyOverflow = '';
179
186
  this.scrollBarWidth = 0;
180
187
  this.originBodyWidth = '100%';
181
188
  }
@@ -196,7 +203,7 @@ class Modal extends _baseComponent.default {
196
203
  const {
197
204
  getPopupContainer
198
205
  } = this.props;
199
- if (!getPopupContainer && this.bodyOverflow !== null && this.bodyOverflow !== 'hidden') {
206
+ if (!getPopupContainer && this.bodyOverflow !== 'hidden') {
200
207
  document.body.style.overflow = this.bodyOverflow;
201
208
  document.body.style.width = this.originBodyWidth;
202
209
  }
@@ -311,7 +318,8 @@ Modal.propTypes = {
311
318
  keepDOM: _propTypes.default.bool,
312
319
  lazyRender: _propTypes.default.bool,
313
320
  direction: _propTypes.default.oneOf(_constants.strings.directions),
314
- fullScreen: _propTypes.default.bool
321
+ fullScreen: _propTypes.default.bool,
322
+ footerFill: _propTypes.default.bool
315
323
  };
316
324
  Modal.defaultProps = {
317
325
  zIndex: 1000,
@@ -51,6 +51,7 @@ export declare function withInfo(props: ModalReactProps): {
51
51
  direction?: any;
52
52
  fullScreen?: boolean;
53
53
  preventScroll?: boolean;
54
+ footerFill?: boolean;
54
55
  type: "info";
55
56
  };
56
57
  export declare function withSuccess(props: ModalReactProps): {
@@ -94,6 +95,7 @@ export declare function withSuccess(props: ModalReactProps): {
94
95
  direction?: any;
95
96
  fullScreen?: boolean;
96
97
  preventScroll?: boolean;
98
+ footerFill?: boolean;
97
99
  type: "success";
98
100
  };
99
101
  export declare function withWarning(props: ModalReactProps): {
@@ -137,6 +139,7 @@ export declare function withWarning(props: ModalReactProps): {
137
139
  direction?: any;
138
140
  fullScreen?: boolean;
139
141
  preventScroll?: boolean;
142
+ footerFill?: boolean;
140
143
  type: "warning";
141
144
  };
142
145
  export declare function withError(props: ModalReactProps): {
@@ -179,6 +182,7 @@ export declare function withError(props: ModalReactProps): {
179
182
  onOk?: (e: React.MouseEvent<Element, MouseEvent>) => void | Promise<any>;
180
183
  lazyRender?: boolean;
181
184
  fullScreen?: boolean;
185
+ footerFill?: boolean;
182
186
  type: "error";
183
187
  okButtonProps: {
184
188
  id?: string;
@@ -506,5 +510,6 @@ export declare function withConfirm(props: ModalReactProps): {
506
510
  direction?: any;
507
511
  fullScreen?: boolean;
508
512
  preventScroll?: boolean;
513
+ footerFill?: boolean;
509
514
  type: "confirm";
510
515
  };
@@ -110,8 +110,7 @@ class Option extends _react.PureComponent {
110
110
  value,
111
111
  label,
112
112
  children
113
- }, rest), e),
114
- className
113
+ }, rest), e)
115
114
  }, rest));
116
115
  }
117
116
  const config = {
@@ -35,6 +35,7 @@ class Slider extends _baseComponent.default {
35
35
  constructor(props) {
36
36
  super(props);
37
37
  this.renderHandle = () => {
38
+ var _a, _b, _c, _d, _e, _f, _g, _h;
38
39
  const {
39
40
  vertical,
40
41
  range,
@@ -133,6 +134,14 @@ class Slider extends _baseComponent.default {
133
134
  "aria-valuenow": currentValue,
134
135
  "aria-valuemax": max,
135
136
  "aria-valuemin": min
137
+ }), this.props.handleDot && /*#__PURE__*/_react.default.createElement("div", {
138
+ className: _constants.cssClasses.HANDLE_DOT,
139
+ style: Object.assign(Object.assign({}, ((_a = this.props.handleDot) === null || _a === void 0 ? void 0 : _a.size) ? {
140
+ width: this.props.handleDot.size,
141
+ height: this.props.handleDot.size
142
+ } : {}), ((_b = this.props.handleDot) === null || _b === void 0 ? void 0 : _b.color) ? {
143
+ backgroundColor: this.props.handleDot.color
144
+ } : {})
136
145
  }))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_index.default, {
137
146
  content: tipChildren.min,
138
147
  position: "top",
@@ -184,6 +193,14 @@ class Slider extends _baseComponent.default {
184
193
  "aria-valuenow": currentValue[0],
185
194
  "aria-valuemax": currentValue[1],
186
195
  "aria-valuemin": min
196
+ }), ((_c = this.props.handleDot) === null || _c === void 0 ? void 0 : _c[0]) && /*#__PURE__*/_react.default.createElement("div", {
197
+ className: _constants.cssClasses.HANDLE_DOT,
198
+ style: Object.assign(Object.assign({}, ((_d = this.props.handleDot[0]) === null || _d === void 0 ? void 0 : _d.size) ? {
199
+ width: this.props.handleDot[0].size,
200
+ height: this.props.handleDot[0].size
201
+ } : {}), ((_e = this.props.handleDot[0]) === null || _e === void 0 ? void 0 : _e.color) ? {
202
+ backgroundColor: this.props.handleDot[0].color
203
+ } : {})
187
204
  }))), /*#__PURE__*/_react.default.createElement(_index.default, {
188
205
  content: tipChildren.max,
189
206
  position: "top",
@@ -235,6 +252,14 @@ class Slider extends _baseComponent.default {
235
252
  "aria-valuenow": currentValue[1],
236
253
  "aria-valuemax": max,
237
254
  "aria-valuemin": currentValue[0]
255
+ }), ((_f = this.props.handleDot) === null || _f === void 0 ? void 0 : _f[1]) && /*#__PURE__*/_react.default.createElement("div", {
256
+ className: _constants.cssClasses.HANDLE_DOT,
257
+ style: Object.assign(Object.assign({}, ((_g = this.props.handleDot[1]) === null || _g === void 0 ? void 0 : _g.size) ? {
258
+ width: this.props.handleDot[1].size,
259
+ height: this.props.handleDot[1].size
260
+ } : {}), ((_h = this.props.handleDot[1]) === null || _h === void 0 ? void 0 : _h.color) ? {
261
+ backgroundColor: this.props.handleDot[1].color
262
+ } : {})
238
263
  }))));
239
264
  return handleContents;
240
265
  };
@@ -652,7 +677,14 @@ Slider.propTypes = {
652
677
  showBoundary: _propTypes.default.bool,
653
678
  railStyle: _propTypes.default.object,
654
679
  verticalReverse: _propTypes.default.bool,
655
- getAriaValueText: _propTypes.default.func
680
+ getAriaValueText: _propTypes.default.func,
681
+ handleDot: _propTypes.default.oneOfType([_propTypes.default.shape({
682
+ size: _propTypes.default.string,
683
+ color: _propTypes.default.string
684
+ }), _propTypes.default.arrayOf(_propTypes.default.shape({
685
+ size: _propTypes.default.string,
686
+ color: _propTypes.default.string
687
+ }))])
656
688
  };
657
689
  Slider.defaultProps = {
658
690
  // allowClear: false,
@@ -1,34 +1,50 @@
1
1
  import React from 'react';
2
2
  import { DropdownProps } from '../dropdown';
3
- import { Trigger, Position } from '../tooltip';
4
3
  import { FilterIcon, Filter, OnFilterDropdownVisibleChange, RenderFilterDropdownItem } from './interface';
5
- export interface ColumnFilterProps {
4
+ export default function ColumnFilter(props?: ColumnFilterProps): React.ReactElement;
5
+ export interface ColumnFilterProps extends Omit<RenderDropdownProps, keyof RenderFilterDropdownProps> {
6
6
  prefixCls?: string;
7
7
  filteredValue?: any[];
8
8
  filterIcon?: FilterIcon;
9
9
  filterDropdown?: React.ReactElement;
10
- renderFilterDropdown?: (props: RenderDropdownProps, options: {
11
- iconElem: React.ReactNode;
12
- }) => React.ReactElement;
13
- filterDropdownProps?: DropdownProps;
14
- onFilterDropdownVisibleChange?: OnFilterDropdownVisibleChange;
15
- onSelect?: (data: OnSelectData) => void;
16
- }
17
- export default function ColumnFilter(props?: ColumnFilterProps): React.ReactElement;
18
- export interface OnSelectData {
19
- value: any;
20
- filteredValue: any;
21
- included: boolean;
22
- domEvent: React.MouseEvent<HTMLElement>;
10
+ filterDropdownProps?: FilterDropdownProps;
11
+ filters?: Filter[];
23
12
  }
24
- export interface RenderDropdownProps {
13
+ export interface RenderDropdownProps extends FilterDropdownProps, RenderFilterDropdownProps {
25
14
  filterMultiple?: boolean;
26
15
  filters?: Filter[];
27
16
  filteredValue?: any[];
28
17
  filterDropdownVisible?: boolean;
29
18
  onSelect?: (data: OnSelectData) => void;
30
19
  onFilterDropdownVisibleChange?: OnFilterDropdownVisibleChange;
31
- trigger?: Trigger;
32
- position?: Position;
20
+ renderFilterDropdown?: (props?: RenderFilterDropdownProps) => React.ReactNode;
33
21
  renderFilterDropdownItem?: RenderFilterDropdownItem;
34
22
  }
23
+ export interface FilterDropdownProps extends Omit<DropdownProps, 'render' | 'onVisibleChange'> {
24
+ }
25
+ export interface OnSelectData {
26
+ value?: any;
27
+ /** only this value is used now */
28
+ filteredValue: any;
29
+ included?: boolean;
30
+ domEvent?: React.MouseEvent<HTMLElement>;
31
+ }
32
+ export interface RenderFilterDropdownProps {
33
+ /** temporary filteredValue */
34
+ tempFilteredValue: any[];
35
+ /** set temporary filteredValue */
36
+ setTempFilteredValue: (tempFilteredValue: any[]) => void;
37
+ /** set tempFilteredValue to filteredValue. You can also pass filteredValue to directly set the filteredValue */
38
+ confirm: (props?: {
39
+ closeDropdown?: boolean;
40
+ filteredValue?: any[];
41
+ }) => void;
42
+ /** clear tempFilteredValue and filteredValue */
43
+ clear: (props?: {
44
+ closeDropdown?: boolean;
45
+ }) => void;
46
+ /** close dropdown */
47
+ close: () => void;
48
+ /** column filters */
49
+ filters?: RenderDropdownProps['filters'];
50
+ }
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = ColumnFilter;
7
+ var _pick2 = _interopRequireDefault(require("lodash/pick"));
7
8
  var _noop2 = _interopRequireDefault(require("lodash/noop"));
9
+ var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
8
10
  var _react = _interopRequireWildcard(require("react"));
9
11
  var _classnames = _interopRequireDefault(require("classnames"));
10
12
  var _semiIcons = require("@douyinfe/semi-icons");
@@ -15,8 +17,7 @@ var _checkbox = require("../checkbox");
15
17
  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); }
16
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
- function renderDropdown() {
19
- let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
20
+ function renderDropdown(props) {
20
21
  let nestedElem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
21
22
  let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
22
23
  const {
@@ -28,77 +29,80 @@ function renderDropdown() {
28
29
  onFilterDropdownVisibleChange = _noop2.default,
29
30
  trigger = 'click',
30
31
  position = 'bottom',
32
+ renderFilterDropdown,
31
33
  renderFilterDropdownItem
32
- } = props;
34
+ } = props !== null && props !== void 0 ? props : {};
35
+ const renderFilterDropdownProps = (0, _pick2.default)(props, ['tempFilteredValue', 'setTempFilteredValue', 'confirm', 'clear', 'close', 'filters']);
36
+ const render = typeof renderFilterDropdown === 'function' ? renderFilterDropdown(renderFilterDropdownProps) : /*#__PURE__*/_react.default.createElement(_dropdown.default.Menu, null, Array.isArray(filters) && filters.map((filter, index) => {
37
+ const changeFn = e => {
38
+ const domEvent = e && e.nativeEvent;
39
+ if (domEvent) {
40
+ // Block this event to prevent the pop-up layer from closing
41
+ domEvent.stopImmediatePropagation();
42
+ // Prevent bubbling and default events to prevent label click events from triggering twice
43
+ domEvent.stopPropagation();
44
+ domEvent.preventDefault();
45
+ }
46
+ let values = [...filteredValue];
47
+ const included = values.includes(filter.value);
48
+ const idx = values.indexOf(filter.value);
49
+ if (idx > -1) {
50
+ values.splice(idx, 1);
51
+ } else if (filterMultiple) {
52
+ values.push(filter.value);
53
+ } else {
54
+ values = [filter.value];
55
+ }
56
+ return onSelect({
57
+ value: filter.value,
58
+ filteredValue: values,
59
+ included: !included,
60
+ domEvent
61
+ });
62
+ };
63
+ const checked = filteredValue.includes(filter.value);
64
+ const {
65
+ text
66
+ } = filter;
67
+ const {
68
+ value
69
+ } = filter;
70
+ const key = `${level}_${index}`;
71
+ const dropdownItem = typeof renderFilterDropdownItem === 'function' ? renderFilterDropdownItem({
72
+ onChange: changeFn,
73
+ filterMultiple,
74
+ value,
75
+ text,
76
+ checked,
77
+ filteredValue,
78
+ level
79
+ }) : null;
80
+ let item = dropdownItem && /*#__PURE__*/_react.default.isValidElement(dropdownItem) ? /*#__PURE__*/_react.default.cloneElement(dropdownItem, {
81
+ key
82
+ }) : /*#__PURE__*/_react.default.createElement(_dropdown.default.Item, {
83
+ key: key,
84
+ onClick: changeFn
85
+ }, filterMultiple ? /*#__PURE__*/_react.default.createElement(_checkbox.Checkbox, {
86
+ checked: checked
87
+ }, text) : /*#__PURE__*/_react.default.createElement(_radio.Radio, {
88
+ checked: checked
89
+ }, text));
90
+ if (Array.isArray(filter.children) && filter.children.length) {
91
+ const childrenDropdownProps = Object.assign(Object.assign({}, props), {
92
+ filters: filter.children,
93
+ trigger: 'hover',
94
+ position: 'right'
95
+ });
96
+ delete childrenDropdownProps.filterDropdownVisible;
97
+ item = renderDropdown(childrenDropdownProps, item, level + 1);
98
+ }
99
+ return item;
100
+ }));
33
101
  const dropdownProps = Object.assign(Object.assign({}, props), {
34
102
  onVisibleChange: visible => onFilterDropdownVisibleChange(visible),
35
103
  trigger,
36
104
  position,
37
- render: /*#__PURE__*/_react.default.createElement(_dropdown.default.Menu, null, Array.isArray(filters) && filters.map((filter, index) => {
38
- const changeFn = e => {
39
- const domEvent = e && e.nativeEvent;
40
- if (domEvent) {
41
- // Block this event to prevent the pop-up layer from closing
42
- domEvent.stopImmediatePropagation();
43
- // Prevent bubbling and default events to prevent label click events from triggering twice
44
- domEvent.stopPropagation();
45
- domEvent.preventDefault();
46
- }
47
- let values = [...filteredValue];
48
- const included = values.includes(filter.value);
49
- const idx = values.indexOf(filter.value);
50
- if (idx > -1) {
51
- values.splice(idx, 1);
52
- } else if (filterMultiple) {
53
- values.push(filter.value);
54
- } else {
55
- values = [filter.value];
56
- }
57
- return onSelect({
58
- value: filter.value,
59
- filteredValue: values,
60
- included: !included,
61
- domEvent
62
- });
63
- };
64
- const checked = filteredValue.includes(filter.value);
65
- const {
66
- text
67
- } = filter;
68
- const {
69
- value
70
- } = filter;
71
- const key = `${level}_${index}`;
72
- const dropdownItem = typeof renderFilterDropdownItem === 'function' ? renderFilterDropdownItem({
73
- onChange: changeFn,
74
- filterMultiple,
75
- value,
76
- text,
77
- checked,
78
- filteredValue,
79
- level
80
- }) : null;
81
- let item = dropdownItem && /*#__PURE__*/_react.default.isValidElement(dropdownItem) ? /*#__PURE__*/_react.default.cloneElement(dropdownItem, {
82
- key
83
- }) : /*#__PURE__*/_react.default.createElement(_dropdown.default.Item, {
84
- key: key,
85
- onClick: changeFn
86
- }, filterMultiple ? /*#__PURE__*/_react.default.createElement(_checkbox.Checkbox, {
87
- checked: checked
88
- }, text) : /*#__PURE__*/_react.default.createElement(_radio.Radio, {
89
- checked: checked
90
- }, text));
91
- if (Array.isArray(filter.children) && filter.children.length) {
92
- const childrenDropdownProps = Object.assign(Object.assign({}, props), {
93
- filters: filter.children,
94
- trigger: 'hover',
95
- position: 'right'
96
- });
97
- delete childrenDropdownProps.filterDropdownVisible;
98
- item = renderDropdown(childrenDropdownProps, item, level + 1);
99
- }
100
- return item;
101
- }))
105
+ render
102
106
  });
103
107
  if (filterDropdownVisible != null) {
104
108
  dropdownProps.visible = filterDropdownVisible;
@@ -114,12 +118,68 @@ function ColumnFilter() {
114
118
  prefixCls = _constants.cssClasses.PREFIX,
115
119
  filteredValue,
116
120
  filterIcon = 'filter',
121
+ filterDropdownProps,
122
+ onSelect,
123
+ filterDropdownVisible,
117
124
  renderFilterDropdown,
118
- filterDropdownProps
125
+ onFilterDropdownVisibleChange
119
126
  } = props;
120
127
  let {
121
128
  filterDropdown = null
122
129
  } = props;
130
+ // custom filter related status
131
+ const isFilterDropdownVisibleControlled = typeof filterDropdownVisible !== 'undefined';
132
+ const isCustomFilterDropdown = typeof renderFilterDropdown === 'function';
133
+ const isCustomDropdownVisible = !isFilterDropdownVisibleControlled && isCustomFilterDropdown;
134
+ const [tempFilteredValue, setTempFilteredValue] = (0, _react.useState)(filteredValue);
135
+ const dropdownVisibleInitValue = isCustomDropdownVisible ? false : filterDropdownVisible;
136
+ const [dropdownVisible, setDropdownVisible] = (0, _react.useState)(dropdownVisibleInitValue);
137
+ (0, _react.useEffect)(() => {
138
+ if (typeof filterDropdownVisible !== 'undefined') {
139
+ setDropdownVisible(filterDropdownVisible);
140
+ }
141
+ }, [filterDropdownVisible]);
142
+ (0, _react.useEffect)(() => {
143
+ setTempFilteredValue(filteredValue);
144
+ }, [filteredValue]);
145
+ const confirm = function () {
146
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
147
+ const newFilteredValue = (props === null || props === void 0 ? void 0 : props.filteredValue) || tempFilteredValue;
148
+ if (!(0, _isEqual2.default)(newFilteredValue, filteredValue)) {
149
+ onSelect({
150
+ filteredValue: newFilteredValue
151
+ });
152
+ }
153
+ if (props.closeDropdown) {
154
+ setDropdownVisible(false);
155
+ }
156
+ };
157
+ const clear = function () {
158
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
159
+ setTempFilteredValue([]);
160
+ onSelect({
161
+ filteredValue: []
162
+ });
163
+ if (props.closeDropdown) {
164
+ setDropdownVisible(false);
165
+ }
166
+ };
167
+ const close = () => {
168
+ setDropdownVisible(false);
169
+ };
170
+ const handleFilterDropdownVisibleChange = visible => {
171
+ if (isCustomDropdownVisible) {
172
+ setDropdownVisible(visible);
173
+ }
174
+ onFilterDropdownVisibleChange(visible);
175
+ };
176
+ const renderFilterDropdownProps = {
177
+ tempFilteredValue,
178
+ setTempFilteredValue,
179
+ confirm,
180
+ clear,
181
+ close
182
+ };
123
183
  const finalCls = (0, _classnames.default)(`${prefixCls}-column-filter`, {
124
184
  on: Array.isArray(filteredValue) && filteredValue.length
125
185
  });
@@ -139,9 +199,10 @@ function ColumnFilter() {
139
199
  size: "default"
140
200
  }));
141
201
  }
142
- const renderProps = Object.assign(Object.assign({}, props), filterDropdownProps);
143
- filterDropdown = /*#__PURE__*/_react.default.isValidElement(filterDropdown) ? filterDropdown : typeof renderFilterDropdown === 'function' ? renderFilterDropdown(renderProps, {
144
- iconElem
145
- }) : renderDropdown(renderProps, iconElem);
202
+ const renderProps = Object.assign(Object.assign(Object.assign(Object.assign({}, props), filterDropdownProps), renderFilterDropdownProps), {
203
+ filterDropdownVisible: isFilterDropdownVisibleControlled ? filterDropdownVisible : dropdownVisible,
204
+ onFilterDropdownVisibleChange: handleFilterDropdownVisibleChange
205
+ });
206
+ filterDropdown = /*#__PURE__*/_react.default.isValidElement(filterDropdown) ? filterDropdown : renderDropdown(renderProps, iconElem);
146
207
  return filterDropdown;
147
208
  }
@@ -67,7 +67,7 @@ const ResizableTable = function () {
67
67
  width: _constants.numbers.DEFAULT_WIDTH_COLUMN_EXPAND
68
68
  });
69
69
  }
70
- if (props.rowSelection && !(0, _get2.default)(props.rowSelection, 'hidden') && !(0, _find2.default)(rawColumns, item => item.key === _constants.strings.DEFAULT_KEY_COLUMN_SELECTION)) {
70
+ if (props.rowSelection && !(0, _find2.default)(rawColumns, item => item.key === _constants.strings.DEFAULT_KEY_COLUMN_SELECTION)) {
71
71
  newColumns.unshift({
72
72
  width: (0, _get2.default)(props, 'rowSelection.width', _constants.numbers.DEFAULT_WIDTH_COLUMN_SELECTION),
73
73
  key: _constants.strings.DEFAULT_KEY_COLUMN_SELECTION
@@ -1,7 +1,7 @@
1
1
  import React, { ReactNode } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import Store from '@douyinfe/semi-foundation/lib/cjs/utils/Store';
4
- import TableFoundation, { TableAdapter, BaseRowKeyType, BaseHeadWidth } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
4
+ import TableFoundation, { TableAdapter, BasePageData, BaseRowKeyType, BaseHeadWidth } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
5
5
  import { TableSelectionCellEvent } from '@douyinfe/semi-foundation/lib/cjs/table/tableSelectionCellFoundation';
6
6
  import { strings } from '@douyinfe/semi-foundation/lib/cjs/table/constants';
7
7
  import '@douyinfe/semi-foundation/lib/cjs/table/table.css';
@@ -185,7 +185,7 @@ declare class Table<RecordType extends Record<string, any>> extends BaseComponen
185
185
  _invokeRowSelection: (funcName: string, ...args: any[]) => void;
186
186
  _invokeColumnFn: (key: string, funcName: string, ...args: any[]) => void;
187
187
  _cacheHeaderRef: (node: HTMLDivElement) => void;
188
- getCurrentPageData: () => any;
188
+ getCurrentPageData: () => Pick<BasePageData<RecordType>, "dataSource" | "groups">;
189
189
  getColumns: (columns: ColumnProps<RecordType>[], children: ReactNode) => ColumnProps<RecordType>[];
190
190
  getCellWidths: (...args: any[]) => number[];
191
191
  setHeadWidths: (...args: any[]) => void;
@@ -200,8 +200,8 @@ declare class Table<RecordType extends Record<string, any>> extends BaseComponen
200
200
  setScrollPosition: (position: BodyScrollPosition) => void;
201
201
  setScrollPositionClassName: () => void;
202
202
  syncTableWidth: () => void;
203
- renderSelection: (record?: any, inHeader?: boolean) => React.ReactNode;
204
- renderRowSelectionCallback: (text: string, record?: RecordType) => React.ReactNode;
203
+ renderSelection: (record?: any, inHeader?: boolean, index?: number) => React.ReactNode;
204
+ renderRowSelectionCallback: (text: string, record: RecordType, index: number) => React.ReactNode;
205
205
  renderTitleSelectionCallback: () => React.ReactNode;
206
206
  normalizeSelectionColumn: (props?: {
207
207
  rowSelection?: TableStateRowSelection<RecordType>;
@@ -283,7 +283,7 @@ declare class Table<RecordType extends Record<string, any>> extends BaseComponen
283
283
  * @param {ReactNode} children
284
284
  * @returns {Array}
285
285
  */
286
- normalizeColumns: (columns: ColumnProps<RecordType>[], children: ReactNode) => any;
286
+ normalizeColumns: (columns: ColumnProps<RecordType>[], children: ReactNode) => ColumnProps<RecordType>[];
287
287
  /**
288
288
  * Combine pagination and table paging processing functions
289
289
  */
@@ -478,6 +478,7 @@ class Table extends _baseComponent.default {
478
478
  this.renderSelection = function () {
479
479
  let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
480
480
  let inHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
481
+ let index = arguments.length > 2 ? arguments[2] : undefined;
481
482
  const {
482
483
  rowSelection,
483
484
  allDisabledRowKeysSet
@@ -487,43 +488,67 @@ class Table extends _baseComponent.default {
487
488
  selectedRowKeys = [],
488
489
  selectedRowKeysSet = new Set(),
489
490
  getCheckboxProps,
490
- disabled
491
+ disabled,
492
+ renderCell
491
493
  } = rowSelection;
494
+ const allRowKeys = _this2.cachedFilteredSortedRowKeys;
495
+ const allRowKeysSet = _this2.cachedFilteredSortedRowKeysSet;
496
+ const allIsSelected = _this2.foundation.allIsSelected(selectedRowKeysSet, allDisabledRowKeysSet, allRowKeys);
497
+ const hasRowSelected = _this2.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
498
+ const indeterminate = hasRowSelected && !allIsSelected;
492
499
  if (inHeader) {
493
500
  const columnKey = (0, _get2.default)(rowSelection, 'key', _constants.strings.DEFAULT_KEY_COLUMN_SELECTION);
494
- const allRowKeys = _this2.cachedFilteredSortedRowKeys;
495
- const allRowKeysSet = _this2.cachedFilteredSortedRowKeysSet;
496
- const allIsSelected = _this2.foundation.allIsSelected(selectedRowKeysSet, allDisabledRowKeysSet, allRowKeys);
497
- const hasRowSelected = _this2.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
498
- return /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
501
+ const originNode = /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
499
502
  "aria-label": `${allIsSelected ? 'Deselect' : 'Select'} all rows`,
500
503
  disabled: disabled,
501
504
  key: columnKey,
502
505
  selected: allIsSelected,
503
- indeterminate: hasRowSelected && !allIsSelected,
506
+ indeterminate: indeterminate,
504
507
  onChange: (selected, e) => {
505
508
  _this2.toggleSelectAllRow(selected, e);
506
509
  }
507
510
  });
511
+ const selectAll = (selected, e) => _this2.toggleSelectAllRow(selected, e);
512
+ return (0, _isFunction2.default)(renderCell) ? renderCell({
513
+ selected: allIsSelected,
514
+ record,
515
+ originNode,
516
+ inHeader,
517
+ disabled,
518
+ indeterminate,
519
+ selectAll
520
+ }) : originNode;
508
521
  } else {
509
522
  const key = _this2.foundation.getRecordKey(record);
510
523
  const selected = selectedRowKeysSet.has(key);
511
524
  const checkboxPropsFn = () => typeof getCheckboxProps === 'function' ? getCheckboxProps(record) : {};
512
- return /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
525
+ const originNode = /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
513
526
  "aria-label": `${selected ? 'Deselect' : 'Select'} this row`,
514
527
  getCheckboxProps: checkboxPropsFn,
515
528
  selected: selected,
516
529
  onChange: (status, e) => _this2.toggleSelectRow(status, key, e)
517
530
  });
531
+ const selectRow = (selected, e) => _this2.toggleSelectRow(selected, key, e);
532
+ return (0, _isFunction2.default)(renderCell) ? renderCell({
533
+ selected,
534
+ record,
535
+ index,
536
+ originNode,
537
+ inHeader: false,
538
+ disabled,
539
+ indeterminate,
540
+ selectRow
541
+ }) : originNode;
518
542
  }
519
543
  }
520
544
  return null;
521
545
  };
522
546
  this.renderRowSelectionCallback = function (text) {
523
547
  let record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
524
- return _this2.renderSelection(record);
548
+ let index = arguments.length > 2 ? arguments[2] : undefined;
549
+ return _this2.renderSelection(record, false, index);
525
550
  };
526
- this.renderTitleSelectionCallback = () => this.renderSelection(null, true);
551
+ this.renderTitleSelectionCallback = () => this.renderSelection(undefined, true);
527
552
  this.normalizeSelectionColumn = function () {
528
553
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
529
554
  const {
@@ -618,7 +643,7 @@ class Table extends _baseComponent.default {
618
643
  const {
619
644
  prefixCls
620
645
  } = _this2.props;
621
- if (column && (column.sorter || column.filters || column.useFullRender)) {
646
+ if (column && (column.sorter || column.filters || column.onFilter || column.useFullRender)) {
622
647
  let hasSorterOrFilter = false;
623
648
  const {
624
649
  dataIndex,
@@ -660,10 +685,10 @@ class Table extends _baseComponent.default {
660
685
  const stateFilteredValue = (0, _get2.default)(curQuery, 'filteredValue');
661
686
  const defaultFilteredValue = (0, _get2.default)(curQuery, 'defaultFilteredValue');
662
687
  const filteredValue = stateFilteredValue ? stateFilteredValue : defaultFilteredValue;
663
- if (Array.isArray(column.filters) && column.filters.length || /*#__PURE__*/(0, _react.isValidElement)(column.filterDropdown)) {
688
+ if (Array.isArray(column.filters) && column.filters.length || /*#__PURE__*/(0, _react.isValidElement)(column.filterDropdown) || typeof column.renderFilterDropdown === 'function') {
664
689
  const filter = /*#__PURE__*/_react.default.createElement(_ColumnFilter.default, Object.assign({
665
690
  key: _constants.strings.DEFAULT_KEY_COLUMN_FILTER
666
- }, curQuery, {
691
+ }, (0, _omit2.default)(curQuery, 'children'), {
667
692
  filteredValue: filteredValue,
668
693
  onFilterDropdownVisibleChange: visible => _this2.foundation.toggleShowFilter(dataIndex, visible),
669
694
  onSelect: data => _this2.foundation.handleFilterSelect(dataIndex, data)
@@ -96,7 +96,7 @@ declare class Table<RecordType extends Record<string, any> = Data> extends React
96
96
  tableRef: React.RefObject<NormalTable<RecordType>>;
97
97
  context: ContextValue;
98
98
  constructor(props: TableProps);
99
- getCurrentPageData: () => any;
99
+ getCurrentPageData: () => Pick<import("@douyinfe/semi-foundation/lib/cjs/table/foundation").BasePageData<RecordType>, "dataSource" | "groups">;
100
100
  render(): JSX.Element;
101
101
  }
102
102
  export * from './interface';