@kdcloudjs/table 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +34 -33
  3. package/dist/@kdcloudjs/table.css +1 -1
  4. package/dist/@kdcloudjs/table.css.map +1 -1
  5. package/dist/@kdcloudjs/table.js +6323 -3240
  6. package/dist/@kdcloudjs/table.js.map +1 -1
  7. package/dist/@kdcloudjs/table.min.css +1 -1
  8. package/dist/@kdcloudjs/table.min.js +32 -24
  9. package/dist/@kdcloudjs/table.min.js.map +1 -1
  10. package/es/_utils/hooks.js +1 -2
  11. package/es/_utils/numberUtil.js +3 -4
  12. package/es/locale/locale.js +1 -2
  13. package/es/table/base/calculations.js +2 -3
  14. package/es/table/base/header.d.ts +6 -2
  15. package/es/table/base/header.js +36 -13
  16. package/es/table/base/helpers/SpanManager.js +1 -1
  17. package/es/table/base/helpers/TableDOMUtils.d.ts +3 -0
  18. package/es/table/base/helpers/TableDOMUtils.js +23 -5
  19. package/es/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
  20. package/es/table/base/helpers/getRichVisibleRectsStream.js +216 -0
  21. package/es/table/base/html-table.d.ts +3 -1
  22. package/es/table/base/html-table.js +34 -8
  23. package/es/table/base/interfaces.d.ts +1 -0
  24. package/es/table/base/renderTemplates.d.ts +1 -0
  25. package/es/table/base/renderTemplates.js +344 -0
  26. package/es/table/base/styles.d.ts +14 -0
  27. package/es/table/base/styles.js +20 -8
  28. package/es/table/base/table.d.ts +12 -4
  29. package/es/table/base/table.js +183 -136
  30. package/es/table/base/utils.d.ts +6 -3
  31. package/es/table/base/utils.js +27 -6
  32. package/es/table/common-views.js +1 -1
  33. package/es/table/pipeline/features/autoFill.js +7 -1
  34. package/es/table/pipeline/features/columnDrag.js +109 -41
  35. package/es/table/pipeline/features/columnFilter.js +7 -9
  36. package/es/table/pipeline/features/columnResizeWidth.d.ts +3 -0
  37. package/es/table/pipeline/features/columnResizeWidth.js +11 -4
  38. package/es/table/pipeline/features/contextMenu.js +42 -10
  39. package/es/table/pipeline/features/filter/Filter.js +74 -37
  40. package/es/table/pipeline/features/index.d.ts +1 -0
  41. package/es/table/pipeline/features/index.js +2 -1
  42. package/es/table/pipeline/features/rangeSelection.d.ts +10 -0
  43. package/es/table/pipeline/features/rangeSelection.js +231 -0
  44. package/es/table/pipeline/features/rowDetail.js +37 -15
  45. package/es/table/pipeline/features/singleSelect.js +4 -1
  46. package/es/table/pipeline/features/sort.js +2 -3
  47. package/es/table/pipeline/features/treeMode.js +1 -2
  48. package/es/table/pipeline/pipeline.d.ts +4 -0
  49. package/es/table/pipeline/pipeline.js +32 -5
  50. package/es/table/pivot/cross-table/buildCrossTable.js +1 -2
  51. package/es/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -2
  52. package/es/table/pivot/pivot-utils/builders.js +1 -2
  53. package/es/table/pivot/pivot-utils/convert-utils.js +1 -2
  54. package/es/table/transforms/autoWidth.js +1 -2
  55. package/es/table/transforms/sort.js +1 -2
  56. package/es/table/transforms/treeMode.js +1 -2
  57. package/es/table/utils/applyTransforms.js +1 -3
  58. package/es/table/utils/browserType.d.ts +6 -0
  59. package/es/table/utils/browserType.js +6 -0
  60. package/es/table/utils/buildTree.js +4 -5
  61. package/es/table/utils/collectNodes.js +1 -2
  62. package/es/table/utils/exportTableAsExcel.js +1 -2
  63. package/es/table/utils/getTreeDepth.js +1 -2
  64. package/es/table/utils/groupBy.js +1 -2
  65. package/es/table/utils/index.d.ts +1 -0
  66. package/es/table/utils/index.js +2 -1
  67. package/es/table/utils/layeredSort.js +5 -2
  68. package/es/table/utils/makeRecursiveMapper.js +4 -5
  69. package/es/table/utils/others.d.ts +1 -1
  70. package/es/table/utils/others.js +20 -14
  71. package/es/table/utils/traverseColumn.js +1 -2
  72. package/es/table/utils/tree-data-helpers/StrictTreeDataHelper.js +4 -5
  73. package/es/table/utils/tree-data-helpers/TreeDataHelper.js +4 -5
  74. package/lib/_utils/formatUtil.js +1 -1
  75. package/lib/_utils/hooks.js +2 -4
  76. package/lib/_utils/numberUtil.js +7 -9
  77. package/lib/_utils/usePopper.js +9 -1
  78. package/lib/config-provider/configProvider.js +9 -1
  79. package/lib/config-provider/index.js +5 -5
  80. package/lib/locale/index.js +14 -6
  81. package/lib/locale/locale.js +2 -4
  82. package/lib/table/base/calculations.js +3 -5
  83. package/lib/table/base/empty.js +9 -1
  84. package/lib/table/base/header.d.ts +6 -2
  85. package/lib/table/base/header.js +33 -10
  86. package/lib/table/base/helpers/SpanManager.js +1 -1
  87. package/lib/table/base/helpers/TableDOMUtils.d.ts +3 -0
  88. package/lib/table/base/helpers/TableDOMUtils.js +21 -5
  89. package/lib/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
  90. package/lib/table/base/helpers/getRichVisibleRectsStream.js +246 -0
  91. package/lib/table/base/html-table.d.ts +3 -1
  92. package/lib/table/base/html-table.js +34 -8
  93. package/lib/table/base/index.js +4 -4
  94. package/lib/table/base/interfaces.d.ts +1 -0
  95. package/lib/table/base/renderTemplates.d.ts +1 -0
  96. package/lib/table/base/renderTemplates.js +370 -0
  97. package/lib/table/base/styles.d.ts +14 -0
  98. package/lib/table/base/styles.js +31 -12
  99. package/lib/table/base/table.d.ts +12 -4
  100. package/lib/table/base/table.js +191 -137
  101. package/lib/table/base/utils.d.ts +6 -3
  102. package/lib/table/base/utils.js +47 -10
  103. package/lib/table/common-views.js +2 -2
  104. package/lib/table/pipeline/features/__test__/sort.test.js +5 -3
  105. package/lib/table/pipeline/features/autoFill.js +9 -2
  106. package/lib/table/pipeline/features/columnDrag.js +108 -40
  107. package/lib/table/pipeline/features/columnFilter.js +6 -9
  108. package/lib/table/pipeline/features/columnResizeWidth.d.ts +3 -0
  109. package/lib/table/pipeline/features/columnResizeWidth.js +21 -5
  110. package/lib/table/pipeline/features/contextMenu.js +53 -11
  111. package/lib/table/pipeline/features/filter/DefaultFilterContent.js +10 -2
  112. package/lib/table/pipeline/features/filter/Filter.js +88 -37
  113. package/lib/table/pipeline/features/filter/FilterPanel.js +10 -2
  114. package/lib/table/pipeline/features/filter/index.js +4 -4
  115. package/lib/table/pipeline/features/index.d.ts +1 -0
  116. package/lib/table/pipeline/features/index.js +37 -27
  117. package/lib/table/pipeline/features/rangeSelection.d.ts +10 -0
  118. package/lib/table/pipeline/features/rangeSelection.js +256 -0
  119. package/lib/table/pipeline/features/rowDetail.js +39 -15
  120. package/lib/table/pipeline/features/singleSelect.js +4 -1
  121. package/lib/table/pipeline/features/sort.js +2 -4
  122. package/lib/table/pipeline/features/treeMode.js +2 -4
  123. package/lib/table/pipeline/index.js +11 -3
  124. package/lib/table/pipeline/pipeline.d.ts +4 -0
  125. package/lib/table/pipeline/pipeline.js +33 -7
  126. package/lib/table/pivot/cross-table/buildCrossTable.js +1 -3
  127. package/lib/table/pivot/cross-table/index.js +4 -4
  128. package/lib/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -3
  129. package/lib/table/pivot/pivot-utils/builders.js +2 -4
  130. package/lib/table/pivot/pivot-utils/convert-utils.js +1 -3
  131. package/lib/table/pivot/pivot-utils/index.js +4 -4
  132. package/lib/table/transforms/autoWidth.js +10 -4
  133. package/lib/table/transforms/columnResize.js +10 -2
  134. package/lib/table/transforms/index.js +32 -32
  135. package/lib/table/transforms/sort.js +10 -4
  136. package/lib/table/transforms/treeMode.js +9 -3
  137. package/lib/table/utils/applyTransforms.js +1 -5
  138. package/lib/table/utils/browserType.d.ts +6 -0
  139. package/lib/table/utils/browserType.js +13 -0
  140. package/lib/table/utils/buildTree.js +1 -3
  141. package/lib/table/utils/collectNodes.js +1 -3
  142. package/lib/table/utils/copyToClipboard.js +1 -1
  143. package/lib/table/utils/element.js +3 -3
  144. package/lib/table/utils/exportTableAsExcel.js +1 -3
  145. package/lib/table/utils/getTreeDepth.js +1 -3
  146. package/lib/table/utils/groupBy.js +1 -3
  147. package/lib/table/utils/index.d.ts +1 -0
  148. package/lib/table/utils/index.js +57 -49
  149. package/lib/table/utils/layeredSort.js +6 -2
  150. package/lib/table/utils/makeRecursiveMapper.js +1 -3
  151. package/lib/table/utils/others.d.ts +1 -1
  152. package/lib/table/utils/others.js +23 -18
  153. package/lib/table/utils/traverseColumn.js +1 -3
  154. package/lib/table/utils/tree-data-helpers/StrictTreeDataHelper.js +5 -7
  155. package/lib/table/utils/tree-data-helpers/TreeDataHelper.js +5 -7
  156. package/package.json +6 -2
  157. package/dist/kd-table.css +0 -422
  158. package/dist/kd-table.css.map +0 -1
  159. package/dist/kd-table.js +0 -38578
  160. package/dist/kd-table.js.map +0 -1
  161. package/dist/kd-table.min.css +0 -9
  162. package/dist/kd-table.min.js +0 -208
  163. package/dist/kd-table.min.js.map +0 -1
  164. package/es/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
  165. package/es/table/base/helpers/__test__/visible-part.test.js +0 -28
  166. package/es/table/base/helpers/visible-part.d.ts +0 -23
  167. package/es/table/base/helpers/visible-part.js +0 -58
  168. package/lib/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
  169. package/lib/table/base/helpers/__test__/visible-part.test.js +0 -31
  170. package/lib/table/base/helpers/visible-part.d.ts +0 -23
  171. package/lib/table/base/helpers/visible-part.js +0 -72
@@ -1,5 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
4
+
5
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
6
+
7
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
8
+
3
9
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
10
 
5
11
  Object.defineProperty(exports, "__esModule", {
@@ -7,11 +13,13 @@ Object.defineProperty(exports, "__esModule", {
7
13
  });
8
14
  exports.default = void 0;
9
15
 
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
17
+
10
18
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
11
19
 
12
20
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/taggedTemplateLiteral"));
13
21
 
14
- var _react = _interopRequireDefault(require("react"));
22
+ var _react = _interopRequireWildcard(require("react"));
15
23
 
16
24
  var _reactDom = require("react-dom");
17
25
 
@@ -25,31 +33,85 @@ var _DefaultFilterContent = _interopRequireDefault(require("./DefaultFilterConte
25
33
 
26
34
  var _utils = require("../../../utils");
27
35
 
36
+ var _utils2 = require("../../../base/utils");
37
+
38
+ var _classnames = _interopRequireDefault(require("classnames"));
39
+
28
40
  var _templateObject;
29
41
 
30
- var HEADER_ICON_OFFSET_Y = 6 + 1; //padding-top + border
42
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
43
+
44
+ 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; }
31
45
 
32
- var HEADER_ICON_OFFSET_X = 16 + 1; //padding-left+ border
46
+ var HEADER_ICON_OFFSET_Y = 6 + 1; // padding-top + border
33
47
 
34
- var FilterIconSpanStyle = _styledComponents.default.span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n position: absolute;\n right: 4px;\n cursor: pointer;\n transform: translateY(-50%);\n top: 50%;\n height: 12px; \n"])));
48
+ var HEADER_ICON_OFFSET_X = 16 + 1; // padding-left+ border
35
49
 
36
- function Filter(_ref) {
37
- var _ref$size = _ref.size,
38
- size = _ref$size === void 0 ? 12 : _ref$size,
39
- style = _ref.style,
40
- className = _ref.className,
41
- FilterPanelContent = _ref.FilterPanelContent,
50
+ var FilterIconSpanStyle = _styledComponents.default.span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n // position: absolute;\n // right: 4px;\n // cursor: pointer;\n // transform: translateY(-50%);\n // top: 50%;\n // height: 12px; \n"])));
51
+
52
+ function Panel(_ref) {
53
+ var ele = _ref.ele,
42
54
  filterIcon = _ref.filterIcon,
43
- setFilter = _ref.setFilter,
44
- setFilterModel = _ref.setFilterModel,
45
- filterModel = _ref.filterModel,
46
- isFilterActive = _ref.isFilterActive,
47
- stopClickEventPropagation = _ref.stopClickEventPropagation;
55
+ hidePanel = _ref.hidePanel,
56
+ renderPanelContent = _ref.renderPanelContent;
57
+
58
+ var filterPanelRef = _react.default.useRef(null);
48
59
 
49
- var _React$useState = _react.default.useState(false),
60
+ var _React$useState = _react.default.useState((0, _utils.calculatePopupRelative)(ele, document.body, {
61
+ x: HEADER_ICON_OFFSET_X,
62
+ y: HEADER_ICON_OFFSET_Y
63
+ })),
50
64
  _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
51
- showPanel = _React$useState2[0],
52
- setShowPanel = _React$useState2[1];
65
+ position = _React$useState2[0],
66
+ setPosition = _React$useState2[1];
67
+
68
+ var style = {
69
+ position: 'absolute',
70
+ zIndex: 1050
71
+ };
72
+
73
+ var handleFilterPanelResize = function handleFilterPanelResize(resize) {
74
+ setPosition((0, _utils.calculatePopupRelative)(ele, document.body, {
75
+ x: HEADER_ICON_OFFSET_X,
76
+ y: HEADER_ICON_OFFSET_Y
77
+ }));
78
+ };
79
+
80
+ (0, _react.useEffect)(function () {
81
+ var resizeObserver = (0, _utils2.addResizeObserver)(filterPanelRef.current.children[0], handleFilterPanelResize);
82
+ return function () {
83
+ resizeObserver && resizeObserver.disconnect();
84
+ };
85
+ }, []);
86
+ return /*#__PURE__*/_react.default.createElement("div", {
87
+ ref: filterPanelRef
88
+ }, /*#__PURE__*/_react.default.createElement(_FilterPanel.default, {
89
+ style: style,
90
+ onClose: hidePanel,
91
+ position: position,
92
+ filterIcon: filterIcon
93
+ }, renderPanelContent()));
94
+ }
95
+
96
+ function Filter(_ref2) {
97
+ var _cx;
98
+
99
+ var _ref2$size = _ref2.size,
100
+ size = _ref2$size === void 0 ? 12 : _ref2$size,
101
+ style = _ref2.style,
102
+ className = _ref2.className,
103
+ FilterPanelContent = _ref2.FilterPanelContent,
104
+ filterIcon = _ref2.filterIcon,
105
+ setFilter = _ref2.setFilter,
106
+ setFilterModel = _ref2.setFilterModel,
107
+ filterModel = _ref2.filterModel,
108
+ isFilterActive = _ref2.isFilterActive,
109
+ stopClickEventPropagation = _ref2.stopClickEventPropagation;
110
+
111
+ var _React$useState3 = _react.default.useState(false),
112
+ _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
113
+ showPanel = _React$useState4[0],
114
+ setShowPanel = _React$useState4[1];
53
115
 
54
116
  var iconRef = _react.default.useRef(null);
55
117
 
@@ -79,23 +141,6 @@ function Filter(_ref) {
79
141
  }
80
142
  };
81
143
 
82
- var renderPanel = function renderPanel(ele) {
83
- var position = (0, _utils.calculatePopupRelative)(ele, document.body, {
84
- x: HEADER_ICON_OFFSET_X,
85
- y: HEADER_ICON_OFFSET_Y
86
- });
87
- var style = {
88
- position: 'absolute',
89
- zIndex: 1050
90
- };
91
- return /*#__PURE__*/_react.default.createElement(_FilterPanel.default, {
92
- style: style,
93
- onClose: hidePanel,
94
- position: position,
95
- filterIcon: filterIcon
96
- }, renderPanelContent());
97
- };
98
-
99
144
  var handleIconClick = function handleIconClick(e) {
100
145
  if (stopClickEventPropagation) {
101
146
  e.stopPropagation();
@@ -104,9 +149,10 @@ function Filter(_ref) {
104
149
  setShowPanel(true);
105
150
  };
106
151
 
152
+ var iconClassName = (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, className, true), (0, _defineProperty2.default)(_cx, 'filter-panel-open', showPanel), _cx));
107
153
  return /*#__PURE__*/_react.default.createElement(FilterIconSpanStyle, {
108
154
  style: style,
109
- className: className,
155
+ className: iconClassName,
110
156
  onMouseDown: handleMouseDown,
111
157
  ref: iconRef
112
158
  }, /*#__PURE__*/_react.default.createElement("span", {
@@ -122,7 +168,12 @@ function Filter(_ref) {
122
168
  "aria-hidden": "true"
123
169
  }, /*#__PURE__*/_react.default.createElement("path", {
124
170
  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"
125
- }))), showPanel && /*#__PURE__*/(0, _reactDom.createPortal)(renderPanel(iconRef.current), document.body));
171
+ }))), showPanel && /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react.default.createElement(Panel, {
172
+ ele: iconRef.current,
173
+ filterIcon: filterIcon,
174
+ hidePanel: hidePanel,
175
+ renderPanelContent: renderPanelContent
176
+ }), document.body));
126
177
  }
127
178
 
128
179
  var _default = Filter;
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
3
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
4
+
5
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
6
+
7
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
4
8
 
5
- var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
9
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
6
10
 
7
11
  Object.defineProperty(exports, "__esModule", {
8
12
  value: true
@@ -23,6 +27,10 @@ var _utils = require("../../../utils/");
23
27
 
24
28
  var _templateObject;
25
29
 
30
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
31
+
32
+ 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; }
33
+
26
34
  var FilterPanelStyle = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n flex-direction: column;\n max-height: 450px;\n min-width: 160px;\n border-radius: 2px;\n background-color: #fff;\n box-shadow: 0 0 5px 0 rgba(154,154,154,.5);\n cursor: default;\n\n .popup-header {\n display: flex;\n background-color: #ebedf1;\n\n .popup-header-icon {\n color:#666;\n background-color: #fff;\n padding: 6px 16px 6px 16px;\n display: inline-block;\n border-right: 1px solid transparent;\n border-left: 1px solid transparent;\n border-top: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px;\n }\n }\n\n .popup-body {\n display: flex;\n }\n"])));
27
35
 
28
36
  var useWindowEvents = function useWindowEvents(func, evens) {
@@ -5,10 +5,10 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- Object.defineProperty(exports, "FilterPanel", {
8
+ Object.defineProperty(exports, "DEFAULT_FILTER_OPTIONS", {
9
9
  enumerable: true,
10
10
  get: function get() {
11
- return _FilterPanel.default;
11
+ return _util.DEFAULT_FILTER_OPTIONS;
12
12
  }
13
13
  });
14
14
  Object.defineProperty(exports, "DefaultFilterContent", {
@@ -23,10 +23,10 @@ Object.defineProperty(exports, "Filter", {
23
23
  return _Filter.default;
24
24
  }
25
25
  });
26
- Object.defineProperty(exports, "DEFAULT_FILTER_OPTIONS", {
26
+ Object.defineProperty(exports, "FilterPanel", {
27
27
  enumerable: true,
28
28
  get: function get() {
29
- return _util.DEFAULT_FILTER_OPTIONS;
29
+ return _FilterPanel.default;
30
30
  }
31
31
  });
32
32
 
@@ -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';
@@ -2,6 +2,8 @@
2
2
 
3
3
  var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
4
4
 
5
+ var _sortInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/sort");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
@@ -17,6 +19,12 @@ Object.defineProperty(exports, "buildTree", {
17
19
  return _buildTree.buildTree;
18
20
  }
19
21
  });
22
+ Object.defineProperty(exports, "columnDrag", {
23
+ enumerable: true,
24
+ get: function get() {
25
+ return _columnDrag.columnDrag;
26
+ }
27
+ });
20
28
  Object.defineProperty(exports, "columnHover", {
21
29
  enumerable: true,
22
30
  get: function get() {
@@ -29,82 +37,82 @@ Object.defineProperty(exports, "columnRangeHover", {
29
37
  return _columnRangeHover.columnRangeHover;
30
38
  }
31
39
  });
32
- Object.defineProperty(exports, "multiSelect", {
40
+ Object.defineProperty(exports, "columnResize", {
33
41
  enumerable: true,
34
42
  get: function get() {
35
- return _multiSelect.multiSelect;
43
+ return _columnResizeWidth.columnResize;
36
44
  }
37
45
  });
38
- Object.defineProperty(exports, "rowDetail", {
46
+ Object.defineProperty(exports, "contextMenu", {
39
47
  enumerable: true,
40
48
  get: function get() {
41
- return _rowDetail.rowDetail;
49
+ return _contextMenu.contextMenu;
42
50
  }
43
51
  });
44
- Object.defineProperty(exports, "rowGrouping", {
52
+ Object.defineProperty(exports, "filter", {
45
53
  enumerable: true,
46
54
  get: function get() {
47
- return _rowGrouping.rowGrouping;
55
+ return _filterInstanceProperty(_columnFilter);
48
56
  }
49
57
  });
50
- Object.defineProperty(exports, "singleSelect", {
58
+ Object.defineProperty(exports, "multiSelect", {
51
59
  enumerable: true,
52
60
  get: function get() {
53
- return _singleSelect.singleSelect;
61
+ return _multiSelect.multiSelect;
54
62
  }
55
63
  });
56
- Object.defineProperty(exports, "sort", {
64
+ Object.defineProperty(exports, "rangeSelection", {
57
65
  enumerable: true,
58
66
  get: function get() {
59
- return _sort.sort;
67
+ return _rangeSelection.rangeSelection;
60
68
  }
61
69
  });
62
- Object.defineProperty(exports, "tips", {
70
+ Object.defineProperty(exports, "rowDetail", {
63
71
  enumerable: true,
64
72
  get: function get() {
65
- return _tips.tips;
73
+ return _rowDetail.rowDetail;
66
74
  }
67
75
  });
68
- Object.defineProperty(exports, "treeMode", {
76
+ Object.defineProperty(exports, "rowGrouping", {
69
77
  enumerable: true,
70
78
  get: function get() {
71
- return _treeMode.treeMode;
79
+ return _rowGrouping.rowGrouping;
72
80
  }
73
81
  });
74
- Object.defineProperty(exports, "treeMetaSymbol", {
82
+ Object.defineProperty(exports, "singleSelect", {
75
83
  enumerable: true,
76
84
  get: function get() {
77
- return _treeMode.treeMetaSymbol;
85
+ return _singleSelect.singleSelect;
78
86
  }
79
87
  });
80
- Object.defineProperty(exports, "treeSelect", {
88
+ Object.defineProperty(exports, "sort", {
81
89
  enumerable: true,
82
90
  get: function get() {
83
- return _treeSelect.treeSelect;
91
+ return _sortInstanceProperty(_sort);
84
92
  }
85
93
  });
86
- Object.defineProperty(exports, "columnDrag", {
94
+ Object.defineProperty(exports, "tips", {
87
95
  enumerable: true,
88
96
  get: function get() {
89
- return _columnDrag.columnDrag;
97
+ return _tips.tips;
90
98
  }
91
99
  });
92
- Object.defineProperty(exports, "columnResize", {
100
+ Object.defineProperty(exports, "treeMetaSymbol", {
93
101
  enumerable: true,
94
102
  get: function get() {
95
- return _columnResizeWidth.columnResize;
103
+ return _treeMode.treeMetaSymbol;
96
104
  }
97
105
  });
98
- Object.defineProperty(exports, "contextMenu", {
106
+ Object.defineProperty(exports, "treeMode", {
99
107
  enumerable: true,
100
108
  get: function get() {
101
- return _contextMenu.contextMenu;
109
+ return _treeMode.treeMode;
102
110
  }
103
111
  });
104
- Object.defineProperty(exports, "filter", {
112
+ Object.defineProperty(exports, "treeSelect", {
105
113
  enumerable: true,
106
114
  get: function get() {
107
- return _filterInstanceProperty(_columnFilter);
115
+ return _treeSelect.treeSelect;
108
116
  }
109
117
  });
110
118
 
@@ -138,4 +146,6 @@ var _columnResizeWidth = require("./columnResizeWidth");
138
146
 
139
147
  var _contextMenu = require("./contextMenu");
140
148
 
141
- var _columnFilter = require("./columnFilter");
149
+ var _columnFilter = require("./columnFilter");
150
+
151
+ var _rangeSelection = require("./rangeSelection");
@@ -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,256 @@
1
+ "use strict";
2
+
3
+ var _mapInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/map");
4
+
5
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.lastClickCell = void 0;
11
+ exports.rangeSelection = rangeSelection;
12
+ exports.rangeSelectionKey = void 0;
13
+
14
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/typeof"));
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
17
+
18
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
19
+
20
+ var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find-index"));
21
+
22
+ var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
23
+
24
+ var _utils = require("../../utils");
25
+
26
+ var _others = require("../../utils/others");
27
+
28
+ var _rxjs = require("rxjs");
29
+
30
+ var _operators = require("rxjs/operators");
31
+
32
+ var _styles = require("../../base/styles");
33
+
34
+ var _classnames = _interopRequireDefault(require("classnames"));
35
+
36
+ var rangeSelectionKey = 'rangeSelection';
37
+ exports.rangeSelectionKey = rangeSelectionKey;
38
+ var lastClickCell = 'lastClickCell';
39
+ exports.lastClickCell = lastClickCell;
40
+
41
+ function rangeSelection(opts) {
42
+ return function step(pipeline) {
43
+ var SCROLL_SIZE = 30;
44
+ var tableBody = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.tableBody;
45
+
46
+ if (!tableBody) {
47
+ return pipeline;
48
+ }
49
+
50
+ var columns = pipeline.getColumns();
51
+
52
+ var rangeSelectedChange = function rangeSelectedChange(rangeSelection) {
53
+ var _a;
54
+
55
+ pipeline.setStateAtKey(rangeSelectionKey, rangeSelection);
56
+ (_a = opts === null || opts === void 0 ? void 0 : opts.rangeSelectedChange) === null || _a === void 0 ? void 0 : _a.call(opts, rangeSelection);
57
+ }; // if (!pipeline.getFeatureOptions(rangeSelectionKey)) {
58
+ // pipeline.setFeatureOptions(rangeSelectionKey, {
59
+ // optionKey: rangeSelectionKey,
60
+ // rangeSelectedChange: rangeSelectedChange
61
+ // })
62
+ // }
63
+
64
+
65
+ var setRangeSelection = function setRangeSelection(startDragCell, draggingCell) {
66
+ if (!startDragCell || !draggingCell || isSameCell(startDragCell, draggingCell)) return;
67
+ var rangeColumns = getRangeColumns(startDragCell, draggingCell, columns);
68
+ var isTopToBottom = startDragCell.rowIndex <= draggingCell.rowIndex;
69
+ var rangeSelection = {
70
+ startRow: isTopToBottom ? startDragCell.rowIndex : startDragCell.rowIndex + startDragCell.rowSpan - 1,
71
+ endRow: isTopToBottom ? draggingCell.rowIndex + draggingCell.rowSpan - 1 : draggingCell.rowIndex,
72
+ columns: rangeColumns,
73
+ startColumn: startDragCell.column
74
+ };
75
+ rangeSelectedChange(rangeSelection);
76
+ };
77
+
78
+ var shiftKeySelect = function shiftKeySelect(event) {
79
+ var target = event.target;
80
+ var clickCell = getTargetCell(target, columns);
81
+
82
+ if (clickCell) {
83
+ if (event.shiftKey) {
84
+ var _lastClickCell = pipeline.getStateAtKey(lastClickCell);
85
+
86
+ if (_lastClickCell) {
87
+ setRangeSelection(_lastClickCell, clickCell);
88
+ } else {
89
+ // 第一次进来就按住shift键,这时候要记住点击的单元格
90
+ pipeline.setStateAtKey(lastClickCell, clickCell);
91
+ }
92
+ } else {
93
+ pipeline.setStateAtKey(lastClickCell, clickCell);
94
+ rangeSelectedChange(null);
95
+ }
96
+ }
97
+ };
98
+
99
+ var onMouseDown = function onMouseDown(mouseDownEvent) {
100
+ if (mouseDownEvent.button !== 0 || !(0, _utils.isElementInEventPath)(tableBody, mouseDownEvent.nativeEvent)) return; // mouseDownEvent.preventDefault()
101
+ // shift + 点击选中
102
+
103
+ shiftKeySelect(mouseDownEvent);
104
+ var target = mouseDownEvent.target;
105
+ var startDragCell = getTargetCell(target, columns);
106
+ var mousemove$ = (0, _rxjs.fromEvent)(window, 'mousemove');
107
+ var mouseup$ = (0, _rxjs.fromEvent)(window, 'mouseup');
108
+ var tableBodyClientRect = tableBody.getBoundingClientRect();
109
+
110
+ var updateScrollPosition = function updateScrollPosition(client) {
111
+ var clientX = client.clientX,
112
+ clientY = client.clientY;
113
+ var left = tableBodyClientRect.left,
114
+ top = tableBodyClientRect.top,
115
+ height = tableBodyClientRect.height,
116
+ width = tableBodyClientRect.width;
117
+
118
+ if (clientX + SCROLL_SIZE >= left + width) {
119
+ pipeline.ref.current.domHelper.virtual.scrollLeft += SCROLL_SIZE;
120
+ }
121
+
122
+ if (clientX - SCROLL_SIZE <= left) {
123
+ pipeline.ref.current.domHelper.virtual.scrollLeft -= SCROLL_SIZE;
124
+ }
125
+
126
+ if (clientY + SCROLL_SIZE >= top + height) {
127
+ pipeline.ref.current.domHelper.tableBody.scrollTop += SCROLL_SIZE;
128
+ }
129
+
130
+ if (clientY + SCROLL_SIZE <= top) {
131
+ pipeline.ref.current.domHelper.tableBody.scrollTop -= SCROLL_SIZE;
132
+ }
133
+ };
134
+
135
+ var rangeSelected$ = mousemove$.pipe((0, _mapInstanceProperty(_operators))(function (mouseMoveEvent) {
136
+ var target = mouseMoveEvent.target || mouseMoveEvent.srcElement;
137
+ var draggingCell = getTargetCell(target, columns);
138
+ var client = {
139
+ clientX: mouseMoveEvent.clientX,
140
+ clientY: mouseMoveEvent.clientY
141
+ };
142
+ updateScrollPosition(client);
143
+ return {
144
+ startDragCell: startDragCell,
145
+ draggingCell: draggingCell
146
+ };
147
+ }), (0, _operators.takeUntil)(mouseup$));
148
+ rangeSelected$.subscribe(function (_ref) {
149
+ var startDragCell = _ref.startDragCell,
150
+ draggingCell = _ref.draggingCell;
151
+ setRangeSelection(startDragCell, draggingCell);
152
+ });
153
+ };
154
+
155
+ var onKeyDown = function onKeyDown(e) {
156
+ if ((e.ctrlKey || e.metaKey) && e.key === 'a') {
157
+ var rowLen = pipeline.getDataSource().length;
158
+
159
+ if (columns.length && rowLen) {
160
+ opts.preventkDefaultOfKeyDownEvent !== false && e.preventDefault();
161
+ rangeSelectedChange({
162
+ startRow: 0,
163
+ endRow: rowLen - 1,
164
+ columns: columns,
165
+ startColumn: columns[0]
166
+ });
167
+ }
168
+ }
169
+ };
170
+
171
+ pipeline.addTableProps({
172
+ onMouseDown: onMouseDown,
173
+ onKeyDown: onKeyDown,
174
+ tabIndex: -1
175
+ }); // todo: 后面可以把mousedown放到一个流里面
176
+
177
+ return pipeline.mapColumns((0, _utils.makeRecursiveMapper)(function (col) {
178
+ var _context;
179
+
180
+ var rangeSelection = pipeline.getStateAtKey(rangeSelectionKey);
181
+ if (!rangeSelection || (0, _findIndex.default)(_context = rangeSelection.columns).call(_context, function (selectedCol) {
182
+ return selectedCol.code === col.code;
183
+ }) === -1) return col;
184
+ var prevGetCellProps = col.getCellProps;
185
+ return (0, _extends2.default)((0, _extends2.default)({}, col), {
186
+ getCellProps: function getCellProps(value, record, rowIndex) {
187
+ var _cx;
188
+
189
+ var prevCellProps = prevGetCellProps === null || prevGetCellProps === void 0 ? void 0 : prevGetCellProps(value, record, rowIndex);
190
+ var startRow = rangeSelection.startRow,
191
+ endRow = rangeSelection.endRow,
192
+ columns = rangeSelection.columns;
193
+ var startIndex = startRow < endRow ? startRow : endRow;
194
+ var endIndex = startRow < endRow ? endRow : startRow;
195
+ var startCol = columns[0];
196
+ var endCol = columns[columns.length - 1];
197
+ var match = rowIndex >= startIndex && rowIndex <= endIndex;
198
+ var className = (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, _styles.Classes.tableCellRangeSelected, match), (0, _defineProperty2.default)(_cx, _styles.Classes.tableCellRangeTop, rowIndex === startIndex), (0, _defineProperty2.default)(_cx, _styles.Classes.tableCellRangeLeft, col.code === startCol.code && match), (0, _defineProperty2.default)(_cx, _styles.Classes.tableCellRangeBottom, rowIndex === endIndex), (0, _defineProperty2.default)(_cx, _styles.Classes.tableCellRangeRight, col.code === endCol.code && match), _cx));
199
+ return (0, _utils.mergeCellProps)(prevCellProps, {
200
+ className: className
201
+ });
202
+ }
203
+ });
204
+ }));
205
+ };
206
+ }
207
+
208
+ function getTargetCell(target, columns) {
209
+ while (target) {
210
+ if (target.getAttribute('data-role') === 'table-cell') {
211
+ var _ret = function () {
212
+ var columnCode = target.getAttribute('data-code');
213
+ var column = (0, _others.findByTree)(columns, function (item, index) {
214
+ return item.code === columnCode;
215
+ });
216
+ if (!column) return {
217
+ v: null
218
+ };
219
+ return {
220
+ v: {
221
+ rowIndex: parseInt(target.getAttribute('data-rowindex')),
222
+ rowSpan: parseInt(target.getAttribute('rowspan') || 1),
223
+ code: columnCode,
224
+ column: column
225
+ }
226
+ };
227
+ }();
228
+
229
+ if ((0, _typeof2.default)(_ret) === "object") return _ret.v;
230
+ }
231
+
232
+ target = target.parentElement;
233
+ }
234
+
235
+ return null;
236
+ }
237
+
238
+ function isSameCell(cell1, cell2) {
239
+ return cell1.rowIndex === cell2.rowIndex && cell1.code === cell2.code;
240
+ }
241
+
242
+ function getRangeColumns(startCell, endCell, columns) {
243
+ var flatColumns = (0, _utils.collectNodes)(columns, 'leaf-only');
244
+ var startIndex = (0, _findIndex.default)(flatColumns).call(flatColumns, function (col) {
245
+ return col.code === startCell.code;
246
+ });
247
+ var endIndex = (0, _findIndex.default)(flatColumns).call(flatColumns, function (col) {
248
+ return col.code === endCell.code;
249
+ });
250
+
251
+ if (startIndex < endIndex) {
252
+ return (0, _slice.default)(flatColumns).call(flatColumns, startIndex, endIndex + 1);
253
+ } else {
254
+ return (0, _slice.default)(flatColumns).call(flatColumns, endIndex, startIndex + 1);
255
+ }
256
+ }