@kdcloudjs/table 1.0.1 → 1.0.4
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/LICENSE +1 -1
- package/README.md +34 -33
- package/dist/@kdcloudjs/table.css +1 -1
- package/dist/@kdcloudjs/table.css.map +1 -1
- package/dist/@kdcloudjs/table.js +6555 -3388
- package/dist/@kdcloudjs/table.js.map +1 -1
- package/dist/@kdcloudjs/table.min.css +1 -1
- package/dist/@kdcloudjs/table.min.js +32 -24
- package/dist/@kdcloudjs/table.min.js.map +1 -1
- package/es/_utils/hooks.js +1 -2
- package/es/_utils/numberUtil.js +3 -4
- package/es/locale/locale.js +1 -2
- package/es/table/base/calculations.js +3 -4
- package/es/table/base/empty.js +2 -2
- package/es/table/base/header.d.ts +6 -2
- package/es/table/base/header.js +41 -22
- package/es/table/base/helpers/SpanManager.js +1 -1
- package/es/table/base/helpers/TableDOMUtils.d.ts +3 -0
- package/es/table/base/helpers/TableDOMUtils.js +23 -5
- package/es/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
- package/es/table/base/helpers/getRichVisibleRectsStream.js +216 -0
- package/es/table/base/html-table.d.ts +3 -1
- package/es/table/base/html-table.js +43 -26
- package/es/table/base/interfaces.d.ts +1 -0
- package/es/table/base/renderTemplates.d.ts +1 -0
- package/es/table/base/renderTemplates.js +344 -0
- package/es/table/base/styles.d.ts +24 -0
- package/es/table/base/styles.js +31 -9
- package/es/table/base/table.d.ts +12 -4
- package/es/table/base/table.js +183 -136
- package/es/table/base/utils.d.ts +6 -3
- package/es/table/base/utils.js +27 -6
- package/es/table/common-views.js +3 -3
- package/es/table/pipeline/features/autoFill.js +7 -1
- package/es/table/pipeline/features/columnDrag.js +168 -59
- package/es/table/pipeline/features/columnFilter.js +7 -9
- package/es/table/pipeline/features/columnResizeWidth.d.ts +3 -0
- package/es/table/pipeline/features/columnResizeWidth.js +11 -4
- package/es/table/pipeline/features/contextMenu.js +78 -31
- package/es/table/pipeline/features/filter/Filter.js +74 -37
- 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 +85 -79
- package/es/table/pipeline/features/rangeSelection.d.ts +10 -0
- package/es/table/pipeline/features/rangeSelection.js +231 -0
- package/es/table/pipeline/features/rowDetail.js +39 -16
- package/es/table/pipeline/features/rowGrouping.js +2 -1
- package/es/table/pipeline/features/singleSelect.js +4 -1
- package/es/table/pipeline/features/sort.js +2 -3
- package/es/table/pipeline/features/treeMode.js +4 -4
- package/es/table/pipeline/pipeline.d.ts +8 -0
- package/es/table/pipeline/pipeline.js +49 -5
- package/es/table/pivot/cross-table/buildCrossTable.js +1 -2
- package/es/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -2
- package/es/table/pivot/pivot-utils/builders.js +1 -2
- package/es/table/pivot/pivot-utils/convert-utils.js +5 -4
- package/es/table/transforms/autoWidth.js +1 -2
- package/es/table/transforms/sort.js +1 -2
- package/es/table/transforms/treeMode.js +1 -2
- package/es/table/utils/applyTransforms.js +1 -3
- package/es/table/utils/browserType.d.ts +6 -0
- package/es/table/utils/browserType.js +6 -0
- package/es/table/utils/buildTree.js +4 -5
- package/es/table/utils/collectNodes.js +1 -2
- package/es/table/utils/exportTableAsExcel.js +1 -2
- package/es/table/utils/getTreeDepth.js +1 -2
- package/es/table/utils/groupBy.js +1 -2
- package/es/table/utils/index.d.ts +1 -0
- package/es/table/utils/index.js +2 -1
- package/es/table/utils/layeredSort.js +5 -2
- package/es/table/utils/makeRecursiveMapper.js +4 -5
- package/es/table/utils/others.d.ts +1 -1
- package/es/table/utils/others.js +20 -14
- package/es/table/utils/traverseColumn.js +1 -2
- package/es/table/utils/tree-data-helpers/StrictTreeDataHelper.js +4 -5
- package/es/table/utils/tree-data-helpers/TreeDataHelper.js +4 -5
- package/lib/_utils/formatUtil.js +1 -1
- package/lib/_utils/hooks.js +2 -4
- package/lib/_utils/numberUtil.js +7 -9
- package/lib/_utils/usePopper.js +9 -1
- package/lib/config-provider/configProvider.js +9 -1
- package/lib/config-provider/index.js +5 -5
- package/lib/locale/index.js +14 -6
- package/lib/locale/locale.js +2 -4
- package/lib/table/base/calculations.js +4 -6
- package/lib/table/base/empty.js +11 -3
- package/lib/table/base/header.d.ts +6 -2
- package/lib/table/base/header.js +39 -19
- package/lib/table/base/helpers/SpanManager.js +1 -1
- package/lib/table/base/helpers/TableDOMUtils.d.ts +3 -0
- package/lib/table/base/helpers/TableDOMUtils.js +21 -5
- package/lib/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
- package/lib/table/base/helpers/getRichVisibleRectsStream.js +246 -0
- package/lib/table/base/html-table.d.ts +3 -1
- package/lib/table/base/html-table.js +44 -26
- package/lib/table/base/index.js +4 -4
- package/lib/table/base/interfaces.d.ts +1 -0
- package/lib/table/base/renderTemplates.d.ts +1 -0
- package/lib/table/base/renderTemplates.js +370 -0
- package/lib/table/base/styles.d.ts +24 -0
- package/lib/table/base/styles.js +42 -13
- package/lib/table/base/table.d.ts +12 -4
- package/lib/table/base/table.js +191 -137
- package/lib/table/base/utils.d.ts +6 -3
- package/lib/table/base/utils.js +47 -10
- package/lib/table/common-views.js +3 -3
- package/lib/table/pipeline/features/autoFill.js +9 -2
- package/lib/table/pipeline/features/columnDrag.js +168 -59
- package/lib/table/pipeline/features/columnFilter.js +6 -9
- package/lib/table/pipeline/features/columnResizeWidth.d.ts +3 -0
- package/lib/table/pipeline/features/columnResizeWidth.js +21 -5
- package/lib/table/pipeline/features/contextMenu.js +89 -32
- package/lib/table/pipeline/features/filter/DefaultFilterContent.js +10 -2
- package/lib/table/pipeline/features/filter/Filter.js +88 -37
- package/lib/table/pipeline/features/filter/FilterPanel.js +10 -2
- package/lib/table/pipeline/features/filter/index.js +4 -4
- package/lib/table/pipeline/features/index.d.ts +1 -0
- package/lib/table/pipeline/features/index.js +37 -27
- package/lib/table/pipeline/features/multiSelect.js +81 -75
- package/lib/table/pipeline/features/rangeSelection.d.ts +10 -0
- package/lib/table/pipeline/features/rangeSelection.js +256 -0
- package/lib/table/pipeline/features/rowDetail.js +42 -16
- package/lib/table/pipeline/features/rowGrouping.js +3 -1
- package/lib/table/pipeline/features/singleSelect.js +4 -1
- package/lib/table/pipeline/features/sort.js +2 -4
- package/lib/table/pipeline/features/treeMode.js +6 -6
- package/lib/table/pipeline/index.js +11 -3
- package/lib/table/pipeline/pipeline.d.ts +8 -0
- package/lib/table/pipeline/pipeline.js +50 -7
- package/lib/table/pivot/cross-table/buildCrossTable.js +1 -3
- package/lib/table/pivot/cross-table/index.js +4 -4
- package/lib/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -3
- package/lib/table/pivot/pivot-utils/builders.js +2 -4
- package/lib/table/pivot/pivot-utils/convert-utils.js +7 -5
- package/lib/table/pivot/pivot-utils/index.js +4 -4
- package/lib/table/transforms/autoWidth.js +10 -4
- package/lib/table/transforms/columnResize.js +10 -2
- package/lib/table/transforms/index.js +32 -32
- package/lib/table/transforms/sort.js +10 -4
- package/lib/table/transforms/treeMode.js +9 -3
- package/lib/table/utils/applyTransforms.js +1 -5
- package/lib/table/utils/browserType.d.ts +6 -0
- package/lib/table/utils/browserType.js +13 -0
- package/lib/table/utils/buildTree.js +1 -3
- package/lib/table/utils/collectNodes.js +1 -3
- package/lib/table/utils/copyToClipboard.js +1 -1
- package/lib/table/utils/element.js +3 -3
- package/lib/table/utils/exportTableAsExcel.js +1 -3
- package/lib/table/utils/getTreeDepth.js +1 -3
- package/lib/table/utils/groupBy.js +1 -3
- package/lib/table/utils/index.d.ts +1 -0
- package/lib/table/utils/index.js +57 -49
- package/lib/table/utils/layeredSort.js +6 -2
- package/lib/table/utils/makeRecursiveMapper.js +1 -3
- package/lib/table/utils/others.d.ts +1 -1
- package/lib/table/utils/others.js +23 -18
- package/lib/table/utils/traverseColumn.js +1 -3
- package/lib/table/utils/tree-data-helpers/StrictTreeDataHelper.js +5 -7
- package/lib/table/utils/tree-data-helpers/TreeDataHelper.js +5 -7
- package/package.json +6 -2
- package/dist/kd-table.css +0 -422
- package/dist/kd-table.css.map +0 -1
- package/dist/kd-table.js +0 -38578
- package/dist/kd-table.js.map +0 -1
- package/dist/kd-table.min.css +0 -9
- package/dist/kd-table.min.js +0 -208
- package/dist/kd-table.min.js.map +0 -1
- package/es/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
- package/es/table/base/helpers/__test__/visible-part.test.js +0 -28
- package/es/table/base/helpers/visible-part.d.ts +0 -23
- package/es/table/base/helpers/visible-part.js +0 -58
- package/es/table/pipeline/features/__test__/multiSelect.test.d.ts +0 -1
- package/es/table/pipeline/features/__test__/multiSelect.test.js +0 -152
- package/es/table/pipeline/features/__test__/rowDetail.test.d.ts +0 -1
- package/es/table/pipeline/features/__test__/rowDetail.test.js +0 -223
- package/es/table/pipeline/features/__test__/rowGrouping.test.d.ts +0 -1
- package/es/table/pipeline/features/__test__/rowGrouping.test.js +0 -120
- package/es/table/pipeline/features/__test__/singleSelect.test.d.ts +0 -1
- package/es/table/pipeline/features/__test__/singleSelect.test.js +0 -191
- package/es/table/pipeline/features/__test__/sort.test.d.ts +0 -1
- package/es/table/pipeline/features/__test__/sort.test.js +0 -213
- package/es/table/pipeline/features/__test__/tips.test.d.ts +0 -1
- package/es/table/pipeline/features/__test__/tips.test.js +0 -123
- package/es/table/pipeline/features/__test__/treeMode.test.d.ts +0 -1
- package/es/table/pipeline/features/__test__/treeMode.test.js +0 -202
- package/es/table/pipeline/features/filter/__test__/Filter.test.d.ts +0 -1
- package/es/table/pipeline/features/filter/__test__/Filter.test.js +0 -29
- package/lib/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
- package/lib/table/base/helpers/__test__/visible-part.test.js +0 -31
- package/lib/table/base/helpers/visible-part.d.ts +0 -23
- package/lib/table/base/helpers/visible-part.js +0 -72
- package/lib/table/pipeline/features/__test__/multiSelect.test.d.ts +0 -1
- package/lib/table/pipeline/features/__test__/multiSelect.test.js +0 -163
- package/lib/table/pipeline/features/__test__/rowDetail.test.d.ts +0 -1
- package/lib/table/pipeline/features/__test__/rowDetail.test.js +0 -230
- package/lib/table/pipeline/features/__test__/rowGrouping.test.d.ts +0 -1
- package/lib/table/pipeline/features/__test__/rowGrouping.test.js +0 -129
- package/lib/table/pipeline/features/__test__/singleSelect.test.d.ts +0 -1
- package/lib/table/pipeline/features/__test__/singleSelect.test.js +0 -201
- package/lib/table/pipeline/features/__test__/sort.test.d.ts +0 -1
- package/lib/table/pipeline/features/__test__/sort.test.js +0 -218
- package/lib/table/pipeline/features/__test__/tips.test.d.ts +0 -1
- package/lib/table/pipeline/features/__test__/tips.test.js +0 -133
- package/lib/table/pipeline/features/__test__/treeMode.test.d.ts +0 -1
- package/lib/table/pipeline/features/__test__/treeMode.test.js +0 -206
- package/lib/table/pipeline/features/filter/__test__/Filter.test.d.ts +0 -1
- package/lib/table/pipeline/features/filter/__test__/Filter.test.js +0 -36
|
@@ -1,38 +1,86 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
|
|
1
2
|
import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
|
|
2
3
|
import _taggedTemplateLiteral from "@babel/runtime-corejs3/helpers/taggedTemplateLiteral";
|
|
3
4
|
|
|
4
5
|
var _templateObject;
|
|
5
6
|
|
|
6
|
-
import React from 'react';
|
|
7
|
+
import React, { useEffect } from 'react';
|
|
7
8
|
import { createPortal } from 'react-dom';
|
|
8
9
|
import styled from 'styled-components';
|
|
9
10
|
import { Classes } from '../../../base/styles';
|
|
10
11
|
import FilterPanel from './FilterPanel';
|
|
11
12
|
import DefaultFilterContent from './DefaultFilterContent';
|
|
12
13
|
import { calculatePopupRelative } from '../../../utils';
|
|
13
|
-
|
|
14
|
+
import { addResizeObserver } from '../../../base/utils';
|
|
15
|
+
import cx from 'classnames';
|
|
16
|
+
var HEADER_ICON_OFFSET_Y = 6 + 1; // padding-top + border
|
|
14
17
|
|
|
15
|
-
var HEADER_ICON_OFFSET_X = 16 + 1; //padding-left+ border
|
|
18
|
+
var HEADER_ICON_OFFSET_X = 16 + 1; // padding-left+ border
|
|
16
19
|
|
|
17
|
-
var FilterIconSpanStyle = styled.span(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n position: absolute;\n right: 4px;\n cursor: pointer;\n transform: translateY(-50%);\n top: 50%;\n height: 12px; \n"])));
|
|
20
|
+
var FilterIconSpanStyle = styled.span(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n // position: absolute;\n // right: 4px;\n // cursor: pointer;\n // transform: translateY(-50%);\n // top: 50%;\n // height: 12px; \n"])));
|
|
18
21
|
|
|
19
|
-
function
|
|
20
|
-
var
|
|
21
|
-
size = _ref$size === void 0 ? 12 : _ref$size,
|
|
22
|
-
style = _ref.style,
|
|
23
|
-
className = _ref.className,
|
|
24
|
-
FilterPanelContent = _ref.FilterPanelContent,
|
|
22
|
+
function Panel(_ref) {
|
|
23
|
+
var ele = _ref.ele,
|
|
25
24
|
filterIcon = _ref.filterIcon,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
isFilterActive = _ref.isFilterActive,
|
|
30
|
-
stopClickEventPropagation = _ref.stopClickEventPropagation;
|
|
25
|
+
hidePanel = _ref.hidePanel,
|
|
26
|
+
renderPanelContent = _ref.renderPanelContent;
|
|
27
|
+
var filterPanelRef = React.useRef(null);
|
|
31
28
|
|
|
32
|
-
var _React$useState = React.useState(
|
|
29
|
+
var _React$useState = React.useState(calculatePopupRelative(ele, document.body, {
|
|
30
|
+
x: HEADER_ICON_OFFSET_X,
|
|
31
|
+
y: HEADER_ICON_OFFSET_Y
|
|
32
|
+
})),
|
|
33
33
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
position = _React$useState2[0],
|
|
35
|
+
setPosition = _React$useState2[1];
|
|
36
|
+
|
|
37
|
+
var style = {
|
|
38
|
+
position: 'absolute',
|
|
39
|
+
zIndex: 1050
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
var handleFilterPanelResize = function handleFilterPanelResize(resize) {
|
|
43
|
+
setPosition(calculatePopupRelative(ele, document.body, {
|
|
44
|
+
x: HEADER_ICON_OFFSET_X,
|
|
45
|
+
y: HEADER_ICON_OFFSET_Y
|
|
46
|
+
}));
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
useEffect(function () {
|
|
50
|
+
var resizeObserver = addResizeObserver(filterPanelRef.current.children[0], handleFilterPanelResize);
|
|
51
|
+
return function () {
|
|
52
|
+
resizeObserver && resizeObserver.disconnect();
|
|
53
|
+
};
|
|
54
|
+
}, []);
|
|
55
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
56
|
+
ref: filterPanelRef
|
|
57
|
+
}, /*#__PURE__*/React.createElement(FilterPanel, {
|
|
58
|
+
style: style,
|
|
59
|
+
onClose: hidePanel,
|
|
60
|
+
position: position,
|
|
61
|
+
filterIcon: filterIcon
|
|
62
|
+
}, renderPanelContent()));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function Filter(_ref2) {
|
|
66
|
+
var _cx;
|
|
67
|
+
|
|
68
|
+
var _ref2$size = _ref2.size,
|
|
69
|
+
size = _ref2$size === void 0 ? 12 : _ref2$size,
|
|
70
|
+
style = _ref2.style,
|
|
71
|
+
className = _ref2.className,
|
|
72
|
+
FilterPanelContent = _ref2.FilterPanelContent,
|
|
73
|
+
filterIcon = _ref2.filterIcon,
|
|
74
|
+
setFilter = _ref2.setFilter,
|
|
75
|
+
setFilterModel = _ref2.setFilterModel,
|
|
76
|
+
filterModel = _ref2.filterModel,
|
|
77
|
+
isFilterActive = _ref2.isFilterActive,
|
|
78
|
+
stopClickEventPropagation = _ref2.stopClickEventPropagation;
|
|
79
|
+
|
|
80
|
+
var _React$useState3 = React.useState(false),
|
|
81
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
82
|
+
showPanel = _React$useState4[0],
|
|
83
|
+
setShowPanel = _React$useState4[1];
|
|
36
84
|
|
|
37
85
|
var iconRef = React.useRef(null);
|
|
38
86
|
|
|
@@ -62,23 +110,6 @@ function Filter(_ref) {
|
|
|
62
110
|
}
|
|
63
111
|
};
|
|
64
112
|
|
|
65
|
-
var renderPanel = function renderPanel(ele) {
|
|
66
|
-
var position = calculatePopupRelative(ele, document.body, {
|
|
67
|
-
x: HEADER_ICON_OFFSET_X,
|
|
68
|
-
y: HEADER_ICON_OFFSET_Y
|
|
69
|
-
});
|
|
70
|
-
var style = {
|
|
71
|
-
position: 'absolute',
|
|
72
|
-
zIndex: 1050
|
|
73
|
-
};
|
|
74
|
-
return /*#__PURE__*/React.createElement(FilterPanel, {
|
|
75
|
-
style: style,
|
|
76
|
-
onClose: hidePanel,
|
|
77
|
-
position: position,
|
|
78
|
-
filterIcon: filterIcon
|
|
79
|
-
}, renderPanelContent());
|
|
80
|
-
};
|
|
81
|
-
|
|
82
113
|
var handleIconClick = function handleIconClick(e) {
|
|
83
114
|
if (stopClickEventPropagation) {
|
|
84
115
|
e.stopPropagation();
|
|
@@ -87,9 +118,10 @@ function Filter(_ref) {
|
|
|
87
118
|
setShowPanel(true);
|
|
88
119
|
};
|
|
89
120
|
|
|
121
|
+
var iconClassName = cx((_cx = {}, _defineProperty(_cx, className, true), _defineProperty(_cx, 'filter-panel-open', showPanel), _cx));
|
|
90
122
|
return /*#__PURE__*/React.createElement(FilterIconSpanStyle, {
|
|
91
123
|
style: style,
|
|
92
|
-
className:
|
|
124
|
+
className: iconClassName,
|
|
93
125
|
onMouseDown: handleMouseDown,
|
|
94
126
|
ref: iconRef
|
|
95
127
|
}, /*#__PURE__*/React.createElement("span", {
|
|
@@ -105,7 +137,12 @@ function Filter(_ref) {
|
|
|
105
137
|
"aria-hidden": "true"
|
|
106
138
|
}, /*#__PURE__*/React.createElement("path", {
|
|
107
139
|
d: "M349 838c0 17.7 14.2 32 31.8 32h262.4c17.6 0 31.8-14.3\n 31.8-32V642H349v196zm531.1-684H143.9c-24.5 0-39.8 26.7-27.5\n 48l221.3 376h348.8l221.3-376c12.1-21.3-3.2-48-27.7-48z"
|
|
108
|
-
}))), showPanel && /*#__PURE__*/createPortal(
|
|
140
|
+
}))), showPanel && /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement(Panel, {
|
|
141
|
+
ele: iconRef.current,
|
|
142
|
+
filterIcon: filterIcon,
|
|
143
|
+
hidePanel: hidePanel,
|
|
144
|
+
renderPanelContent: renderPanelContent
|
|
145
|
+
}), document.body));
|
|
109
146
|
}
|
|
110
147
|
|
|
111
148
|
export default Filter;
|
|
@@ -14,3 +14,4 @@ export { columnDrag, ColumnDragOptions } from './columnDrag';
|
|
|
14
14
|
export { columnResize, ColumnResizeOptions } from './columnResizeWidth';
|
|
15
15
|
export { contextMenu, ContextMenuFeatureOptions } from './contextMenu';
|
|
16
16
|
export { filter, FilterFeatureOptions } from './columnFilter';
|
|
17
|
+
export { rangeSelection, RangeSelectionFeatureOptions } from './rangeSelection';
|
|
@@ -13,4 +13,5 @@ export { treeSelect } from './treeSelect';
|
|
|
13
13
|
export { columnDrag } from './columnDrag';
|
|
14
14
|
export { columnResize } from './columnResizeWidth';
|
|
15
15
|
export { contextMenu } from './contextMenu';
|
|
16
|
-
export { filter } from './columnFilter';
|
|
16
|
+
export { filter } from './columnFilter';
|
|
17
|
+
export { rangeSelection } from './rangeSelection';
|
|
@@ -9,8 +9,6 @@ import { mergeCellProps } from '../../utils';
|
|
|
9
9
|
export function multiSelect() {
|
|
10
10
|
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
11
11
|
return function multiSelectStep(pipeline) {
|
|
12
|
-
var _context;
|
|
13
|
-
|
|
14
12
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
15
13
|
|
|
16
14
|
var stateKey = 'multiSelect';
|
|
@@ -54,94 +52,102 @@ export function multiSelect() {
|
|
|
54
52
|
allKeys.push(rowKey);
|
|
55
53
|
}
|
|
56
54
|
});
|
|
57
|
-
var set = new _Set(value);
|
|
58
|
-
var isAllChecked = allKeys.length > 0 && allKeys.every(function (key) {
|
|
59
|
-
return set.has(key);
|
|
60
|
-
});
|
|
61
|
-
var isAnyChecked = allKeys.some(function (key) {
|
|
62
|
-
return set.has(key);
|
|
63
|
-
});
|
|
64
|
-
var defaultCheckboxColumnTitle = /*#__PURE__*/React.createElement(Checkbox, {
|
|
65
|
-
checked: isAllChecked,
|
|
66
|
-
indeterminate: !isAllChecked && isAnyChecked,
|
|
67
|
-
onChange: function onChange(_) {
|
|
68
|
-
if (isAllChecked) {
|
|
69
|
-
_onChange(arrayUtils.diff(value, allKeys), '', allKeys, 'uncheck-all');
|
|
70
|
-
} else {
|
|
71
|
-
_onChange(arrayUtils.merge(value, allKeys), '', allKeys, 'check-all');
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
});
|
|
55
|
+
var set = new _Set(value); // todo: 暂使用hidden隐藏选择列 后续增加配置
|
|
75
56
|
|
|
76
|
-
var
|
|
77
|
-
name: '是否选中',
|
|
78
|
-
title: defaultCheckboxColumnTitle,
|
|
79
|
-
width: 50,
|
|
80
|
-
align: 'center'
|
|
81
|
-
}, opts.checkboxColumn), {
|
|
82
|
-
getCellProps: function getCellProps(value, row, rowIndex) {
|
|
83
|
-
var _a, _b;
|
|
84
|
-
|
|
85
|
-
var rowKey = internals.safeGetRowKey(primaryKey, row, rowIndex);
|
|
86
|
-
var checkboxCellProps = {};
|
|
87
|
-
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);
|
|
88
|
-
|
|
89
|
-
if (fullKeySet.has(rowKey) && clickArea === 'cell') {
|
|
90
|
-
var prevChecked = set.has(rowKey);
|
|
91
|
-
var disabled = isDisabled(row, rowIndex);
|
|
92
|
-
checkboxCellProps = {
|
|
93
|
-
style: {
|
|
94
|
-
cursor: disabled ? 'not-allowed' : 'pointer'
|
|
95
|
-
},
|
|
96
|
-
onClick: disabled ? undefined : function (e) {
|
|
97
|
-
if (opts.stopClickEventPropagation) {
|
|
98
|
-
e.stopPropagation();
|
|
99
|
-
}
|
|
57
|
+
var hiddenSelectColumn = opts.checkboxColumn && opts.checkboxColumn.hidden === true;
|
|
100
58
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
59
|
+
if (!hiddenSelectColumn) {
|
|
60
|
+
var _context;
|
|
61
|
+
|
|
62
|
+
var isAllChecked = allKeys.length > 0 && allKeys.every(function (key) {
|
|
63
|
+
return set.has(key);
|
|
64
|
+
});
|
|
65
|
+
var isAnyChecked = allKeys.some(function (key) {
|
|
66
|
+
return set.has(key);
|
|
67
|
+
});
|
|
68
|
+
var defaultCheckboxColumnTitle = /*#__PURE__*/React.createElement(Checkbox, {
|
|
69
|
+
checked: isAllChecked,
|
|
70
|
+
indeterminate: !isAllChecked && isAnyChecked,
|
|
71
|
+
onChange: function onChange(_) {
|
|
72
|
+
if (isAllChecked) {
|
|
73
|
+
_onChange(arrayUtils.diff(value, allKeys), '', allKeys, 'uncheck-all');
|
|
74
|
+
} else {
|
|
75
|
+
_onChange(arrayUtils.merge(value, allKeys), '', allKeys, 'check-all');
|
|
76
|
+
}
|
|
104
77
|
}
|
|
78
|
+
});
|
|
105
79
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
var
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
80
|
+
var checkboxColumn = _extends(_extends({
|
|
81
|
+
name: '是否选中',
|
|
82
|
+
title: defaultCheckboxColumnTitle,
|
|
83
|
+
width: 50,
|
|
84
|
+
align: 'center'
|
|
85
|
+
}, opts.checkboxColumn), {
|
|
86
|
+
getCellProps: function getCellProps(value, row, rowIndex) {
|
|
87
|
+
var _a, _b;
|
|
88
|
+
|
|
89
|
+
var rowKey = internals.safeGetRowKey(primaryKey, row, rowIndex);
|
|
90
|
+
var checkboxCellProps = {};
|
|
91
|
+
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);
|
|
92
|
+
|
|
93
|
+
if (fullKeySet.has(rowKey) && clickArea === 'cell') {
|
|
94
|
+
var prevChecked = set.has(rowKey);
|
|
95
|
+
var disabled = isDisabled(row, rowIndex);
|
|
96
|
+
checkboxCellProps = {
|
|
97
|
+
style: {
|
|
98
|
+
cursor: disabled ? 'not-allowed' : 'pointer'
|
|
99
|
+
},
|
|
100
|
+
onClick: disabled ? undefined : function (e) {
|
|
101
|
+
if (opts.stopClickEventPropagation) {
|
|
102
|
+
e.stopPropagation();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
onCheckboxChange(prevChecked, rowKey, e.shiftKey);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return mergeCellProps(preCellProps, checkboxCellProps);
|
|
111
|
+
},
|
|
112
|
+
render: function render(_, row, rowIndex) {
|
|
113
|
+
var key = internals.safeGetRowKey(primaryKey, row, rowIndex);
|
|
114
|
+
var checked = set.has(key);
|
|
115
|
+
return /*#__PURE__*/React.createElement(Checkbox, {
|
|
116
|
+
checked: checked,
|
|
117
|
+
disabled: isDisabled(row, rowIndex),
|
|
118
|
+
onChange: clickArea === 'checkbox' ? function (arg1, arg2) {
|
|
119
|
+
var _a; // 这里要同时兼容 antd 和 fusion 的用法
|
|
120
|
+
// fusion: arg2?.nativeEvent
|
|
121
|
+
// antd: arg1.nativeEvent
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
var nativeEvent = (_a = arg2 === null || arg2 === void 0 ? void 0 : arg2.nativeEvent) !== null && _a !== void 0 ? _a : arg1.nativeEvent;
|
|
125
|
+
|
|
126
|
+
if (nativeEvent) {
|
|
127
|
+
if (opts.stopClickEventPropagation) {
|
|
128
|
+
nativeEvent.stopPropagation();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
onCheckboxChange(checked, key, nativeEvent.shiftKey);
|
|
125
132
|
}
|
|
133
|
+
} : undefined
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
});
|
|
126
137
|
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
} : undefined
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
});
|
|
138
|
+
var nextColumns = _sliceInstanceProperty(_context = pipeline.getColumns()).call(_context);
|
|
133
139
|
|
|
134
|
-
|
|
140
|
+
var checkboxPlacement = (_l = opts.checkboxPlacement) !== null && _l !== void 0 ? _l : 'start';
|
|
135
141
|
|
|
136
|
-
|
|
142
|
+
if (checkboxPlacement === 'start') {
|
|
143
|
+
nextColumns.unshift(checkboxColumn);
|
|
144
|
+
} else {
|
|
145
|
+
nextColumns.push(checkboxColumn);
|
|
146
|
+
}
|
|
137
147
|
|
|
138
|
-
|
|
139
|
-
nextColumns.unshift(checkboxColumn);
|
|
140
|
-
} else {
|
|
141
|
-
nextColumns.push(checkboxColumn);
|
|
148
|
+
pipeline.columns(nextColumns);
|
|
142
149
|
}
|
|
143
150
|
|
|
144
|
-
pipeline.columns(nextColumns);
|
|
145
151
|
pipeline.appendRowPropsGetter(function (row, rowIndex) {
|
|
146
152
|
var rowKey = internals.safeGetRowKey(primaryKey, row, rowIndex);
|
|
147
153
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TablePipeline } from '../pipeline';
|
|
2
|
+
export interface RangeSelectionFeatureOptions {
|
|
3
|
+
/** 范围选中回调函数 */
|
|
4
|
+
rangeSelectedChange?(params: any): void;
|
|
5
|
+
/** 是否阻止keydown的默认行为 */
|
|
6
|
+
preventkDefaultOfKeyDownEvent?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const rangeSelectionKey = "rangeSelection";
|
|
9
|
+
export declare const lastClickCell = "lastClickCell";
|
|
10
|
+
export declare function rangeSelection(opts: RangeSelectionFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime-corejs3/helpers/typeof";
|
|
2
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
|
|
3
|
+
import _extends from "@babel/runtime-corejs3/helpers/extends";
|
|
4
|
+
import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
|
|
5
|
+
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
|
|
6
|
+
import { mergeCellProps, makeRecursiveMapper, isElementInEventPath, collectNodes } from '../../utils';
|
|
7
|
+
import { findByTree } from '../../utils/others';
|
|
8
|
+
import { fromEvent } from 'rxjs';
|
|
9
|
+
import { map, takeUntil } from 'rxjs/operators';
|
|
10
|
+
import { Classes } from '../../base/styles';
|
|
11
|
+
import cx from 'classnames';
|
|
12
|
+
export var rangeSelectionKey = 'rangeSelection';
|
|
13
|
+
export var lastClickCell = 'lastClickCell';
|
|
14
|
+
export function rangeSelection(opts) {
|
|
15
|
+
return function step(pipeline) {
|
|
16
|
+
var SCROLL_SIZE = 30;
|
|
17
|
+
var tableBody = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.tableBody;
|
|
18
|
+
|
|
19
|
+
if (!tableBody) {
|
|
20
|
+
return pipeline;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var columns = pipeline.getColumns();
|
|
24
|
+
|
|
25
|
+
var rangeSelectedChange = function rangeSelectedChange(rangeSelection) {
|
|
26
|
+
var _a;
|
|
27
|
+
|
|
28
|
+
pipeline.setStateAtKey(rangeSelectionKey, rangeSelection);
|
|
29
|
+
(_a = opts === null || opts === void 0 ? void 0 : opts.rangeSelectedChange) === null || _a === void 0 ? void 0 : _a.call(opts, rangeSelection);
|
|
30
|
+
}; // if (!pipeline.getFeatureOptions(rangeSelectionKey)) {
|
|
31
|
+
// pipeline.setFeatureOptions(rangeSelectionKey, {
|
|
32
|
+
// optionKey: rangeSelectionKey,
|
|
33
|
+
// rangeSelectedChange: rangeSelectedChange
|
|
34
|
+
// })
|
|
35
|
+
// }
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
var setRangeSelection = function setRangeSelection(startDragCell, draggingCell) {
|
|
39
|
+
if (!startDragCell || !draggingCell || isSameCell(startDragCell, draggingCell)) return;
|
|
40
|
+
var rangeColumns = getRangeColumns(startDragCell, draggingCell, columns);
|
|
41
|
+
var isTopToBottom = startDragCell.rowIndex <= draggingCell.rowIndex;
|
|
42
|
+
var rangeSelection = {
|
|
43
|
+
startRow: isTopToBottom ? startDragCell.rowIndex : startDragCell.rowIndex + startDragCell.rowSpan - 1,
|
|
44
|
+
endRow: isTopToBottom ? draggingCell.rowIndex + draggingCell.rowSpan - 1 : draggingCell.rowIndex,
|
|
45
|
+
columns: rangeColumns,
|
|
46
|
+
startColumn: startDragCell.column
|
|
47
|
+
};
|
|
48
|
+
rangeSelectedChange(rangeSelection);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
var shiftKeySelect = function shiftKeySelect(event) {
|
|
52
|
+
var target = event.target;
|
|
53
|
+
var clickCell = getTargetCell(target, columns);
|
|
54
|
+
|
|
55
|
+
if (clickCell) {
|
|
56
|
+
if (event.shiftKey) {
|
|
57
|
+
var _lastClickCell = pipeline.getStateAtKey(lastClickCell);
|
|
58
|
+
|
|
59
|
+
if (_lastClickCell) {
|
|
60
|
+
setRangeSelection(_lastClickCell, clickCell);
|
|
61
|
+
} else {
|
|
62
|
+
// 第一次进来就按住shift键,这时候要记住点击的单元格
|
|
63
|
+
pipeline.setStateAtKey(lastClickCell, clickCell);
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
pipeline.setStateAtKey(lastClickCell, clickCell);
|
|
67
|
+
rangeSelectedChange(null);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
var onMouseDown = function onMouseDown(mouseDownEvent) {
|
|
73
|
+
if (mouseDownEvent.button !== 0 || !isElementInEventPath(tableBody, mouseDownEvent.nativeEvent)) return; // mouseDownEvent.preventDefault()
|
|
74
|
+
// shift + 点击选中
|
|
75
|
+
|
|
76
|
+
shiftKeySelect(mouseDownEvent);
|
|
77
|
+
var target = mouseDownEvent.target;
|
|
78
|
+
var startDragCell = getTargetCell(target, columns);
|
|
79
|
+
var mousemove$ = fromEvent(window, 'mousemove');
|
|
80
|
+
var mouseup$ = fromEvent(window, 'mouseup');
|
|
81
|
+
var tableBodyClientRect = tableBody.getBoundingClientRect();
|
|
82
|
+
|
|
83
|
+
var updateScrollPosition = function updateScrollPosition(client) {
|
|
84
|
+
var clientX = client.clientX,
|
|
85
|
+
clientY = client.clientY;
|
|
86
|
+
var left = tableBodyClientRect.left,
|
|
87
|
+
top = tableBodyClientRect.top,
|
|
88
|
+
height = tableBodyClientRect.height,
|
|
89
|
+
width = tableBodyClientRect.width;
|
|
90
|
+
|
|
91
|
+
if (clientX + SCROLL_SIZE >= left + width) {
|
|
92
|
+
pipeline.ref.current.domHelper.virtual.scrollLeft += SCROLL_SIZE;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (clientX - SCROLL_SIZE <= left) {
|
|
96
|
+
pipeline.ref.current.domHelper.virtual.scrollLeft -= SCROLL_SIZE;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (clientY + SCROLL_SIZE >= top + height) {
|
|
100
|
+
pipeline.ref.current.domHelper.tableBody.scrollTop += SCROLL_SIZE;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (clientY + SCROLL_SIZE <= top) {
|
|
104
|
+
pipeline.ref.current.domHelper.tableBody.scrollTop -= SCROLL_SIZE;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
var rangeSelected$ = mousemove$.pipe(map(function (mouseMoveEvent) {
|
|
109
|
+
var target = mouseMoveEvent.target || mouseMoveEvent.srcElement;
|
|
110
|
+
var draggingCell = getTargetCell(target, columns);
|
|
111
|
+
var client = {
|
|
112
|
+
clientX: mouseMoveEvent.clientX,
|
|
113
|
+
clientY: mouseMoveEvent.clientY
|
|
114
|
+
};
|
|
115
|
+
updateScrollPosition(client);
|
|
116
|
+
return {
|
|
117
|
+
startDragCell: startDragCell,
|
|
118
|
+
draggingCell: draggingCell
|
|
119
|
+
};
|
|
120
|
+
}), takeUntil(mouseup$));
|
|
121
|
+
rangeSelected$.subscribe(function (_ref) {
|
|
122
|
+
var startDragCell = _ref.startDragCell,
|
|
123
|
+
draggingCell = _ref.draggingCell;
|
|
124
|
+
setRangeSelection(startDragCell, draggingCell);
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
var onKeyDown = function onKeyDown(e) {
|
|
129
|
+
if ((e.ctrlKey || e.metaKey) && e.key === 'a') {
|
|
130
|
+
var rowLen = pipeline.getDataSource().length;
|
|
131
|
+
|
|
132
|
+
if (columns.length && rowLen) {
|
|
133
|
+
opts.preventkDefaultOfKeyDownEvent !== false && e.preventDefault();
|
|
134
|
+
rangeSelectedChange({
|
|
135
|
+
startRow: 0,
|
|
136
|
+
endRow: rowLen - 1,
|
|
137
|
+
columns: columns,
|
|
138
|
+
startColumn: columns[0]
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
pipeline.addTableProps({
|
|
145
|
+
onMouseDown: onMouseDown,
|
|
146
|
+
onKeyDown: onKeyDown,
|
|
147
|
+
tabIndex: -1
|
|
148
|
+
}); // todo: 后面可以把mousedown放到一个流里面
|
|
149
|
+
|
|
150
|
+
return pipeline.mapColumns(makeRecursiveMapper(function (col) {
|
|
151
|
+
var _context;
|
|
152
|
+
|
|
153
|
+
var rangeSelection = pipeline.getStateAtKey(rangeSelectionKey);
|
|
154
|
+
if (!rangeSelection || _findIndexInstanceProperty(_context = rangeSelection.columns).call(_context, function (selectedCol) {
|
|
155
|
+
return selectedCol.code === col.code;
|
|
156
|
+
}) === -1) return col;
|
|
157
|
+
var prevGetCellProps = col.getCellProps;
|
|
158
|
+
return _extends(_extends({}, col), {
|
|
159
|
+
getCellProps: function getCellProps(value, record, rowIndex) {
|
|
160
|
+
var _cx;
|
|
161
|
+
|
|
162
|
+
var prevCellProps = prevGetCellProps === null || prevGetCellProps === void 0 ? void 0 : prevGetCellProps(value, record, rowIndex);
|
|
163
|
+
var startRow = rangeSelection.startRow,
|
|
164
|
+
endRow = rangeSelection.endRow,
|
|
165
|
+
columns = rangeSelection.columns;
|
|
166
|
+
var startIndex = startRow < endRow ? startRow : endRow;
|
|
167
|
+
var endIndex = startRow < endRow ? endRow : startRow;
|
|
168
|
+
var startCol = columns[0];
|
|
169
|
+
var endCol = columns[columns.length - 1];
|
|
170
|
+
var match = rowIndex >= startIndex && rowIndex <= endIndex;
|
|
171
|
+
var className = cx((_cx = {}, _defineProperty(_cx, Classes.tableCellRangeSelected, match), _defineProperty(_cx, Classes.tableCellRangeTop, rowIndex === startIndex), _defineProperty(_cx, Classes.tableCellRangeLeft, col.code === startCol.code && match), _defineProperty(_cx, Classes.tableCellRangeBottom, rowIndex === endIndex), _defineProperty(_cx, Classes.tableCellRangeRight, col.code === endCol.code && match), _cx));
|
|
172
|
+
return mergeCellProps(prevCellProps, {
|
|
173
|
+
className: className
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}));
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
function getTargetCell(target, columns) {
|
|
182
|
+
while (target) {
|
|
183
|
+
if (target.getAttribute('data-role') === 'table-cell') {
|
|
184
|
+
var _ret = function () {
|
|
185
|
+
var columnCode = target.getAttribute('data-code');
|
|
186
|
+
var column = findByTree(columns, function (item, index) {
|
|
187
|
+
return item.code === columnCode;
|
|
188
|
+
});
|
|
189
|
+
if (!column) return {
|
|
190
|
+
v: null
|
|
191
|
+
};
|
|
192
|
+
return {
|
|
193
|
+
v: {
|
|
194
|
+
rowIndex: parseInt(target.getAttribute('data-rowindex')),
|
|
195
|
+
rowSpan: parseInt(target.getAttribute('rowspan') || 1),
|
|
196
|
+
code: columnCode,
|
|
197
|
+
column: column
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}();
|
|
201
|
+
|
|
202
|
+
if (_typeof(_ret) === "object") return _ret.v;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
target = target.parentElement;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function isSameCell(cell1, cell2) {
|
|
212
|
+
return cell1.rowIndex === cell2.rowIndex && cell1.code === cell2.code;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function getRangeColumns(startCell, endCell, columns) {
|
|
216
|
+
var flatColumns = collectNodes(columns, 'leaf-only');
|
|
217
|
+
|
|
218
|
+
var startIndex = _findIndexInstanceProperty(flatColumns).call(flatColumns, function (col) {
|
|
219
|
+
return col.code === startCell.code;
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
var endIndex = _findIndexInstanceProperty(flatColumns).call(flatColumns, function (col) {
|
|
223
|
+
return col.code === endCell.code;
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
if (startIndex < endIndex) {
|
|
227
|
+
return _sliceInstanceProperty(flatColumns).call(flatColumns, startIndex, endIndex + 1);
|
|
228
|
+
} else {
|
|
229
|
+
return _sliceInstanceProperty(flatColumns).call(flatColumns, endIndex, startIndex + 1);
|
|
230
|
+
}
|
|
231
|
+
}
|