@kdcloudjs/table 1.1.6 → 1.2.0-canary.10
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/@kdcloudjs/table.css +1 -1
- package/dist/@kdcloudjs/table.js +835 -187
- package/dist/@kdcloudjs/table.js.map +1 -1
- package/dist/@kdcloudjs/table.min.css +1 -1
- package/dist/@kdcloudjs/table.min.js +8 -8
- package/dist/@kdcloudjs/table.min.js.map +1 -1
- package/es/locale/locale.d.ts +8 -4
- package/es/locale/zh-CN.d.ts +8 -4
- package/es/locale/zh-CN.js +10 -4
- package/es/table/base/helpers/TableDOMUtils.js +17 -14
- package/es/table/base/styles.d.ts +10 -0
- package/es/table/base/styles.js +12 -2
- package/es/table/base/table.js +38 -7
- package/es/table/common-views.js +3 -1
- package/es/table/interfaces.d.ts +5 -0
- package/es/table/pipeline/features/autoFill.js +7 -3
- package/es/table/pipeline/features/columnFilter.js +17 -5
- package/es/table/pipeline/features/columnResizeWidth.js +3 -1
- package/es/table/pipeline/features/filter/DefaultFilterContent.d.ts +1 -1
- package/es/table/pipeline/features/filter/DefaultFilterContent.js +11 -5
- package/es/table/pipeline/features/filter/Filter.d.ts +4 -1
- package/es/table/pipeline/features/filter/Filter.js +4 -2
- package/es/table/pipeline/features/index.d.ts +1 -0
- package/es/table/pipeline/features/index.js +2 -1
- package/es/table/pipeline/features/multiSelect.js +31 -12
- package/es/table/pipeline/features/rangeSelection.d.ts +22 -1
- package/es/table/pipeline/features/rangeSelection.js +274 -100
- package/es/table/pipeline/features/rowDrag.d.ts +28 -0
- package/es/table/pipeline/features/rowDrag.js +325 -0
- package/es/table/pipeline/features/sort.js +22 -3
- package/lib/locale/locale.d.ts +8 -4
- package/lib/locale/zh-CN.d.ts +8 -4
- package/lib/locale/zh-CN.js +10 -4
- package/lib/table/base/helpers/TableDOMUtils.js +17 -14
- package/lib/table/base/styles.d.ts +10 -0
- package/lib/table/base/styles.js +12 -2
- package/lib/table/base/table.js +38 -7
- package/lib/table/common-views.js +3 -1
- package/lib/table/interfaces.d.ts +5 -0
- package/lib/table/pipeline/features/autoFill.js +7 -3
- package/lib/table/pipeline/features/columnFilter.js +18 -6
- package/lib/table/pipeline/features/columnResizeWidth.js +3 -1
- package/lib/table/pipeline/features/filter/DefaultFilterContent.d.ts +1 -1
- package/lib/table/pipeline/features/filter/DefaultFilterContent.js +11 -5
- package/lib/table/pipeline/features/filter/Filter.d.ts +4 -1
- package/lib/table/pipeline/features/filter/Filter.js +4 -2
- package/lib/table/pipeline/features/index.d.ts +1 -0
- package/lib/table/pipeline/features/index.js +9 -1
- package/lib/table/pipeline/features/multiSelect.js +33 -12
- package/lib/table/pipeline/features/rangeSelection.d.ts +22 -1
- package/lib/table/pipeline/features/rangeSelection.js +282 -104
- package/lib/table/pipeline/features/rowDrag.d.ts +28 -0
- package/lib/table/pipeline/features/rowDrag.js +347 -0
- package/lib/table/pipeline/features/sort.js +22 -3
- package/package.json +3 -3
package/lib/table/base/table.js
CHANGED
|
@@ -311,10 +311,14 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
311
311
|
|
|
312
312
|
if (_lastHasScrollY !== this.hasScrollY) {
|
|
313
313
|
(_b = (_a = this.props).setTableWidth) === null || _b === void 0 ? void 0 : _b.call(_a, this.domHelper.tableBody.clientWidth);
|
|
314
|
-
}
|
|
314
|
+
}
|
|
315
315
|
|
|
316
|
+
var _this$lastInfo = this.lastInfo,
|
|
317
|
+
leftLockTotalWidth = _this$lastInfo.leftLockTotalWidth,
|
|
318
|
+
rightLockTotalWidth = _this$lastInfo.rightLockTotalWidth;
|
|
319
|
+
var lockTotalWidth = leftLockTotalWidth + rightLockTotalWidth; // 设置子节点宽度
|
|
316
320
|
|
|
317
|
-
stickyScrollItem.style.width = "".concat(innerTableWidth, "px");
|
|
321
|
+
stickyScrollItem.style.width = "".concat(innerTableWidth - lockTotalWidth, "px");
|
|
318
322
|
}
|
|
319
323
|
}, {
|
|
320
324
|
key: "renderTableHeader",
|
|
@@ -482,13 +486,25 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
482
486
|
stickyBottom = _this$props5.stickyBottom;
|
|
483
487
|
var hasScroll = this.state.hasScroll;
|
|
484
488
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
485
|
-
className: (0, _classnames.default)(_styles.Classes.
|
|
489
|
+
className: (0, _classnames.default)(_styles.Classes.horizontalScrollContainer, _styles.Classes.horizontalStickyScrollContainer)
|
|
490
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
491
|
+
className: (0, _classnames.default)(_styles.Classes.horizontalScrollLeftSpacer),
|
|
492
|
+
style: {
|
|
493
|
+
width: info.leftLockTotalWidth
|
|
494
|
+
}
|
|
495
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
496
|
+
className: (0, _classnames.default)(_styles.Classes.stickyScroll),
|
|
486
497
|
style: {
|
|
487
498
|
display: hasStickyScroll && hasScroll ? 'block' : 'none',
|
|
488
499
|
bottom: stickyBottom
|
|
489
500
|
}
|
|
490
501
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
491
502
|
className: _styles.Classes.stickyScrollItem
|
|
503
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
504
|
+
className: (0, _classnames.default)(_styles.Classes.horizontalScrollRightSpacer),
|
|
505
|
+
style: {
|
|
506
|
+
width: info.rightLockTotalWidth
|
|
507
|
+
}
|
|
492
508
|
}));
|
|
493
509
|
}
|
|
494
510
|
}, {
|
|
@@ -569,7 +585,22 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
569
585
|
}, {
|
|
570
586
|
key: "componentDidUpdate",
|
|
571
587
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
572
|
-
// console.log('did update start')
|
|
588
|
+
var _a; // console.log('did update start')
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
var _this$props8 = this.props,
|
|
592
|
+
cssVariables = _this$props8.cssVariables,
|
|
593
|
+
enableCSSVariables = _this$props8.enableCSSVariables,
|
|
594
|
+
bordered = _this$props8.bordered;
|
|
595
|
+
|
|
596
|
+
if (!(0, _utils.shallowEqual)(prevProps === null || prevProps === void 0 ? void 0 : prevProps.cssVariables, (_a = this.props) === null || _a === void 0 ? void 0 : _a.cssVariables)) {
|
|
597
|
+
(0, _utils.cssPolifill)({
|
|
598
|
+
variables: cssVariables || {},
|
|
599
|
+
enableCSSVariables: enableCSSVariables,
|
|
600
|
+
bordered: bordered
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
|
|
573
604
|
this.updateDOMHelper();
|
|
574
605
|
this.props$.next(this.props);
|
|
575
606
|
this.didMountOrUpdate(prevProps, prevState); // console.log('did update end')
|
|
@@ -798,9 +829,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
798
829
|
key: "adjustNeedRenderLock",
|
|
799
830
|
value: function adjustNeedRenderLock() {
|
|
800
831
|
var needRenderLock = this.state.needRenderLock;
|
|
801
|
-
var _this$
|
|
802
|
-
flat = (0, _flat.default)(_this$
|
|
803
|
-
hasLockColumn = _this$
|
|
832
|
+
var _this$lastInfo2 = this.lastInfo,
|
|
833
|
+
flat = (0, _flat.default)(_this$lastInfo2),
|
|
834
|
+
hasLockColumn = _this$lastInfo2.hasLockColumn;
|
|
804
835
|
|
|
805
836
|
if (hasLockColumn) {
|
|
806
837
|
var _context;
|
|
@@ -22,7 +22,9 @@ var _templateObject, _templateObject2, _templateObject3;
|
|
|
22
22
|
var InlineFlexCell = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: inline-flex;\n align-items: center;\n"])));
|
|
23
23
|
|
|
24
24
|
exports.InlineFlexCell = InlineFlexCell;
|
|
25
|
-
var ExpansionCell = (0, _styledComponents.default)(
|
|
25
|
+
var ExpansionCell = (0, _styledComponents.default)(function (props) {
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement(InlineFlexCell, (0, _extends2.default)({}, props));
|
|
27
|
+
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n &.", " {\n cursor: default;\n }\n\n .expansion-icon {\n fill: #999;\n flex: 0 0 16px;\n transition: transform 200ms;\n\n &.", " {\n transform-origin: center center;\n transform: rotate(90deg);\n }\n }\n"])), _styles.Classes.leaf, _styles.Classes.expanded);
|
|
26
28
|
exports.ExpansionCell = ExpansionCell;
|
|
27
29
|
|
|
28
30
|
function CaretDownIcon(props) {
|
|
@@ -27,6 +27,8 @@ export interface ArtColumnStaticPart {
|
|
|
27
27
|
features?: {
|
|
28
28
|
[key: string]: any;
|
|
29
29
|
};
|
|
30
|
+
/** 表头设置操作项到自定义操作区 */
|
|
31
|
+
renderHeader?: (title: ReactNode, opr: ReactNode) => ReactNode;
|
|
30
32
|
}
|
|
31
33
|
export interface Features {
|
|
32
34
|
/** 是否开启排序功能 */
|
|
@@ -90,6 +92,9 @@ export interface FilterPanelProps {
|
|
|
90
92
|
export interface DefaultFilterPanelProps extends FilterPanelProps {
|
|
91
93
|
setFilterModel(filterItem?: Pick<FilterItem, 'filter' | 'filterCondition'>): void;
|
|
92
94
|
filterModel: FilterItem;
|
|
95
|
+
localeText: {
|
|
96
|
+
[key: string]: string;
|
|
97
|
+
};
|
|
93
98
|
}
|
|
94
99
|
export interface CustomeFilterPanelProps extends FilterPanelProps {
|
|
95
100
|
setFilter(filter?: any[]): void;
|
|
@@ -48,7 +48,8 @@ var autoFillTableWidth = function autoFillTableWidth() {
|
|
|
48
48
|
// 保存剩余的flex总和和剩余宽度总和宽度
|
|
49
49
|
var residualFlexCount = flexCount;
|
|
50
50
|
var residualFlexWidth = remainingWidth;
|
|
51
|
-
var columnSize = pipeline.getFeatureOptions(_columnResizeWidth.COLUMN_SIZE_KEY)
|
|
51
|
+
var columnSize = pipeline.getFeatureOptions(_columnResizeWidth.COLUMN_SIZE_KEY);
|
|
52
|
+
var enableColumnResizeWidthFeature = !!columnSize;
|
|
52
53
|
pipeline.mapColumns((0, _utils.makeRecursiveMapper)(function (col, recursiveFlatMapInfo) {
|
|
53
54
|
var isLeaf = recursiveFlatMapInfo.isLeaf;
|
|
54
55
|
|
|
@@ -67,12 +68,15 @@ var autoFillTableWidth = function autoFillTableWidth() {
|
|
|
67
68
|
col.width = clamp(minWidth, preColWidth + (residualFlexCount === flex ? residualFlexWidth : usedRemainingWidth), maxWidth);
|
|
68
69
|
residualFlexCount -= flex;
|
|
69
70
|
residualFlexWidth -= col.width - preColWidth;
|
|
70
|
-
|
|
71
|
+
|
|
72
|
+
if (enableColumnResizeWidthFeature) {
|
|
73
|
+
columnSize[code] = col.width;
|
|
74
|
+
}
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
return col;
|
|
74
78
|
}));
|
|
75
|
-
pipeline.setFeatureOptions(_columnResizeWidth.COLUMN_SIZE_KEY, columnSize);
|
|
79
|
+
enableColumnResizeWidthFeature && pipeline.setFeatureOptions(_columnResizeWidth.COLUMN_SIZE_KEY, columnSize);
|
|
76
80
|
}
|
|
77
81
|
} else {
|
|
78
82
|
// 未设置了flex宽度,创建占位列
|
|
@@ -7,10 +7,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports.filter = filter;
|
|
9
9
|
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
11
|
-
|
|
12
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
|
|
13
11
|
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
13
|
+
|
|
14
14
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
15
15
|
|
|
16
16
|
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
|
|
@@ -63,6 +63,7 @@ function filter() {
|
|
|
63
63
|
var inputFiltersMap = new _map.default((0, _map2.default)(inputFilters).call(inputFilters, function (filterItem) {
|
|
64
64
|
return [filterItem.code, (0, _extends2.default)({}, filterItem)];
|
|
65
65
|
}));
|
|
66
|
+
var localeText = pipeline.ctx.localeText;
|
|
66
67
|
|
|
67
68
|
function processColumns(columns) {
|
|
68
69
|
return (0, _map2.default)(columns).call(columns, dfs);
|
|
@@ -75,7 +76,7 @@ function filter() {
|
|
|
75
76
|
var filterActive = filterable && ((_c = (_b = inputFiltersMap === null || inputFiltersMap === void 0 ? void 0 : inputFiltersMap.get(col.code)) === null || _b === void 0 ? void 0 : (0, _filter.default)(_b)) === null || _c === void 0 ? void 0 : _c.length) > 0;
|
|
76
77
|
|
|
77
78
|
if (filterable) {
|
|
78
|
-
var
|
|
79
|
+
var _cx;
|
|
79
80
|
|
|
80
81
|
var handleFilterChanged = function handleFilterChanged(filterItem) {
|
|
81
82
|
var nextFiltersMap = new _map.default(inputFiltersMap);
|
|
@@ -108,7 +109,8 @@ function filter() {
|
|
|
108
109
|
|
|
109
110
|
var filterPanel = (_d = col.features) === null || _d === void 0 ? void 0 : _d.filterPanel;
|
|
110
111
|
var colFilterIcon = (_f = (_e = col.features) === null || _e === void 0 ? void 0 : _e.filterIcon) !== null && _f !== void 0 ? _f : filterIcon;
|
|
111
|
-
|
|
112
|
+
|
|
113
|
+
var _Filter = /*#__PURE__*/_react.default.createElement(_filter2.Filter, {
|
|
112
114
|
key: "filter",
|
|
113
115
|
FilterPanelContent: filterPanel,
|
|
114
116
|
filterIcon: colFilterIcon,
|
|
@@ -120,12 +122,22 @@ function filter() {
|
|
|
120
122
|
stopClickEventPropagation: stopClickEventPropagation,
|
|
121
123
|
stopESCKeyDownEventPropagation: stopESCKeyDownEventPropagation,
|
|
122
124
|
hideFilterPopupHeader: hideFilterPopupHeader,
|
|
123
|
-
getPopupParent: getPopupParent
|
|
124
|
-
|
|
125
|
+
getPopupParent: getPopupParent,
|
|
126
|
+
localeText: localeText
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
if (col.renderHeader) {
|
|
130
|
+
result.title = col.renderHeader(result.title, _Filter);
|
|
131
|
+
} else {
|
|
132
|
+
var _context, _context2;
|
|
133
|
+
|
|
134
|
+
result.title = (0, _concat.default)(_context = []).call(_context, (0, _toConsumableArray2.default)((0, _concat.default)(_context2 = []).call(_context2, (_g = result.title) !== null && _g !== void 0 ? _g : [_internals.internals.safeRenderHeader((0, _extends2.default)({}, col))])), [_Filter]);
|
|
135
|
+
} // result.headerCellProps = mergeCellProps(col.headerCellProps, {
|
|
125
136
|
// style: {
|
|
126
137
|
// paddingRight: '18px'
|
|
127
138
|
// }
|
|
128
139
|
// })
|
|
140
|
+
|
|
129
141
|
}
|
|
130
142
|
|
|
131
143
|
if (!(0, _utils.isLeafNode)(col)) {
|
|
@@ -46,7 +46,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
46
46
|
|
|
47
47
|
var TableHeaderCellResize = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n position: absolute;\n top: 0;\n right: -5px;\n height: 100%;\n width: 10px;\n cursor: ew-resize;\n display: flex;\n flex-direction: column;\n align-items: center;\n z-index:1;\n\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n left: calc(50% - 1px);\n width: 1px;\n height: calc(100% - 14px);\n top: 7px;\n }\n"])));
|
|
48
48
|
|
|
49
|
-
var TableHeaderGroupCellResize = (0, _styledComponents.default)(
|
|
49
|
+
var TableHeaderGroupCellResize = (0, _styledComponents.default)(function (props) {
|
|
50
|
+
return /*#__PURE__*/_react.default.createElement(TableHeaderCellResize, (0, _extends2.default)({}, props));
|
|
51
|
+
})(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n &:after {\n height: 100%;\n top: 0;\n }\n"])));
|
|
50
52
|
|
|
51
53
|
function clamp(min, x, max) {
|
|
52
54
|
return Math.max(min, Math.min(max, x));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { DefaultFilterPanelProps } from '../../../interfaces';
|
|
3
|
-
declare function DefaultFilterContent({ setFilterModel, filterModel, hidePanel }: DefaultFilterPanelProps): JSX.Element;
|
|
3
|
+
declare function DefaultFilterContent({ setFilterModel, filterModel, hidePanel, localeText }: DefaultFilterPanelProps): JSX.Element;
|
|
4
4
|
export default DefaultFilterContent;
|
|
@@ -48,7 +48,11 @@ function DefaultFilterContent(_ref) {
|
|
|
48
48
|
|
|
49
49
|
var setFilterModel = _ref.setFilterModel,
|
|
50
50
|
filterModel = _ref.filterModel,
|
|
51
|
-
hidePanel = _ref.hidePanel
|
|
51
|
+
hidePanel = _ref.hidePanel,
|
|
52
|
+
_ref$localeText = _ref.localeText,
|
|
53
|
+
localeText = _ref$localeText === void 0 ? {} : _ref$localeText;
|
|
54
|
+
|
|
55
|
+
var _a, _b;
|
|
52
56
|
|
|
53
57
|
var _React$useState = _react.default.useState((filterModel === null || filterModel === void 0 ? void 0 : filterModel.filterCondition) || 'contain'),
|
|
54
58
|
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
@@ -102,16 +106,18 @@ function DefaultFilterContent(_ref) {
|
|
|
102
106
|
return /*#__PURE__*/_react.default.createElement(DefaultFilterContentStyle, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
103
107
|
className: 'filter-option-list'
|
|
104
108
|
}, /*#__PURE__*/_react.default.createElement("ul", null, (0, _map.default)(_util.DEFAULT_FILTER_OPTIONS).call(_util.DEFAULT_FILTER_OPTIONS, function (option, index) {
|
|
109
|
+
var _a;
|
|
110
|
+
|
|
105
111
|
return (
|
|
106
112
|
/*#__PURE__*/
|
|
107
113
|
// eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
|
|
108
114
|
_react.default.createElement("li", {
|
|
109
|
-
key:
|
|
115
|
+
key: option.key,
|
|
110
116
|
className: option.key === selectedValue ? 'active' : '',
|
|
111
117
|
onClick: function onClick() {
|
|
112
118
|
return handleClick(option);
|
|
113
119
|
}
|
|
114
|
-
}, option.title)
|
|
120
|
+
}, (_a = localeText[option.key]) !== null && _a !== void 0 ? _a : option.title)
|
|
115
121
|
);
|
|
116
122
|
}))), selectedValue !== 'notIsNull' && selectedValue !== 'isNull' && /*#__PURE__*/_react.default.createElement("div", {
|
|
117
123
|
className: 'filter-search'
|
|
@@ -130,12 +136,12 @@ function DefaultFilterContent(_ref) {
|
|
|
130
136
|
'filter-btn': true
|
|
131
137
|
}, _styles.Classes.button, true)),
|
|
132
138
|
onClick: reset
|
|
133
|
-
},
|
|
139
|
+
}, (_a = localeText.resetFilter) !== null && _a !== void 0 ? _a : '重置'), /*#__PURE__*/_react.default.createElement("button", {
|
|
134
140
|
className: (0, _classnames.default)((_cx2 = {
|
|
135
141
|
'filter-btn': true
|
|
136
142
|
}, (0, _defineProperty2.default)(_cx2, _styles.Classes.button, true), (0, _defineProperty2.default)(_cx2, _styles.Classes.buttonPrimary, true), _cx2)),
|
|
137
143
|
onClick: confirm
|
|
138
|
-
},
|
|
144
|
+
}, (_b = localeText.confirmFilter) !== null && _b !== void 0 ? _b : '确定')));
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
var _default = DefaultFilterContent;
|
|
@@ -15,6 +15,9 @@ interface FilterProps {
|
|
|
15
15
|
stopESCKeyDownEventPropagation?: boolean;
|
|
16
16
|
hideFilterPopupHeader?: boolean;
|
|
17
17
|
getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
|
|
18
|
+
localeText?: {
|
|
19
|
+
[key: string]: string;
|
|
20
|
+
};
|
|
18
21
|
}
|
|
19
|
-
declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, stopESCKeyDownEventPropagation, hideFilterPopupHeader, getPopupParent }: FilterProps): JSX.Element;
|
|
22
|
+
declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, stopESCKeyDownEventPropagation, hideFilterPopupHeader, getPopupParent, localeText }: FilterProps): JSX.Element;
|
|
20
23
|
export default Filter;
|
|
@@ -110,7 +110,8 @@ function Filter(_ref2) {
|
|
|
110
110
|
stopClickEventPropagation = _ref2.stopClickEventPropagation,
|
|
111
111
|
stopESCKeyDownEventPropagation = _ref2.stopESCKeyDownEventPropagation,
|
|
112
112
|
hideFilterPopupHeader = _ref2.hideFilterPopupHeader,
|
|
113
|
-
getPopupParent = _ref2.getPopupParent
|
|
113
|
+
getPopupParent = _ref2.getPopupParent,
|
|
114
|
+
localeText = _ref2.localeText;
|
|
114
115
|
|
|
115
116
|
var _React$useState3 = _react.default.useState(false),
|
|
116
117
|
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
|
|
@@ -138,7 +139,8 @@ function Filter(_ref2) {
|
|
|
138
139
|
setFilterModel: setFilterModel,
|
|
139
140
|
filterModel: filterModel,
|
|
140
141
|
isFilterActive: isFilterActive,
|
|
141
|
-
hidePanel: hidePanel
|
|
142
|
+
hidePanel: hidePanel,
|
|
143
|
+
localeText: localeText
|
|
142
144
|
});
|
|
143
145
|
}
|
|
144
146
|
};
|
|
@@ -18,3 +18,4 @@ export { rangeSelection, RangeSelectionFeatureOptions } from './rangeSelection';
|
|
|
18
18
|
export { mergeCellHover } from './mergeCellHover';
|
|
19
19
|
export { footerDataSource, FooterDataSourceFeatureOptions, footerRowMetaSymbol } from './footerDataSource';
|
|
20
20
|
export { colGroupExtendable, colGroupExtendOption } from './colGroupExtendable';
|
|
21
|
+
export { rowDrag, RowDragFeatureOptions } from './rowDrag';
|
|
@@ -97,6 +97,12 @@ Object.defineProperty(exports, "rowDetail", {
|
|
|
97
97
|
return _rowDetail.rowDetail;
|
|
98
98
|
}
|
|
99
99
|
});
|
|
100
|
+
Object.defineProperty(exports, "rowDrag", {
|
|
101
|
+
enumerable: true,
|
|
102
|
+
get: function get() {
|
|
103
|
+
return _rowDrag.rowDrag;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
100
106
|
Object.defineProperty(exports, "rowGrouping", {
|
|
101
107
|
enumerable: true,
|
|
102
108
|
get: function get() {
|
|
@@ -178,4 +184,6 @@ var _mergeCellHover = require("./mergeCellHover");
|
|
|
178
184
|
|
|
179
185
|
var _footerDataSource = require("./footerDataSource");
|
|
180
186
|
|
|
181
|
-
var _colGroupExtendable = require("./colGroupExtendable");
|
|
187
|
+
var _colGroupExtendable = require("./colGroupExtendable");
|
|
188
|
+
|
|
189
|
+
var _rowDrag = require("./rowDrag");
|
|
@@ -23,6 +23,10 @@ var _others = require("../../utils/others");
|
|
|
23
23
|
|
|
24
24
|
var _utils = require("../../utils");
|
|
25
25
|
|
|
26
|
+
var fullRowsSetKey = 'fullRowsSetKey';
|
|
27
|
+
var allEnableKeys = 'allEnableKeys';
|
|
28
|
+
var selectValueSetKey = 'selectValueSetKey';
|
|
29
|
+
|
|
26
30
|
function multiSelect() {
|
|
27
31
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
28
32
|
return function multiSelectStep(pipeline) {
|
|
@@ -53,10 +57,9 @@ function multiSelect() {
|
|
|
53
57
|
action: action
|
|
54
58
|
});
|
|
55
59
|
};
|
|
56
|
-
|
|
57
|
-
var dataSource = pipeline.getDataSource();
|
|
58
60
|
/** dataSource 中包含的所有 keys */
|
|
59
61
|
|
|
62
|
+
|
|
60
63
|
var fullKeySet = new _set.default();
|
|
61
64
|
/** 所有有效的 keys(disable 状态为 false) */
|
|
62
65
|
|
|
@@ -65,7 +68,7 @@ function multiSelect() {
|
|
|
65
68
|
var isAllChecked = set.size !== 0; // 当前不存在选中则默认为false
|
|
66
69
|
|
|
67
70
|
var isAnyChecked = false;
|
|
68
|
-
var flatDataSource = (0, _utils.collectNodes)(
|
|
71
|
+
var flatDataSource = (0, _utils.collectNodes)(pipeline.getDataSource());
|
|
69
72
|
flatDataSource.forEach(function (row, rowIndex) {
|
|
70
73
|
var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
|
|
71
74
|
|
|
@@ -94,6 +97,8 @@ function multiSelect() {
|
|
|
94
97
|
checked: isAllChecked,
|
|
95
98
|
indeterminate: !isAllChecked && isAnyChecked,
|
|
96
99
|
onChange: function onChange(_) {
|
|
100
|
+
var allKeys = pipeline.getFeatureOptions(allEnableKeys);
|
|
101
|
+
|
|
97
102
|
if (isAllChecked) {
|
|
98
103
|
_onChange(_others.arrayUtils.diff(value, allKeys), '', allKeys, 'uncheck-all');
|
|
99
104
|
} else {
|
|
@@ -115,9 +120,11 @@ function multiSelect() {
|
|
|
115
120
|
|
|
116
121
|
var checkboxCellProps = {};
|
|
117
122
|
var preCellProps = (_b = (_a = opts.checkboxColumn) === null || _a === void 0 ? void 0 : _a.getCellProps) === null || _b === void 0 ? void 0 : _b.call(_a, value, row, rowIndex);
|
|
123
|
+
var fullRowsSet = pipeline.getFeatureOptions(fullRowsSetKey) || new _set.default();
|
|
124
|
+
var selectValueSet = pipeline.getFeatureOptions(selectValueSetKey) || new _set.default();
|
|
118
125
|
|
|
119
|
-
if (
|
|
120
|
-
var prevChecked =
|
|
126
|
+
if (fullRowsSet.has(rowKey) && clickArea === 'cell') {
|
|
127
|
+
var prevChecked = selectValueSet.has(rowKey);
|
|
121
128
|
var disabled = isDisabled(row, rowIndex);
|
|
122
129
|
checkboxCellProps = {
|
|
123
130
|
style: {
|
|
@@ -142,7 +149,8 @@ function multiSelect() {
|
|
|
142
149
|
|
|
143
150
|
var key = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
|
|
144
151
|
|
|
145
|
-
var
|
|
152
|
+
var selectValueSet = pipeline.getFeatureOptions(selectValueSetKey) || new _set.default();
|
|
153
|
+
var checked = selectValueSet.has(key);
|
|
146
154
|
return /*#__PURE__*/_react.default.createElement(Checkbox, {
|
|
147
155
|
checked: checked,
|
|
148
156
|
disabled: isDisabled(row, rowIndex),
|
|
@@ -180,7 +188,9 @@ function multiSelect() {
|
|
|
180
188
|
pipeline.appendRowPropsGetter(function (row, rowIndex) {
|
|
181
189
|
var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
|
|
182
190
|
|
|
183
|
-
|
|
191
|
+
var fullRowsSet = pipeline.getFeatureOptions(fullRowsSetKey) || new _set.default();
|
|
192
|
+
|
|
193
|
+
if (!fullRowsSet.has(rowKey)) {
|
|
184
194
|
// rowKey 不在 fullKeySet 中说明这一行是在 multiSelect 之后才生成的,multiSelect 不对之后生成的行进行处理
|
|
185
195
|
return;
|
|
186
196
|
}
|
|
@@ -188,7 +198,8 @@ function multiSelect() {
|
|
|
188
198
|
var style = {};
|
|
189
199
|
var className;
|
|
190
200
|
var onClick;
|
|
191
|
-
var
|
|
201
|
+
var selectValueSet = pipeline.getFeatureOptions(selectValueSetKey) || new _set.default();
|
|
202
|
+
var checked = selectValueSet.has(rowKey);
|
|
192
203
|
|
|
193
204
|
if (opts.highlightRowWhenSelected && checked) {
|
|
194
205
|
className = 'highlight';
|
|
@@ -215,22 +226,32 @@ function multiSelect() {
|
|
|
215
226
|
style: style,
|
|
216
227
|
onClick: onClick
|
|
217
228
|
};
|
|
218
|
-
});
|
|
229
|
+
}); // 只保留一份到pipeline, 避免行数据过多时内容被握住
|
|
230
|
+
|
|
231
|
+
pipeline.setFeatureOptions(fullRowsSetKey, fullKeySet);
|
|
232
|
+
pipeline.setFeatureOptions(allEnableKeys, allKeys);
|
|
233
|
+
pipeline.setFeatureOptions(selectValueSetKey, set);
|
|
234
|
+
fullKeySet = null;
|
|
235
|
+
allKeys = null;
|
|
236
|
+
set = null;
|
|
219
237
|
return pipeline;
|
|
220
238
|
|
|
221
239
|
function onCheckboxChange(prevChecked, key, batch) {
|
|
222
240
|
var batchKeys = [key];
|
|
223
241
|
|
|
224
242
|
if (batch && lastKey) {
|
|
225
|
-
var
|
|
226
|
-
|
|
243
|
+
var _allKeys = pipeline.getFeatureOptions(allEnableKeys);
|
|
244
|
+
|
|
245
|
+
var lastIdx = _allKeys.indexOf(lastKey);
|
|
246
|
+
|
|
247
|
+
var cntIdx = _allKeys.indexOf(key);
|
|
227
248
|
|
|
228
249
|
var _ref = lastIdx < cntIdx ? [lastIdx, cntIdx] : [cntIdx, lastIdx],
|
|
229
250
|
_ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
230
251
|
start = _ref2[0],
|
|
231
252
|
end = _ref2[1];
|
|
232
253
|
|
|
233
|
-
batchKeys = (0, _slice.default)(
|
|
254
|
+
batchKeys = (0, _slice.default)(_allKeys).call(_allKeys, start, end + 1);
|
|
234
255
|
}
|
|
235
256
|
|
|
236
257
|
if (prevChecked) {
|
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { TablePipeline } from '../pipeline';
|
|
2
|
+
import { ArtColumn } from '../../interfaces';
|
|
2
3
|
export interface RangeSelectionFeatureOptions {
|
|
3
4
|
/** 范围选中回调函数 */
|
|
4
|
-
rangeSelectedChange?(
|
|
5
|
+
rangeSelectedChange?(cellRanges: CellRange[], isFinished: boolean): void;
|
|
5
6
|
/** 是否阻止keydown的默认行为 */
|
|
6
7
|
preventkDefaultOfKeyDownEvent?: boolean;
|
|
8
|
+
/** 是否禁止多范围框选 */
|
|
9
|
+
suppressMultiRangeSelection?: boolean;
|
|
10
|
+
}
|
|
11
|
+
interface FooterRowRange {
|
|
12
|
+
startRow: number;
|
|
13
|
+
endRow: number;
|
|
14
|
+
}
|
|
15
|
+
interface CellRange {
|
|
16
|
+
startRow: number;
|
|
17
|
+
endRow: number;
|
|
18
|
+
columns: ArtColumn[];
|
|
19
|
+
startColumn: ArtColumn;
|
|
20
|
+
footerRowRange: FooterRowRange | null;
|
|
7
21
|
}
|
|
8
22
|
export declare const rangeSelectionKey = "rangeSelection";
|
|
9
23
|
export declare const lastClickCellKey = "lastClickCell";
|
|
10
24
|
export declare function rangeSelection(opts: RangeSelectionFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
|
|
25
|
+
/**
|
|
26
|
+
* 获取框选范围唯一标识
|
|
27
|
+
* @param {*} cellRange
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
export declare function getCellRangeId(cellRange: CellRange): string;
|
|
31
|
+
export {};
|