@kdcloudjs/table 1.0.0 → 1.0.3

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 (178) 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 +6554 -3389
  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 +3 -4
  14. package/es/table/base/empty.js +2 -2
  15. package/es/table/base/header.d.ts +6 -2
  16. package/es/table/base/header.js +41 -22
  17. package/es/table/base/helpers/SpanManager.js +1 -1
  18. package/es/table/base/helpers/TableDOMUtils.d.ts +3 -0
  19. package/es/table/base/helpers/TableDOMUtils.js +23 -5
  20. package/es/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
  21. package/es/table/base/helpers/getRichVisibleRectsStream.js +216 -0
  22. package/es/table/base/html-table.d.ts +3 -1
  23. package/es/table/base/html-table.js +43 -26
  24. package/es/table/base/interfaces.d.ts +1 -0
  25. package/es/table/base/renderTemplates.d.ts +1 -0
  26. package/es/table/base/renderTemplates.js +344 -0
  27. package/es/table/base/styles.d.ts +24 -0
  28. package/es/table/base/styles.js +31 -9
  29. package/es/table/base/table.d.ts +12 -4
  30. package/es/table/base/table.js +183 -136
  31. package/es/table/base/utils.d.ts +6 -3
  32. package/es/table/base/utils.js +27 -6
  33. package/es/table/common-views.js +3 -3
  34. package/es/table/pipeline/features/__test__/treeMode.test.js +2 -1
  35. package/es/table/pipeline/features/autoFill.js +7 -1
  36. package/es/table/pipeline/features/columnDrag.js +168 -59
  37. package/es/table/pipeline/features/columnFilter.js +7 -9
  38. package/es/table/pipeline/features/columnResizeWidth.d.ts +3 -0
  39. package/es/table/pipeline/features/columnResizeWidth.js +11 -4
  40. package/es/table/pipeline/features/contextMenu.js +78 -31
  41. package/es/table/pipeline/features/filter/Filter.js +74 -37
  42. package/es/table/pipeline/features/index.d.ts +1 -0
  43. package/es/table/pipeline/features/index.js +2 -1
  44. package/es/table/pipeline/features/multiSelect.js +83 -79
  45. package/es/table/pipeline/features/rangeSelection.d.ts +10 -0
  46. package/es/table/pipeline/features/rangeSelection.js +231 -0
  47. package/es/table/pipeline/features/rowDetail.js +39 -16
  48. package/es/table/pipeline/features/rowGrouping.js +2 -1
  49. package/es/table/pipeline/features/singleSelect.js +4 -1
  50. package/es/table/pipeline/features/sort.js +2 -3
  51. package/es/table/pipeline/features/treeMode.js +4 -4
  52. package/es/table/pipeline/pipeline.d.ts +8 -0
  53. package/es/table/pipeline/pipeline.js +49 -5
  54. package/es/table/pivot/cross-table/buildCrossTable.js +1 -2
  55. package/es/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -2
  56. package/es/table/pivot/pivot-utils/builders.js +1 -2
  57. package/es/table/pivot/pivot-utils/convert-utils.js +5 -4
  58. package/es/table/transforms/autoWidth.js +1 -2
  59. package/es/table/transforms/sort.js +1 -2
  60. package/es/table/transforms/treeMode.js +1 -2
  61. package/es/table/utils/applyTransforms.js +1 -3
  62. package/es/table/utils/browserType.d.ts +6 -0
  63. package/es/table/utils/browserType.js +6 -0
  64. package/es/table/utils/buildTree.js +4 -5
  65. package/es/table/utils/collectNodes.js +1 -2
  66. package/es/table/utils/exportTableAsExcel.js +1 -2
  67. package/es/table/utils/getTreeDepth.js +1 -2
  68. package/es/table/utils/groupBy.js +1 -2
  69. package/es/table/utils/index.d.ts +1 -0
  70. package/es/table/utils/index.js +2 -1
  71. package/es/table/utils/layeredSort.js +5 -2
  72. package/es/table/utils/makeRecursiveMapper.js +4 -5
  73. package/es/table/utils/others.d.ts +1 -1
  74. package/es/table/utils/others.js +20 -14
  75. package/es/table/utils/traverseColumn.js +1 -2
  76. package/es/table/utils/tree-data-helpers/StrictTreeDataHelper.js +4 -5
  77. package/es/table/utils/tree-data-helpers/TreeDataHelper.js +4 -5
  78. package/lib/_utils/formatUtil.js +1 -1
  79. package/lib/_utils/hooks.js +2 -4
  80. package/lib/_utils/numberUtil.js +7 -9
  81. package/lib/_utils/usePopper.js +9 -1
  82. package/lib/config-provider/configProvider.js +9 -1
  83. package/lib/config-provider/index.js +5 -5
  84. package/lib/locale/index.js +14 -6
  85. package/lib/locale/locale.js +2 -4
  86. package/lib/table/base/calculations.js +4 -6
  87. package/lib/table/base/empty.js +11 -3
  88. package/lib/table/base/header.d.ts +6 -2
  89. package/lib/table/base/header.js +39 -19
  90. package/lib/table/base/helpers/SpanManager.js +1 -1
  91. package/lib/table/base/helpers/TableDOMUtils.d.ts +3 -0
  92. package/lib/table/base/helpers/TableDOMUtils.js +21 -5
  93. package/lib/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
  94. package/lib/table/base/helpers/getRichVisibleRectsStream.js +246 -0
  95. package/lib/table/base/html-table.d.ts +3 -1
  96. package/lib/table/base/html-table.js +44 -26
  97. package/lib/table/base/index.js +4 -4
  98. package/lib/table/base/interfaces.d.ts +1 -0
  99. package/lib/table/base/renderTemplates.d.ts +1 -0
  100. package/lib/table/base/renderTemplates.js +370 -0
  101. package/lib/table/base/styles.d.ts +24 -0
  102. package/lib/table/base/styles.js +42 -13
  103. package/lib/table/base/table.d.ts +12 -4
  104. package/lib/table/base/table.js +191 -137
  105. package/lib/table/base/utils.d.ts +6 -3
  106. package/lib/table/base/utils.js +47 -10
  107. package/lib/table/common-views.js +3 -3
  108. package/lib/table/pipeline/features/__test__/sort.test.js +5 -3
  109. package/lib/table/pipeline/features/__test__/treeMode.test.js +3 -1
  110. package/lib/table/pipeline/features/autoFill.js +9 -2
  111. package/lib/table/pipeline/features/columnDrag.js +168 -59
  112. package/lib/table/pipeline/features/columnFilter.js +6 -9
  113. package/lib/table/pipeline/features/columnResizeWidth.d.ts +3 -0
  114. package/lib/table/pipeline/features/columnResizeWidth.js +21 -5
  115. package/lib/table/pipeline/features/contextMenu.js +89 -32
  116. package/lib/table/pipeline/features/filter/DefaultFilterContent.js +10 -2
  117. package/lib/table/pipeline/features/filter/Filter.js +88 -37
  118. package/lib/table/pipeline/features/filter/FilterPanel.js +10 -2
  119. package/lib/table/pipeline/features/filter/index.js +4 -4
  120. package/lib/table/pipeline/features/index.d.ts +1 -0
  121. package/lib/table/pipeline/features/index.js +37 -27
  122. package/lib/table/pipeline/features/multiSelect.js +79 -75
  123. package/lib/table/pipeline/features/rangeSelection.d.ts +10 -0
  124. package/lib/table/pipeline/features/rangeSelection.js +256 -0
  125. package/lib/table/pipeline/features/rowDetail.js +42 -16
  126. package/lib/table/pipeline/features/rowGrouping.js +3 -1
  127. package/lib/table/pipeline/features/singleSelect.js +4 -1
  128. package/lib/table/pipeline/features/sort.js +2 -4
  129. package/lib/table/pipeline/features/treeMode.js +6 -6
  130. package/lib/table/pipeline/index.js +11 -3
  131. package/lib/table/pipeline/pipeline.d.ts +8 -0
  132. package/lib/table/pipeline/pipeline.js +50 -7
  133. package/lib/table/pivot/cross-table/buildCrossTable.js +1 -3
  134. package/lib/table/pivot/cross-table/index.js +4 -4
  135. package/lib/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -3
  136. package/lib/table/pivot/pivot-utils/builders.js +2 -4
  137. package/lib/table/pivot/pivot-utils/convert-utils.js +7 -5
  138. package/lib/table/pivot/pivot-utils/index.js +4 -4
  139. package/lib/table/transforms/autoWidth.js +10 -4
  140. package/lib/table/transforms/columnResize.js +10 -2
  141. package/lib/table/transforms/index.js +32 -32
  142. package/lib/table/transforms/sort.js +10 -4
  143. package/lib/table/transforms/treeMode.js +9 -3
  144. package/lib/table/utils/applyTransforms.js +1 -5
  145. package/lib/table/utils/browserType.d.ts +6 -0
  146. package/lib/table/utils/browserType.js +13 -0
  147. package/lib/table/utils/buildTree.js +1 -3
  148. package/lib/table/utils/collectNodes.js +1 -3
  149. package/lib/table/utils/copyToClipboard.js +1 -1
  150. package/lib/table/utils/element.js +3 -3
  151. package/lib/table/utils/exportTableAsExcel.js +1 -3
  152. package/lib/table/utils/getTreeDepth.js +1 -3
  153. package/lib/table/utils/groupBy.js +1 -3
  154. package/lib/table/utils/index.d.ts +1 -0
  155. package/lib/table/utils/index.js +57 -49
  156. package/lib/table/utils/layeredSort.js +6 -2
  157. package/lib/table/utils/makeRecursiveMapper.js +1 -3
  158. package/lib/table/utils/others.d.ts +1 -1
  159. package/lib/table/utils/others.js +23 -18
  160. package/lib/table/utils/traverseColumn.js +1 -3
  161. package/lib/table/utils/tree-data-helpers/StrictTreeDataHelper.js +5 -7
  162. package/lib/table/utils/tree-data-helpers/TreeDataHelper.js +5 -7
  163. package/package.json +7 -2
  164. package/dist/kd-table.css +0 -422
  165. package/dist/kd-table.css.map +0 -1
  166. package/dist/kd-table.js +0 -38578
  167. package/dist/kd-table.js.map +0 -1
  168. package/dist/kd-table.min.css +0 -9
  169. package/dist/kd-table.min.js +0 -208
  170. package/dist/kd-table.min.js.map +0 -1
  171. package/es/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
  172. package/es/table/base/helpers/__test__/visible-part.test.js +0 -28
  173. package/es/table/base/helpers/visible-part.d.ts +0 -23
  174. package/es/table/base/helpers/visible-part.js +0 -58
  175. package/lib/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
  176. package/lib/table/base/helpers/__test__/visible-part.test.js +0 -31
  177. package/lib/table/base/helpers/visible-part.d.ts +0 -23
  178. package/lib/table/base/helpers/visible-part.js +0 -72
@@ -26,8 +26,6 @@ var _utils = require("../../utils");
26
26
  function multiSelect() {
27
27
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
28
28
  return function multiSelectStep(pipeline) {
29
- var _context;
30
-
31
29
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
32
30
 
33
31
  var stateKey = 'multiSelect';
@@ -72,95 +70,101 @@ function multiSelect() {
72
70
  allKeys.push(rowKey);
73
71
  }
74
72
  });
75
- var set = new _set.default(value);
76
- var isAllChecked = allKeys.length > 0 && allKeys.every(function (key) {
77
- return set.has(key);
78
- });
79
- var isAnyChecked = allKeys.some(function (key) {
80
- return set.has(key);
81
- });
73
+ var set = new _set.default(value); // todo: 暂使用hidden隐藏选择列 后续增加配置
82
74
 
83
- var defaultCheckboxColumnTitle = /*#__PURE__*/_react.default.createElement(Checkbox, {
84
- checked: isAllChecked,
85
- indeterminate: !isAllChecked && isAnyChecked,
86
- onChange: function onChange(_) {
87
- if (isAllChecked) {
88
- _onChange(_others.arrayUtils.diff(value, allKeys), '', allKeys, 'uncheck-all');
89
- } else {
90
- _onChange(_others.arrayUtils.merge(value, allKeys), '', allKeys, 'check-all');
75
+ if (opts.checkboxColumn && opts.checkboxColumn.hidden !== true) {
76
+ var _context;
77
+
78
+ var isAllChecked = allKeys.length > 0 && allKeys.every(function (key) {
79
+ return set.has(key);
80
+ });
81
+ var isAnyChecked = allKeys.some(function (key) {
82
+ return set.has(key);
83
+ });
84
+
85
+ var defaultCheckboxColumnTitle = /*#__PURE__*/_react.default.createElement(Checkbox, {
86
+ checked: isAllChecked,
87
+ indeterminate: !isAllChecked && isAnyChecked,
88
+ onChange: function onChange(_) {
89
+ if (isAllChecked) {
90
+ _onChange(_others.arrayUtils.diff(value, allKeys), '', allKeys, 'uncheck-all');
91
+ } else {
92
+ _onChange(_others.arrayUtils.merge(value, allKeys), '', allKeys, 'check-all');
93
+ }
91
94
  }
92
- }
93
- });
95
+ });
94
96
 
95
- var checkboxColumn = (0, _extends2.default)((0, _extends2.default)({
96
- name: '是否选中',
97
- title: defaultCheckboxColumnTitle,
98
- width: 50,
99
- align: 'center'
100
- }, opts.checkboxColumn), {
101
- getCellProps: function getCellProps(value, row, rowIndex) {
102
- var _a, _b;
103
-
104
- var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
105
-
106
- var checkboxCellProps = {};
107
- 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);
108
-
109
- if (fullKeySet.has(rowKey) && clickArea === 'cell') {
110
- var prevChecked = set.has(rowKey);
111
- var disabled = isDisabled(row, rowIndex);
112
- checkboxCellProps = {
113
- style: {
114
- cursor: disabled ? 'not-allowed' : 'pointer'
115
- },
116
- onClick: disabled ? undefined : function (e) {
117
- if (opts.stopClickEventPropagation) {
118
- e.stopPropagation();
97
+ var checkboxColumn = (0, _extends2.default)((0, _extends2.default)({
98
+ name: '是否选中',
99
+ title: defaultCheckboxColumnTitle,
100
+ width: 50,
101
+ align: 'center'
102
+ }, opts.checkboxColumn), {
103
+ getCellProps: function getCellProps(value, row, rowIndex) {
104
+ var _a, _b;
105
+
106
+ var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
107
+
108
+ var checkboxCellProps = {};
109
+ 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);
110
+
111
+ if (fullKeySet.has(rowKey) && clickArea === 'cell') {
112
+ var prevChecked = set.has(rowKey);
113
+ var disabled = isDisabled(row, rowIndex);
114
+ checkboxCellProps = {
115
+ style: {
116
+ cursor: disabled ? 'not-allowed' : 'pointer'
117
+ },
118
+ onClick: disabled ? undefined : function (e) {
119
+ if (opts.stopClickEventPropagation) {
120
+ e.stopPropagation();
121
+ }
122
+
123
+ onCheckboxChange(prevChecked, rowKey, e.shiftKey);
119
124
  }
125
+ };
126
+ }
120
127
 
121
- onCheckboxChange(prevChecked, rowKey, e.shiftKey);
122
- }
123
- };
124
- }
128
+ return (0, _utils.mergeCellProps)(preCellProps, checkboxCellProps);
129
+ },
130
+ render: function render(_, row, rowIndex) {
131
+ var key = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
125
132
 
126
- return (0, _utils.mergeCellProps)(preCellProps, checkboxCellProps);
127
- },
128
- render: function render(_, row, rowIndex) {
129
- var key = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
133
+ var checked = set.has(key);
134
+ return /*#__PURE__*/_react.default.createElement(Checkbox, {
135
+ checked: checked,
136
+ disabled: isDisabled(row, rowIndex),
137
+ onChange: clickArea === 'checkbox' ? function (arg1, arg2) {
138
+ var _a; // 这里要同时兼容 antd 和 fusion 的用法
139
+ // fusion: arg2?.nativeEvent
140
+ // antd: arg1.nativeEvent
130
141
 
131
- var checked = set.has(key);
132
- return /*#__PURE__*/_react.default.createElement(Checkbox, {
133
- checked: checked,
134
- disabled: isDisabled(row, rowIndex),
135
- onChange: clickArea === 'checkbox' ? function (arg1, arg2) {
136
- var _a; // 这里要同时兼容 antd 和 fusion 的用法
137
- // fusion: arg2?.nativeEvent
138
- // antd: arg1.nativeEvent
139
142
 
143
+ var nativeEvent = (_a = arg2 === null || arg2 === void 0 ? void 0 : arg2.nativeEvent) !== null && _a !== void 0 ? _a : arg1.nativeEvent;
140
144
 
141
- var nativeEvent = (_a = arg2 === null || arg2 === void 0 ? void 0 : arg2.nativeEvent) !== null && _a !== void 0 ? _a : arg1.nativeEvent;
145
+ if (nativeEvent) {
146
+ if (opts.stopClickEventPropagation) {
147
+ nativeEvent.stopPropagation();
148
+ }
142
149
 
143
- if (nativeEvent) {
144
- if (opts.stopClickEventPropagation) {
145
- nativeEvent.stopPropagation();
150
+ onCheckboxChange(checked, key, nativeEvent.shiftKey);
146
151
  }
152
+ } : undefined
153
+ });
154
+ }
155
+ });
156
+ var nextColumns = (0, _slice.default)(_context = pipeline.getColumns()).call(_context);
157
+ var checkboxPlacement = (_l = opts.checkboxPlacement) !== null && _l !== void 0 ? _l : 'start';
147
158
 
148
- onCheckboxChange(checked, key, nativeEvent.shiftKey);
149
- }
150
- } : undefined
151
- });
159
+ if (checkboxPlacement === 'start') {
160
+ nextColumns.unshift(checkboxColumn);
161
+ } else {
162
+ nextColumns.push(checkboxColumn);
152
163
  }
153
- });
154
- var nextColumns = (0, _slice.default)(_context = pipeline.getColumns()).call(_context);
155
- var checkboxPlacement = (_l = opts.checkboxPlacement) !== null && _l !== void 0 ? _l : 'start';
156
164
 
157
- if (checkboxPlacement === 'start') {
158
- nextColumns.unshift(checkboxColumn);
159
- } else {
160
- nextColumns.push(checkboxColumn);
165
+ pipeline.columns(nextColumns);
161
166
  }
162
167
 
163
- pipeline.columns(nextColumns);
164
168
  pipeline.appendRowPropsGetter(function (row, rowIndex) {
165
169
  var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
166
170
 
@@ -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
+ }
@@ -45,6 +45,10 @@ var _others = require("../../utils/others");
45
45
 
46
46
  var _console = _interopRequireDefault(require("../../utils/console"));
47
47
 
48
+ var _renderTemplates = _interopRequireDefault(require("../../base/renderTemplates"));
49
+
50
+ var _base = require("../../base");
51
+
48
52
  var rowDetailSymbol = (0, _symbol.default)('row-detail');
49
53
 
50
54
  var fallbackRenderDetail = function fallbackRenderDetail() {
@@ -67,23 +71,18 @@ function rowDetail() {
67
71
  var _a, _b, _c, _d, _e, _f, _g, _h;
68
72
 
69
73
  var stateKey = 'rowDetail';
70
- var primaryKey = pipeline.ensurePrimaryKey('rowDetail');
71
-
72
- if (typeof primaryKey !== 'string') {
73
- throw new Error('rowDetail 仅支持字符串作为 primaryKey');
74
- }
75
-
76
74
  var rowDetailMetaKey = (_a = opts.rowDetailMetaKey) !== null && _a !== void 0 ? _a : rowDetailSymbol;
75
+ var primaryKey = pipeline.ensurePrimaryKey('rowDetail');
77
76
  var indents = pipeline.ctx.indents;
78
77
  var textOffset = indents.iconIndent + indents.iconWidth + indents.iconGap;
79
78
  var clickArea = (_b = opts.clickArea) !== null && _b !== void 0 ? _b : 'cell';
80
- var getDetailKey = (_c = opts.getDetailKey) !== null && _c !== void 0 ? _c : function (row) {
81
- return row[primaryKey] + '_detail';
79
+ var getDetailKey = (_c = opts.getDetailKey) !== null && _c !== void 0 ? _c : function (row, rowIndex) {
80
+ return _internals.internals.safeGetRowKey(primaryKey, row, rowIndex) + '_detail';
82
81
  };
83
82
  var renderDetail = (_d = opts.renderDetail) !== null && _d !== void 0 ? _d : fallbackRenderDetail;
84
83
  var hasDetail = (_e = opts.hasDetail) !== null && _e !== void 0 ? _e : (0, _others.always)(true);
85
- var openKeys = (_h = (_g = (_f = opts.openKeys) !== null && _f !== void 0 ? _f : pipeline.getStateAtKey(stateKey)) !== null && _g !== void 0 ? _g : opts.defaultOpenAll ? (0, _map.default)(_context = (0, _filter.default)(_context2 = pipeline.getDataSource()).call(_context2, hasDetail)).call(_context, function (row) {
86
- return row[primaryKey];
84
+ var openKeys = (_h = (_g = (_f = opts.openKeys) !== null && _f !== void 0 ? _f : pipeline.getStateAtKey(stateKey)) !== null && _g !== void 0 ? _g : opts.defaultOpenAll ? (0, _map.default)(_context = (0, _filter.default)(_context2 = pipeline.getDataSource()).call(_context2, hasDetail)).call(_context, function (row, rowIndex) {
85
+ return _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
87
86
  }) : opts.defaultOpenKeys) !== null && _h !== void 0 ? _h : [];
88
87
 
89
88
  var onChangeOpenKeys = function onChangeOpenKeys(nextKeys, key, action) {
@@ -112,16 +111,18 @@ function rowDetail() {
112
111
  }
113
112
  };
114
113
 
114
+ var detailPrimaryKey = typeof primaryKey === 'string' ? primaryKey : rowDetailMetaKey.toString() + 'PrimaryKey';
115
115
  return pipeline.dataSource((0, _flatMapInstanceProperty(_others))(pipeline.getDataSource(), function (row, rowIndex) {
116
- if (openKeySet.has(row[primaryKey])) {
117
- return [row, (0, _extends4.default)((0, _extends4.default)((0, _defineProperty2.default)({}, rowDetailMetaKey, true), row), (0, _defineProperty2.default)({}, primaryKey, getDetailKey(row, rowIndex)))];
116
+ if (openKeySet.has(_internals.internals.safeGetRowKey(primaryKey, row, rowIndex))) {
117
+ return [row, (0, _extends4.default)((0, _extends4.default)((0, _defineProperty2.default)({}, rowDetailMetaKey, true), row), (0, _defineProperty2.default)({}, detailPrimaryKey, getDetailKey(row, rowIndex)))];
118
118
  } else {
119
119
  return [row];
120
120
  }
121
121
  })).columns(processColumns(pipeline.getColumns())).appendRowPropsGetter(function (row) {
122
122
  if (row[rowDetailMetaKey]) {
123
123
  return {
124
- className: 'no-hover'
124
+ className: 'no-hover',
125
+ 'data-row-detail-key': row[detailPrimaryKey]
125
126
  };
126
127
  }
127
128
  });
@@ -150,6 +151,19 @@ function rowDetail() {
150
151
 
151
152
  var render = function render(value, row, rowIndex) {
152
153
  if (row[rowDetailMetaKey]) {
154
+ // 第一列内容已经渲染
155
+ if (expandColumnIndex !== 0) return;
156
+ var renderRowDetail = (0, _renderTemplates.default)('rowDetail');
157
+
158
+ if (typeof renderRowDetail === 'function') {
159
+ return renderRowDetail({
160
+ row: row,
161
+ rowIndex: rowIndex,
162
+ domHelper: pipeline.ref.current.domHelper,
163
+ renderDetail: renderDetail
164
+ });
165
+ }
166
+
153
167
  return renderDetail(row, rowIndex);
154
168
  }
155
169
 
@@ -163,7 +177,8 @@ function rowDetail() {
163
177
  }, content);
164
178
  }
165
179
 
166
- var rowKey = row[primaryKey];
180
+ var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
181
+
167
182
  var expanded = openKeySet.has(rowKey);
168
183
 
169
184
  var onClick = function onClick(e) {
@@ -174,7 +189,7 @@ function rowDetail() {
174
189
  toggle(rowKey);
175
190
  };
176
191
 
177
- var expandCls = expanded ? 'expanded' : 'collapsed';
192
+ var expandCls = expanded ? _base.Classes.expanded : _base.Classes.collapsed;
178
193
  var ExpandIcon = opts.expandIcon;
179
194
  return /*#__PURE__*/_react.default.createElement(_commonViews.ExpansionCell, {
180
195
  className: (0, _classnames.default)('expansion-cell', expandCls),
@@ -220,7 +235,7 @@ function rowDetail() {
220
235
  e.stopPropagation();
221
236
  }
222
237
 
223
- toggle(row[primaryKey]);
238
+ toggle(_internals.internals.safeGetRowKey(primaryKey, row, rowIndex));
224
239
  },
225
240
  style: {
226
241
  cursor: 'pointer'
@@ -234,6 +249,17 @@ function rowDetail() {
234
249
 
235
250
  var firstColRender = function firstColRender(value, row, rowIndex) {
236
251
  if (row[rowDetailMetaKey]) {
252
+ var renderRowDetail = (0, _renderTemplates.default)('rowDetail');
253
+
254
+ if (typeof renderRowDetail === 'function') {
255
+ return renderRowDetail({
256
+ row: row,
257
+ rowIndex: rowIndex,
258
+ domHelper: pipeline.ref.current.domHelper,
259
+ renderDetail: renderDetail
260
+ });
261
+ }
262
+
237
263
  return renderDetail(row, rowIndex);
238
264
  }
239
265
 
@@ -41,6 +41,8 @@ var _utils = require("../../utils");
41
41
 
42
42
  var _others = require("../../utils/others");
43
43
 
44
+ var _base = require("../../base");
45
+
44
46
  var groupingMetaSymbol = (0, _symbol.default)('row-grouping-meta');
45
47
 
46
48
  function attachGroupingMeta(row) {
@@ -149,7 +151,7 @@ function rowGrouping() {
149
151
  }
150
152
 
151
153
  var expanded = openKeySet.has(row[primaryKey]);
152
- var expandCls = expanded ? 'expanded' : 'collapsed';
154
+ var expandCls = expanded ? _base.Classes.expanded : _base.Classes.collapsed;
153
155
  return /*#__PURE__*/_react.default.createElement(_commonViews.ExpansionCell, {
154
156
  className: (0, _classnames.default)('expansion-cell', expandCls)
155
157
  }, /*#__PURE__*/_react.default.createElement(_commonViews.icons.CaretRight, {
@@ -53,11 +53,12 @@ function singleSelect() {
53
53
  getCellProps: function getCellProps(value, row, rowIndex) {
54
54
  var _a, _b;
55
55
 
56
+ var preCellProps = (_b = (_a = opts.radioColumn) === null || _a === void 0 ? void 0 : _a.getCellProps) === null || _b === void 0 ? void 0 : _b.call(_a, value, row, rowIndex);
57
+
56
58
  if (clickArea === 'cell') {
57
59
  var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
58
60
 
59
61
  var disabled = isDisabled(row, rowIndex);
60
- var preCellProps = (_b = (_a = opts.radioColumn) === null || _a === void 0 ? void 0 : _a.getCellProps) === null || _b === void 0 ? void 0 : _b.call(_a, value, row, rowIndex);
61
62
  return (0, _utils.mergeCellProps)(preCellProps, {
62
63
  style: {
63
64
  cursor: disabled ? 'not-allowed' : 'pointer'
@@ -71,6 +72,8 @@ function singleSelect() {
71
72
  }
72
73
  });
73
74
  }
75
+
76
+ return preCellProps;
74
77
  },
75
78
  render: function render(_, row, rowIndex) {
76
79
  var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
@@ -8,8 +8,6 @@ var _Symbol = require("@babel/runtime-corejs3/core-js-stable/symbol");
8
8
 
9
9
  var _getIteratorMethod = require("@babel/runtime-corejs3/core-js/get-iterator-method");
10
10
 
11
- var _getIterator = require("@babel/runtime-corejs3/core-js/get-iterator");
12
-
13
11
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
14
12
 
15
13
  Object.defineProperty(exports, "__esModule", {
@@ -49,7 +47,7 @@ var _styles = require("../../base/styles");
49
47
 
50
48
  var _templateObject;
51
49
 
52
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof _Symbol === "undefined" || _getIteratorMethod(o) == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = _getIterator(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
50
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
53
51
 
54
52
  function _unsupportedIterableToArray(o, minLen) { var _context4; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty2(_context4 = Object.prototype.toString.call(o)).call(_context4, 8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
55
53
 
@@ -127,7 +125,7 @@ function hasAnySortableColumns(cols) {
127
125
  });
128
126
  }
129
127
 
130
- var TableHeaderCell = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n cursor: pointer;\n display: flex;\n align-items: center;\n"])));
128
+ var TableHeaderCell = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n cursor: pointer;\n display: flex;\n align-items: center;\n // flex: auto;\n"])));
131
129
 
132
130
  var stateKey = 'sort';
133
131