@douyinfe/semi-ui 2.51.3 → 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 +434 -111
- 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/dropdown/dropdownItem.js +2 -1
- 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 +11 -3
- package/lib/cjs/modal/confirm.d.ts +5 -0
- 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/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/dropdown/dropdownItem.js +2 -1
- 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 +11 -3
- package/lib/es/modal/confirm.d.ts +5 -0
- 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/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
|
@@ -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
|
}
|
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';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import React, { ReactNode, MutableRefObject } from 'react';
|
|
2
|
-
import { BaseProps } from '../_base/baseComponent';
|
|
3
|
-
import { PaginationProps } from '../pagination';
|
|
4
|
-
import { CheckboxProps } from '../checkbox';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { ArrayElement } from '../_base/base';
|
|
2
|
+
import type { BaseProps } from '../_base/baseComponent';
|
|
3
|
+
import type { PaginationProps } from '../pagination';
|
|
4
|
+
import type { CheckboxProps } from '../checkbox';
|
|
5
|
+
import type { Locale } from '../locale/interface';
|
|
6
|
+
import type { ArrayElement } from '../_base/base';
|
|
8
7
|
import { strings } from '@douyinfe/semi-foundation/lib/cjs/table/constants';
|
|
9
|
-
import { BaseRowKeyType, BaseSortOrder, BaseGroupBy, BaseGroupByFn, BaseFixed, BaseAlign, BaseChangeInfoSorter, BaseSorter, BaseFilter, BaseChangeInfoFilter, BaseIncludeGroupRecord, BaseEllipsis } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
|
|
10
|
-
import { ScrollDirection, CSSDirection } from 'react-window';
|
|
8
|
+
import type { BaseRowKeyType, BaseSortOrder, BaseGroupBy, BaseGroupByFn, BaseFixed, BaseAlign, BaseChangeInfoSorter, BaseSorter, BaseFilter, BaseChangeInfoFilter, BaseIncludeGroupRecord, BaseEllipsis } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
|
|
9
|
+
import type { ScrollDirection, CSSDirection } from 'react-window';
|
|
10
|
+
import type { ColumnFilterProps } from './ColumnFilter';
|
|
11
11
|
export interface TableProps<RecordType extends Record<string, any> = any> extends BaseProps {
|
|
12
12
|
bordered?: boolean;
|
|
13
13
|
children?: ReactNode;
|
|
@@ -65,29 +65,37 @@ export interface ColumnProps<RecordType extends Record<string, any> = any> {
|
|
|
65
65
|
children?: Array<ColumnProps<RecordType>>;
|
|
66
66
|
className?: string;
|
|
67
67
|
colSpan?: number;
|
|
68
|
+
/** use `dataIndex` to get current column data item from record. If you use `sorter` or `onFilter`, a unique `dataIndex` is required */
|
|
68
69
|
dataIndex?: string;
|
|
69
70
|
defaultFilteredValue?: any[];
|
|
70
71
|
defaultSortOrder?: SortOrder;
|
|
71
72
|
filterChildrenRecord?: boolean;
|
|
72
|
-
filterDropdown?:
|
|
73
|
-
|
|
73
|
+
filterDropdown?: ColumnFilterProps['filterDropdown'];
|
|
74
|
+
/** render filter Dropdown panel content */
|
|
75
|
+
renderFilterDropdown?: ColumnFilterProps['renderFilterDropdown'];
|
|
76
|
+
/** filter Dropdown props */
|
|
77
|
+
filterDropdownProps?: ColumnFilterProps['filterDropdownProps'];
|
|
74
78
|
filterDropdownVisible?: boolean;
|
|
75
79
|
filterIcon?: FilterIcon;
|
|
76
80
|
filterMultiple?: boolean;
|
|
77
81
|
filteredValue?: any[];
|
|
82
|
+
/** `filters` is not required if you use `renderFilterDropdown` */
|
|
78
83
|
filters?: Filter[];
|
|
79
84
|
fixed?: Fixed;
|
|
85
|
+
/** the key required by React. If you have already set the `dataIndex`, the key does not need to be set again. */
|
|
80
86
|
key?: string | number;
|
|
81
87
|
render?: ColumnRender<RecordType>;
|
|
82
88
|
renderFilterDropdownItem?: RenderFilterDropdownItem;
|
|
83
89
|
sortChildrenRecord?: boolean;
|
|
84
90
|
sortOrder?: SortOrder;
|
|
91
|
+
/** enable sorting, `dataIndex` is required at the same time */
|
|
85
92
|
sorter?: Sorter<RecordType>;
|
|
86
93
|
sortIcon?: SortIcon;
|
|
87
94
|
title?: ColumnTitle;
|
|
88
95
|
useFullRender?: boolean;
|
|
89
96
|
width?: string | number;
|
|
90
97
|
onCell?: OnCell<RecordType>;
|
|
98
|
+
/** enable filtering, `dataIndex` is required at the same time */
|
|
91
99
|
onFilter?: OnFilter<RecordType>;
|
|
92
100
|
onFilterDropdownVisibleChange?: OnFilterDropdownVisibleChange;
|
|
93
101
|
onHeaderCell?: OnHeaderCell<RecordType>;
|
|
@@ -217,7 +225,19 @@ export interface RowSelectionProps<RecordType> {
|
|
|
217
225
|
onChange?: RowSelectionOnChange<RecordType>;
|
|
218
226
|
onSelect?: RowSelectionOnSelect<RecordType>;
|
|
219
227
|
onSelectAll?: RowSelectionOnSelectAll<RecordType>;
|
|
228
|
+
renderCell?: RowSelectionRenderCell<RecordType>;
|
|
220
229
|
}
|
|
230
|
+
export type RowSelectionRenderCell<RecordType> = (renderCellArgs: {
|
|
231
|
+
selected: boolean;
|
|
232
|
+
record: RecordType;
|
|
233
|
+
originNode: JSX.Element;
|
|
234
|
+
inHeader: boolean;
|
|
235
|
+
disabled: boolean;
|
|
236
|
+
indeterminate: boolean;
|
|
237
|
+
index?: number;
|
|
238
|
+
selectRow?: (selected: boolean, e: Event) => void;
|
|
239
|
+
selectAll?: (selected: boolean, e: Event) => void;
|
|
240
|
+
}) => ReactNode;
|
|
221
241
|
export type GetCheckboxProps<RecordType> = (record: RecordType) => CheckboxProps;
|
|
222
242
|
export type RowSelectionOnChange<RecordType> = (selectedRowKeys?: (string | number)[], selectedRows?: RecordType[]) => void;
|
|
223
243
|
export type RowSelectionOnSelect<RecordType> = (record?: RecordType, selected?: boolean, selectedRows?: RecordType[], nativeEvent?: React.MouseEvent) => void;
|
|
@@ -82,6 +82,7 @@ export interface TreeSelectProps extends Omit<BasicTreeSelectProps, OverrideComm
|
|
|
82
82
|
onChange?: OnChange;
|
|
83
83
|
onFocus?: (e: React.MouseEvent) => void;
|
|
84
84
|
onVisibleChange?: (isVisible: boolean) => void;
|
|
85
|
+
onClear?: (e: React.MouseEvent | React.KeyboardEvent<HTMLDivElement>) => void;
|
|
85
86
|
}
|
|
86
87
|
export type OverrideCommonState = 'keyEntities' | 'treeData' | 'disabledKeys' | 'flattenNodes';
|
|
87
88
|
export interface TreeSelectState extends Omit<BasicTreeSelectInnerData, OverrideCommonState | 'prevProps'>, Pick<TreeState, OverrideCommonState> {
|
|
@@ -121,6 +122,7 @@ declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState>
|
|
|
121
122
|
virtualize: PropTypes.Requireable<object>;
|
|
122
123
|
treeNodeFilterProp: PropTypes.Requireable<string>;
|
|
123
124
|
onChange: PropTypes.Requireable<(...args: any[]) => any>;
|
|
125
|
+
onClear: PropTypes.Requireable<(...args: any[]) => any>;
|
|
124
126
|
onSearch: PropTypes.Requireable<(...args: any[]) => any>;
|
|
125
127
|
onSelect: PropTypes.Requireable<(...args: any[]) => any>;
|
|
126
128
|
onExpand: PropTypes.Requireable<(...args: any[]) => any>;
|
|
@@ -1155,6 +1155,9 @@ class TreeSelect extends _baseComponent.default {
|
|
|
1155
1155
|
onLoad
|
|
1156
1156
|
} = this.props;
|
|
1157
1157
|
(0, _isFunction2.default)(onLoad) && onLoad(newLoadedKeys, data);
|
|
1158
|
+
},
|
|
1159
|
+
notifyClear: e => {
|
|
1160
|
+
this.props.onClear && this.props.onClear(e);
|
|
1158
1161
|
}
|
|
1159
1162
|
};
|
|
1160
1163
|
return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, super.adapter), filterAdapter), treeSelectAdapter), treeAdapter), {
|
|
@@ -1326,6 +1329,7 @@ TreeSelect.propTypes = {
|
|
|
1326
1329
|
virtualize: _propTypes.default.object,
|
|
1327
1330
|
treeNodeFilterProp: _propTypes.default.string,
|
|
1328
1331
|
onChange: _propTypes.default.func,
|
|
1332
|
+
onClear: _propTypes.default.func,
|
|
1329
1333
|
onSearch: _propTypes.default.func,
|
|
1330
1334
|
onSelect: _propTypes.default.func,
|
|
1331
1335
|
onExpand: _propTypes.default.func,
|
package/lib/es/_utils/index.d.ts
CHANGED
|
@@ -11,7 +11,8 @@ export declare function stopPropagation(e: React.MouseEvent | React.FocusEvent<H
|
|
|
11
11
|
*
|
|
12
12
|
* skip clone function and react element
|
|
13
13
|
*/
|
|
14
|
-
export declare function cloneDeep(value:
|
|
14
|
+
export declare function cloneDeep<T>(value: T): T;
|
|
15
|
+
export declare function cloneDeep<T>(value: T, customizer: (value: any) => any): any;
|
|
15
16
|
/**
|
|
16
17
|
* [getHighLightTextHTML description]
|
|
17
18
|
*
|
package/lib/es/_utils/index.js
CHANGED
|
@@ -19,11 +19,6 @@ export function stopPropagation(e, noImmediate) {
|
|
|
19
19
|
e.nativeEvent.stopImmediatePropagation();
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
/**
|
|
23
|
-
* use in Table, Form, Navigation
|
|
24
|
-
*
|
|
25
|
-
* skip clone function and react element
|
|
26
|
-
*/
|
|
27
22
|
export function cloneDeep(value, customizer) {
|
|
28
23
|
return _cloneDeepWith(value, v => {
|
|
29
24
|
if (typeof customizer === 'function') {
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
const TopSlotSvg = _ref => {
|
|
4
|
+
let {
|
|
5
|
+
gradientStart,
|
|
6
|
+
gradientEnd
|
|
7
|
+
} = _ref;
|
|
8
|
+
const id = getUuidShort();
|
|
9
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
10
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11
|
+
width: "51",
|
|
12
|
+
height: "52",
|
|
13
|
+
viewBox: "0 0 51 52",
|
|
14
|
+
fill: "none"
|
|
15
|
+
}, /*#__PURE__*/React.createElement("g", {
|
|
16
|
+
filter: "url(#filter0_d_6_2)"
|
|
17
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
18
|
+
d: "M40.4918 46.5592C44.6795 43.176 46.261 34.1333 47.5301 25.6141C49.5854 11.8168 39.6662 1 25.8097 1C11.2857 1 3 11.4279 3 25.3518C3 33.7866 6.29361 43.8947 10.4602 46.5592C12.5868 47.9192 12.5868 47.9051 25.8097 47.9192C38.3651 47.9282 38.5352 48.14 40.4918 46.5592Z",
|
|
19
|
+
fill: `url(#${id})`
|
|
20
|
+
})), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("filter", {
|
|
21
|
+
id: "filter0_d_6_2",
|
|
22
|
+
x: "0.789215",
|
|
23
|
+
y: "0.447304",
|
|
24
|
+
width: "49.2216",
|
|
25
|
+
height: "51.3549",
|
|
26
|
+
filterUnits: "userSpaceOnUse",
|
|
27
|
+
colorInterpolationFilters: "sRGB"
|
|
28
|
+
}, /*#__PURE__*/React.createElement("feFlood", {
|
|
29
|
+
floodOpacity: "0",
|
|
30
|
+
result: "BackgroundImageFix"
|
|
31
|
+
}), /*#__PURE__*/React.createElement("feColorMatrix", {
|
|
32
|
+
in: "SourceAlpha",
|
|
33
|
+
type: "matrix",
|
|
34
|
+
values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
|
|
35
|
+
result: "hardAlpha"
|
|
36
|
+
}), /*#__PURE__*/React.createElement("feOffset", {
|
|
37
|
+
dy: "1.65809"
|
|
38
|
+
}), /*#__PURE__*/React.createElement("feGaussianBlur", {
|
|
39
|
+
stdDeviation: "1.10539"
|
|
40
|
+
}), /*#__PURE__*/React.createElement("feColorMatrix", {
|
|
41
|
+
type: "matrix",
|
|
42
|
+
values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"
|
|
43
|
+
}), /*#__PURE__*/React.createElement("feBlend", {
|
|
44
|
+
mode: "normal",
|
|
45
|
+
in2: "BackgroundImageFix",
|
|
46
|
+
result: "effect1_dropShadow_6_2"
|
|
47
|
+
}), /*#__PURE__*/React.createElement("feBlend", {
|
|
48
|
+
mode: "normal",
|
|
49
|
+
in: "SourceGraphic",
|
|
50
|
+
in2: "effect1_dropShadow_6_2",
|
|
51
|
+
result: "shape"
|
|
52
|
+
})), /*#__PURE__*/React.createElement("linearGradient", {
|
|
53
|
+
id: id,
|
|
54
|
+
x1: "17.671",
|
|
55
|
+
y1: "31.7392",
|
|
56
|
+
x2: "17.671",
|
|
57
|
+
y2: "47.9333",
|
|
58
|
+
gradientUnits: "userSpaceOnUse"
|
|
59
|
+
}, /*#__PURE__*/React.createElement("stop", {
|
|
60
|
+
stopColor: gradientStart
|
|
61
|
+
}), /*#__PURE__*/React.createElement("stop", {
|
|
62
|
+
offset: "1",
|
|
63
|
+
stopColor: gradientEnd
|
|
64
|
+
}))));
|
|
65
|
+
};
|
|
66
|
+
export default TopSlotSvg;
|
package/lib/es/avatar/index.d.ts
CHANGED
|
@@ -40,6 +40,29 @@ export default class Avatar extends BaseComponent<AvatarProps, AvatarState> {
|
|
|
40
40
|
onClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
41
41
|
onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
|
|
42
42
|
onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
|
|
43
|
+
bottomSlot: PropTypes.Requireable<PropTypes.InferProps<{
|
|
44
|
+
render: PropTypes.Requireable<(...args: any[]) => any>;
|
|
45
|
+
shape: PropTypes.Requireable<string>;
|
|
46
|
+
text: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
47
|
+
bgColor: PropTypes.Requireable<string>;
|
|
48
|
+
textColor: PropTypes.Requireable<string>;
|
|
49
|
+
className: PropTypes.Requireable<string>;
|
|
50
|
+
style: PropTypes.Requireable<object>;
|
|
51
|
+
}>>;
|
|
52
|
+
topSlot: PropTypes.Requireable<PropTypes.InferProps<{
|
|
53
|
+
render: PropTypes.Requireable<(...args: any[]) => any>;
|
|
54
|
+
gradientStart: PropTypes.Requireable<string>;
|
|
55
|
+
gradientEnd: PropTypes.Requireable<string>;
|
|
56
|
+
text: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
57
|
+
textColor: PropTypes.Requireable<string>;
|
|
58
|
+
className: PropTypes.Requireable<string>;
|
|
59
|
+
style: PropTypes.Requireable<object>;
|
|
60
|
+
}>>;
|
|
61
|
+
border: PropTypes.Requireable<NonNullable<boolean | PropTypes.InferProps<{
|
|
62
|
+
color: PropTypes.Requireable<string>;
|
|
63
|
+
motion: PropTypes.Requireable<boolean>;
|
|
64
|
+
}>>>;
|
|
65
|
+
contentMotion: PropTypes.Requireable<boolean>;
|
|
43
66
|
};
|
|
44
67
|
foundation: AvatarFoundation;
|
|
45
68
|
avatarRef: React.RefObject<HTMLElement | null>;
|
|
@@ -55,5 +78,7 @@ export default class Avatar extends BaseComponent<AvatarProps, AvatarState> {
|
|
|
55
78
|
handleFocusVisible: (event: React.FocusEvent) => void;
|
|
56
79
|
handleBlur: (event: React.FocusEvent) => void;
|
|
57
80
|
getContent: () => React.ReactNode;
|
|
81
|
+
renderBottomSlot: () => string | number | boolean | React.ReactFragment | JSX.Element;
|
|
82
|
+
renderTopSlot: () => string | number | boolean | React.ReactFragment | JSX.Element;
|
|
58
83
|
render(): JSX.Element;
|
|
59
84
|
}
|