@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.
- package/dist/css/semi.css +285 -0
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +488 -214
- 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/_utils/index.d.ts +2 -1
- package/lib/cjs/_utils/index.js +0 -5
- package/lib/cjs/avatar/TopSlotSvg.d.ts +5 -0
- package/lib/cjs/avatar/TopSlotSvg.js +74 -0
- package/lib/cjs/avatar/index.d.ts +25 -0
- package/lib/cjs/avatar/index.js +126 -8
- package/lib/cjs/avatar/interface.d.ts +24 -1
- package/lib/cjs/cascader/index.d.ts +2 -3
- package/lib/cjs/cascader/index.js +19 -28
- package/lib/cjs/datePicker/datePicker.js +1 -1
- package/lib/cjs/datePicker/yearAndMonth.js +16 -20
- package/lib/cjs/dropdown/dropdownItem.js +2 -1
- package/lib/cjs/form/hoc/withField.d.ts +3 -3
- package/lib/cjs/input/index.d.ts +1 -0
- package/lib/cjs/input/index.js +12 -4
- package/lib/cjs/modal/Modal.d.ts +1 -0
- package/lib/cjs/modal/Modal.js +13 -5
- package/lib/cjs/modal/confirm.d.ts +5 -0
- package/lib/cjs/select/option.js +1 -2
- package/lib/cjs/slider/index.js +33 -1
- package/lib/cjs/table/ColumnFilter.d.ts +34 -18
- package/lib/cjs/table/ColumnFilter.js +134 -73
- package/lib/cjs/table/ResizableTable.js +1 -1
- package/lib/cjs/table/Table.d.ts +5 -5
- package/lib/cjs/table/Table.js +38 -13
- package/lib/cjs/table/index.d.ts +1 -1
- package/lib/cjs/table/interface.d.ts +30 -10
- package/lib/cjs/treeSelect/index.d.ts +2 -0
- package/lib/cjs/treeSelect/index.js +4 -0
- package/lib/es/_utils/index.d.ts +2 -1
- package/lib/es/_utils/index.js +0 -5
- package/lib/es/avatar/TopSlotSvg.d.ts +5 -0
- package/lib/es/avatar/TopSlotSvg.js +66 -0
- package/lib/es/avatar/index.d.ts +25 -0
- package/lib/es/avatar/index.js +126 -8
- package/lib/es/avatar/interface.d.ts +24 -1
- package/lib/es/cascader/index.d.ts +2 -3
- package/lib/es/cascader/index.js +19 -28
- package/lib/es/datePicker/datePicker.js +1 -1
- package/lib/es/datePicker/yearAndMonth.js +16 -20
- package/lib/es/dropdown/dropdownItem.js +2 -1
- package/lib/es/form/hoc/withField.d.ts +3 -3
- package/lib/es/input/index.d.ts +1 -0
- package/lib/es/input/index.js +12 -4
- package/lib/es/modal/Modal.d.ts +1 -0
- package/lib/es/modal/Modal.js +13 -5
- package/lib/es/modal/confirm.d.ts +5 -0
- package/lib/es/select/option.js +1 -2
- package/lib/es/slider/index.js +33 -1
- package/lib/es/table/ColumnFilter.d.ts +34 -18
- package/lib/es/table/ColumnFilter.js +135 -74
- package/lib/es/table/ResizableTable.js +1 -1
- package/lib/es/table/Table.d.ts +5 -5
- package/lib/es/table/Table.js +38 -13
- package/lib/es/table/index.d.ts +1 -1
- package/lib/es/table/interface.d.ts +30 -10
- package/lib/es/treeSelect/index.d.ts +2 -0
- package/lib/es/treeSelect/index.js +4 -0
- package/package.json +8 -8
package/lib/cjs/modal/Modal.js
CHANGED
|
@@ -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",
|
|
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 !==
|
|
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
|
};
|
package/lib/cjs/select/option.js
CHANGED
package/lib/cjs/slider/index.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
})
|
|
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,
|
|
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
|
package/lib/cjs/table/Table.d.ts
CHANGED
|
@@ -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: () =>
|
|
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
|
|
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) =>
|
|
286
|
+
normalizeColumns: (columns: ColumnProps<RecordType>[], children: ReactNode) => ColumnProps<RecordType>[];
|
|
287
287
|
/**
|
|
288
288
|
* Combine pagination and table paging processing functions
|
|
289
289
|
*/
|
package/lib/cjs/table/Table.js
CHANGED
|
@@ -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
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
548
|
+
let index = arguments.length > 2 ? arguments[2] : undefined;
|
|
549
|
+
return _this2.renderSelection(record, false, index);
|
|
525
550
|
};
|
|
526
|
-
this.renderTitleSelectionCallback = () => this.renderSelection(
|
|
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)
|
package/lib/cjs/table/index.d.ts
CHANGED
|
@@ -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: () =>
|
|
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';
|