@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
@@ -8,15 +8,13 @@ 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", {
16
14
  value: true
17
15
  });
18
- exports.getLeftNestedLockCount = getLeftNestedLockCount;
19
16
  exports.calculateRenderInfo = calculateRenderInfo;
17
+ exports.getLeftNestedLockCount = getLeftNestedLockCount;
20
18
 
21
19
  var _flat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/flat"));
22
20
 
@@ -40,7 +38,7 @@ var _utils = require("../utils");
40
38
 
41
39
  var _utils2 = require("./utils");
42
40
 
43
- 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; } } }; }
41
+ 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; } } }; }
44
42
 
45
43
  function _unsupportedIterableToArray(o, minLen) { var _context10; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty2(_context10 = Object.prototype.toString.call(o)).call(_context10, 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); }
46
44
 
@@ -205,7 +203,7 @@ function getHorizontalRenderRange(_ref) {
205
203
  while (leftIndex + centerCount < flat.center.length) {
206
204
  var _col = flat.center[leftIndex + centerCount];
207
205
 
208
- if (_col.width + centerRenderWidth < minCenterRenderWidth) {
206
+ if (centerRenderWidth < minCenterRenderWidth) {
209
207
  centerRenderWidth += _col.width;
210
208
  centerCount += 1;
211
209
  } else {
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard");
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
9
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
6
10
 
@@ -17,6 +21,10 @@ var _colgroup = require("./colgroup");
17
21
 
18
22
  var _styles = require("./styles");
19
23
 
24
+ 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); }
25
+
26
+ 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; }
27
+
20
28
  var DefaultEmptyContent = /*#__PURE__*/_react.default.memo(function () {
21
29
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("img", {
22
30
  alt: "empty-image",
@@ -1,5 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import { RenderInfo } from './interfaces';
3
- export default function TableHeader({ info }: {
3
+ interface TableHeaderProps {
4
4
  info: RenderInfo;
5
- }): JSX.Element;
5
+ theaderPosition?: 'left' | 'center' | 'right';
6
+ rowCount?: number;
7
+ }
8
+ export default function TableHeader({ info, theaderPosition, rowCount: _rowCount }: TableHeaderProps): JSX.Element;
9
+ export {};
@@ -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", {
@@ -35,7 +33,7 @@ var _utils = require("../utils");
35
33
 
36
34
  var _styles = require("./styles");
37
35
 
38
- 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; } } }; }
36
+ 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; } } }; }
39
37
 
40
38
  function _unsupportedIterableToArray(o, minLen) { var _context6; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty(_context6 = Object.prototype.toString.call(o)).call(_context6, 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); }
41
39
 
@@ -247,18 +245,33 @@ function calculateHeaderRenderInfo(_ref, rowCount) {
247
245
  function TableHeader(_ref2) {
248
246
  var _context4, _context5;
249
247
 
250
- var info = _ref2.info;
248
+ var info = _ref2.info,
249
+ theaderPosition = _ref2.theaderPosition,
250
+ _rowCount = _ref2.rowCount;
251
251
  var nested = info.nested,
252
252
  flat = (0, _flat.default)(info),
253
253
  stickyLeftMap = info.stickyLeftMap,
254
254
  stickyRightMap = info.stickyRightMap;
255
- var rowCount = (0, _utils.getTreeDepth)(nested.full) + 1;
255
+ var rowCount = _rowCount !== null && _rowCount !== void 0 ? _rowCount : (0, _utils.getTreeDepth)(nested.full) + 1;
256
256
  var headerRenderInfo = calculateHeaderRenderInfo(info, rowCount);
257
257
  var fullFlatCount = flat.full.length;
258
258
  var leftFlatCount = flat.left.length;
259
259
  var rightFlatCount = flat.right.length;
260
260
  var thead = (0, _map.default)(_context4 = headerRenderInfo.leveled).call(_context4, function (wrappedCols, level) {
261
- var headerCells = (0, _map.default)(wrappedCols).call(wrappedCols, function (wrapped, index) {
261
+ var _wrappedCols = (0, _concat.default)(wrappedCols).call(wrappedCols); // 左中右区域渲染,分组列可能单独位于一个区域,此时其他区域也需要适配分组的高度
262
+ // rowspan 需要空白的列头去占位, 需要补充额外的空白列头
263
+
264
+
265
+ if (rowCount > 1 && ['left', 'right'].indexOf(theaderPosition) > -1) {
266
+ _wrappedCols.push({
267
+ type: 'blank',
268
+ blankSide: 'left',
269
+ width: 1,
270
+ isPlacehoder: true
271
+ });
272
+ }
273
+
274
+ var headerCells = (0, _map.default)(_wrappedCols).call(_wrappedCols, function (wrapped, index) {
262
275
  var _a, _b, _c;
263
276
 
264
277
  if (wrapped.type === 'normal') {
@@ -277,14 +290,16 @@ function TableHeader(_ref2) {
277
290
  positionStyle.right = stickyRightMap.get(colIndex);
278
291
  }
279
292
 
293
+ var justifyContent = col.align === 'right' ? 'flex-end' : col.align === 'center' ? 'center' : 'flex-start';
294
+
280
295
  var cell = /*#__PURE__*/_react.default.createElement("th", (0, _extends2.default)({
281
296
  key: colIndex
282
297
  }, headerCellProps, {
283
298
  className: (0, _classnames.default)(_styles.Classes.tableHeaderCell, headerCellProps.className, {
284
299
  first: colIndex === 0,
285
300
  last: colIndex + colSpan === fullFlatCount,
286
- 'lock-left': colIndex < leftFlatCount,
287
- 'lock-right': colIndex >= fullFlatCount - rightFlatCount,
301
+ 'lock-left': colIndex < leftFlatCount || theaderPosition === 'left',
302
+ 'lock-right': colIndex >= fullFlatCount - rightFlatCount || theaderPosition === 'right',
288
303
  leaf: wrapped.isLeaf
289
304
  }),
290
305
  colSpan: colSpan,
@@ -294,13 +309,21 @@ function TableHeader(_ref2) {
294
309
  verticalAlign: (_b = col.verticalAlign) !== null && _b !== void 0 ? _b : 'middle'
295
310
  }, headerCellProps.style), positionStyle),
296
311
  "data-code": col.code
297
- }), (_c = col.title) !== null && _c !== void 0 ? _c : col.name);
312
+ }), theaderPosition === 'center' && positionStyle.position === 'sticky' ? null : /*#__PURE__*/_react.default.createElement("div", {
313
+ className: _styles.Classes.tableHeaderCellContent,
314
+ style: {
315
+ justifyContent: justifyContent
316
+ }
317
+ }, (_c = col.title) !== null && _c !== void 0 ? _c : col.name));
298
318
 
299
319
  return cell;
300
320
  } else {
301
321
  if (wrapped.width > 0) {
302
322
  return /*#__PURE__*/_react.default.createElement("th", {
303
- key: wrapped.blankSide
323
+ key: wrapped.blankSide,
324
+ style: {
325
+ visibility: wrapped.isPlacehoder ? 'hidden' : undefined
326
+ }
304
327
  });
305
328
  } else {
306
329
  return null;
@@ -47,7 +47,7 @@ var SpanManager = /*#__PURE__*/function () {
47
47
  value: function add(rowIndex, colIndex, colSpan, rowSpan) {
48
48
  this.rects.push({
49
49
  left: colIndex,
50
- right: colIndex + colSpan,
50
+ right: colIndex + (colSpan < 1 ? 1 : colSpan),
51
51
  top: rowIndex,
52
52
  bottom: rowIndex + rowSpan
53
53
  });
@@ -8,6 +8,8 @@ export declare class TableDOMHelper {
8
8
  readonly tableFooter: HTMLDivElement;
9
9
  readonly stickyScroll: HTMLDivElement;
10
10
  readonly stickyScrollItem: HTMLDivElement;
11
+ readonly tableHeaderMain: HTMLDivElement;
12
+ readonly tableFooterMain: HTMLDivElement;
11
13
  constructor(artTableWrapper: HTMLDivElement);
12
14
  getVirtualTop(): HTMLDivElement;
13
15
  getTableRows(): NodeListOf<HTMLTableRowElement>;
@@ -15,4 +17,5 @@ export declare class TableDOMHelper {
15
17
  getLeftLockShadow(): HTMLDivElement;
16
18
  getRightLockShadow(): HTMLDivElement;
17
19
  getLoadingIndicator(): HTMLDivElement;
20
+ getRowTop(rowIndex: number): number;
18
21
  }
@@ -60,10 +60,12 @@ var TableDOMHelper = /*#__PURE__*/function () {
60
60
  this.artTableWrapper = artTableWrapper;
61
61
  this.artTable = artTableWrapper.querySelector(".".concat(_styles.Classes.artTable));
62
62
  this.tableHeader = this.artTable.querySelector(".".concat(_styles.Classes.tableHeader));
63
+ this.tableHeaderMain = this.artTable.querySelector(".".concat(_styles.Classes.tableHeaderMain));
63
64
  this.tableBody = this.artTable.querySelector(".".concat(_styles.Classes.tableBody));
64
65
  this.virtual = this.artTable.querySelector(".".concat(_styles.Classes.virtual));
65
66
  this.tableElement = this.artTable.querySelector(".".concat(_styles.Classes.tableBody, " table"));
66
67
  this.tableFooter = this.artTable.querySelector(".".concat(_styles.Classes.tableFooter));
68
+ this.tableFooterMain = this.artTable.querySelector(".".concat(_styles.Classes.tableFooterMain));
67
69
  var stickyScrollSelector = (0, _concat.default)(_context = ".".concat(_styles.Classes.artTable, " + .")).call(_context, _styles.Classes.stickyScroll);
68
70
  this.stickyScroll = artTableWrapper.querySelector(stickyScrollSelector);
69
71
  this.stickyScrollItem = this.stickyScroll.querySelector(".".concat(_styles.Classes.stickyScrollItem));
@@ -83,22 +85,24 @@ var TableDOMHelper = /*#__PURE__*/function () {
83
85
  }, {
84
86
  key: "getTableBodyHtmlTable",
85
87
  value: function getTableBodyHtmlTable() {
86
- return this.artTable.querySelector(".".concat(_styles.Classes.tableBody, " table"));
88
+ var _context2;
89
+
90
+ return this.artTable.querySelector((0, _concat.default)(_context2 = ".".concat(_styles.Classes.tableBody, " .")).call(_context2, _styles.Classes.virtual, " table"));
87
91
  }
88
92
  }, {
89
93
  key: "getLeftLockShadow",
90
94
  value: function getLeftLockShadow() {
91
- var _context2;
95
+ var _context3;
92
96
 
93
- var selector = (0, _concat.default)(_context2 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context2, _styles.Classes.leftLockShadow);
97
+ var selector = (0, _concat.default)(_context3 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context3, _styles.Classes.leftLockShadow);
94
98
  return this.artTable.querySelector(selector);
95
99
  }
96
100
  }, {
97
101
  key: "getRightLockShadow",
98
102
  value: function getRightLockShadow() {
99
- var _context3;
103
+ var _context4;
100
104
 
101
- var selector = (0, _concat.default)(_context3 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context3, _styles.Classes.rightLockShadow);
105
+ var selector = (0, _concat.default)(_context4 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context4, _styles.Classes.rightLockShadow);
102
106
  return this.artTable.querySelector(selector);
103
107
  }
104
108
  }, {
@@ -106,6 +110,18 @@ var TableDOMHelper = /*#__PURE__*/function () {
106
110
  value: function getLoadingIndicator() {
107
111
  return this.artTableWrapper.querySelector(".".concat(_styles.Classes.loadingIndicator));
108
112
  }
113
+ }, {
114
+ key: "getRowTop",
115
+ value: function getRowTop(rowIndex) {
116
+ var _context5, _context6;
117
+
118
+ if (rowIndex === 0) return 0;
119
+ var selector = (0, _concat.default)(_context5 = (0, _concat.default)(_context6 = ".".concat(_styles.Classes.tableBody, " .")).call(_context6, _styles.Classes.tableRow, "[data-rowindex=\"")).call(_context5, rowIndex, "\"]");
120
+ var row = this.artTable.querySelector(selector);
121
+ var rowOffsetTop = row && row.offsetTop || 0;
122
+ var tableOffsetTop = this.tableElement.offsetTop || 0;
123
+ return rowOffsetTop + tableOffsetTop;
124
+ }
109
125
  }]);
110
126
  return TableDOMHelper;
111
127
  }();
@@ -0,0 +1,23 @@
1
+ import { Observable } from 'rxjs';
2
+ export declare function getRichVisibleRectsStream(target: HTMLElement, structureMayChange$: Observable<'structure-may-change'>, virtualDebugLabel?: string): Observable<{
3
+ event: unknown;
4
+ targetRect: {
5
+ top: number;
6
+ left: number;
7
+ bottom: number;
8
+ right: number;
9
+ };
10
+ scrollParentRect: {
11
+ top: number;
12
+ left: number;
13
+ bottom: number;
14
+ right: number;
15
+ };
16
+ offsetY: number;
17
+ clipRect: {
18
+ left: number;
19
+ top: number;
20
+ right: number;
21
+ bottom: number;
22
+ };
23
+ }>;
@@ -0,0 +1,246 @@
1
+ "use strict";
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
+
9
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
10
+
11
+ Object.defineProperty(exports, "__esModule", {
12
+ value: true
13
+ });
14
+ exports.getRichVisibleRectsStream = getRichVisibleRectsStream;
15
+
16
+ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
17
+
18
+ var _getNodeName = _interopRequireDefault(require("@popperjs/core/lib/dom-utils/getNodeName"));
19
+
20
+ var _getOffsetParent = _interopRequireDefault(require("@popperjs/core/lib/dom-utils/getOffsetParent"));
21
+
22
+ var _getParentNode = _interopRequireDefault(require("@popperjs/core/lib/dom-utils/getParentNode"));
23
+
24
+ var _getWindow = _interopRequireDefault(require("@popperjs/core/lib/dom-utils/getWindow"));
25
+
26
+ var _getWindowScroll = _interopRequireDefault(require("@popperjs/core/lib/dom-utils/getWindowScroll"));
27
+
28
+ var _instanceOf = require("@popperjs/core/lib/dom-utils/instanceOf");
29
+
30
+ var _isScrollParent = _interopRequireDefault(require("@popperjs/core/lib/dom-utils/isScrollParent"));
31
+
32
+ var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
33
+
34
+ var _rxjs = require("rxjs");
35
+
36
+ var op = _interopRequireWildcard(require("rxjs/operators"));
37
+
38
+ var _utils = require("../utils");
39
+
40
+ 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); }
41
+
42
+ 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; }
43
+
44
+ function isWindow(arg) {
45
+ return arg.toString() === '[object Window]';
46
+ }
47
+
48
+ function isBody(arg) {
49
+ return (0, _getNodeName.default)(arg) === 'body';
50
+ }
51
+
52
+ function isHtml(arg) {
53
+ return (0, _getNodeName.default)(arg) === 'html';
54
+ }
55
+
56
+ function isHtmlOrBody(arg) {
57
+ return isHtml(arg) || isBody(arg);
58
+ } // 计算从 start(子元素)到 stop(祖先元素)之间所有元素的 scrollTop 或 scrollLeft 的和
59
+ // 注意 start 和 stop 都是 INCLUSIVE 的,即两者的 scrollTop 或 scrollLeft 都会统计在内
60
+
61
+
62
+ function accumulateScrollOffset(start, stop, scrollOffsetKey) {
63
+ var result = 0;
64
+ var elem = start;
65
+
66
+ while (elem != null) {
67
+ result += elem[scrollOffsetKey];
68
+
69
+ if (elem === stop || isWindow(stop) && isHtmlOrBody(elem)) {
70
+ break;
71
+ }
72
+
73
+ elem = elem.parentElement;
74
+ }
75
+
76
+ if (isWindow(stop)) {
77
+ result += (0, _getWindowScroll.default)(elem)[scrollOffsetKey];
78
+ }
79
+
80
+ return result;
81
+ }
82
+ /**
83
+ * 获取 target 相对于 base 的布局大小和相对位置。
84
+ * 注意该方法会考虑滚动所带来的影响
85
+ */
86
+
87
+
88
+ function getRelativeLayoutRect(base, target) {
89
+ if (isWindow(target) || isHtmlOrBody(target)) {
90
+ return {
91
+ left: 0,
92
+ right: window.innerWidth,
93
+ top: 0,
94
+ bottom: window.innerHeight
95
+ };
96
+ }
97
+
98
+ var deltaX = 0;
99
+ var deltaY = 0;
100
+ var elem = target;
101
+
102
+ while (elem != null && elem != base) {
103
+ deltaY += elem.offsetTop;
104
+ deltaX += elem.offsetLeft;
105
+ var offsetParent = (0, _getOffsetParent.default)(elem);
106
+ deltaY -= accumulateScrollOffset(elem.parentElement, offsetParent, 'scrollTop');
107
+ deltaX -= accumulateScrollOffset(elem.parentElement, offsetParent, 'scrollLeft');
108
+
109
+ if (isWindow(offsetParent)) {
110
+ break;
111
+ }
112
+
113
+ deltaY += offsetParent.clientTop;
114
+ deltaX += offsetParent.clientLeft;
115
+ elem = offsetParent;
116
+ }
117
+
118
+ return {
119
+ top: deltaY,
120
+ bottom: deltaY + target.offsetHeight,
121
+ left: deltaX,
122
+ right: deltaX + target.offsetWidth
123
+ };
124
+ }
125
+
126
+ function findCommonOffsetAncestor(target, scrollParent) {
127
+ if (isWindow(scrollParent)) {
128
+ return scrollParent;
129
+ }
130
+
131
+ var offsetParents = listOffsetParents(target);
132
+
133
+ if ((0, _includes.default)(offsetParents).call(offsetParents, scrollParent)) {
134
+ return scrollParent;
135
+ }
136
+
137
+ return (0, _getOffsetParent.default)(scrollParent);
138
+ } // 列出 target 元素上层的所有 offset parents
139
+
140
+
141
+ function listOffsetParents(target) {
142
+ var result = [];
143
+ var elem = target;
144
+
145
+ while (true) {
146
+ if (isWindow(elem)) {
147
+ break;
148
+ }
149
+
150
+ elem = (0, _getOffsetParent.default)(elem);
151
+ result.push(elem);
152
+ }
153
+
154
+ return result;
155
+ }
156
+
157
+ function fromScrollEvent(element) {
158
+ return (0, _rxjs.fromEvent)(element, 'scroll', {
159
+ passive: true
160
+ });
161
+ }
162
+
163
+ function fromResizeEvent(element) {
164
+ if (isWindow(element)) {
165
+ return (0, _rxjs.fromEvent)(element, 'resize', {
166
+ passive: true
167
+ });
168
+ }
169
+
170
+ return new _rxjs.Observable(function (subscriber) {
171
+ var resizeObserver = new _resizeObserverPolyfill.default(function (entries) {
172
+ subscriber.next(entries);
173
+ });
174
+ resizeObserver.observe(element);
175
+ return function () {
176
+ resizeObserver.disconnect();
177
+ };
178
+ });
179
+ }
180
+
181
+ function getScrollParent(elem) {
182
+ var _context;
183
+
184
+ if ((0, _includes.default)(_context = ['html', 'body', '#document']).call(_context, (0, _getNodeName.default)(elem))) {
185
+ return (0, _getWindow.default)(elem);
186
+ }
187
+
188
+ if ((0, _instanceOf.isHTMLElement)(elem) && (0, _isScrollParent.default)(elem)) {
189
+ return elem;
190
+ }
191
+
192
+ return getScrollParent((0, _getParentNode.default)(elem));
193
+ } // 获取 target 相对于「它的滚动父元素」的可见部分的大小与位置
194
+
195
+
196
+ function getRichVisibleRectsStream(target, structureMayChange$, virtualDebugLabel) {
197
+ return structureMayChange$.pipe(op.startWith('init'), op.map(function () {
198
+ // target 的第一个滚动父元素,我们认为这就是虚拟滚动发生的地方
199
+ // 即虚拟滚动不考虑「更上层元素发生滚动」的情况
200
+ // 直接从父元素开始查找,防止自身设置overflow属性导致是同一个元素
201
+ var scrollParent = getScrollParent((0, _getParentNode.default)(target)); // target 和 scrollParent 的共同 offset 祖先,作为布局尺寸计算时的参照元素
202
+
203
+ var commonOffsetAncestor = findCommonOffsetAncestor(target, scrollParent);
204
+ return {
205
+ scrollParent: scrollParent,
206
+ commonOffsetAncestor: commonOffsetAncestor
207
+ };
208
+ }), op.distinctUntilChanged(_utils.shallowEqual), op.tap(function (structure) {
209
+ if (virtualDebugLabel) {
210
+ console.log("%c[ali-react-table STRUCTURE ".concat(virtualDebugLabel, "]"), 'color: #4f9052; font-weight: bold', '\ntarget:', target, '\nscrollParent:', structure.scrollParent, '\ncommonOffsetAncestor:', structure.commonOffsetAncestor);
211
+ }
212
+ }), op.switchMap(function (_ref) {
213
+ var scrollParent = _ref.scrollParent,
214
+ commonOffsetAncestor = _ref.commonOffsetAncestor;
215
+ var events$ = (0, _rxjs.merge)(fromScrollEvent(scrollParent), fromResizeEvent(scrollParent), fromResizeEvent(target));
216
+ return events$.pipe(op.map(function (event) {
217
+ return {
218
+ targetRect: getRelativeLayoutRect(commonOffsetAncestor, target),
219
+ scrollParentRect: getRelativeLayoutRect(commonOffsetAncestor, scrollParent),
220
+ event: event
221
+ };
222
+ }), op.map(function (_ref2) {
223
+ var event = _ref2.event,
224
+ scrollParentRect = _ref2.scrollParentRect,
225
+ targetRect = _ref2.targetRect;
226
+ return {
227
+ event: event,
228
+ targetRect: targetRect,
229
+ scrollParentRect: scrollParentRect,
230
+ offsetY: Math.max(0, scrollParentRect.top - targetRect.top),
231
+ // 表格的横向滚动总是发生在表格内部,所以这里不需要计算 offsetX
232
+ // offsetX: Math.max(0, scrollParentRect.left - targetRect.left),
233
+ clipRect: {
234
+ left: Math.max(targetRect.left, scrollParentRect.left),
235
+ top: Math.max(targetRect.top, scrollParentRect.top),
236
+ right: Math.min(targetRect.right, scrollParentRect.right),
237
+ bottom: Math.min(targetRect.bottom, scrollParentRect.bottom)
238
+ }
239
+ };
240
+ }));
241
+ }), op.tap(function (rects) {
242
+ if (virtualDebugLabel) {
243
+ console.log("%c[ali-react-table RECTS ".concat(virtualDebugLabel, "]"), 'color: #4f9052; font-weight: bold', '\noffsetY:', rects.offsetY, '\ntargetRect:', rects.targetRect, '\nscrollParentRect:', rects.scrollParentRect, '\nclipRect:', rects.clipRect, '\nevent:', rects.event);
244
+ }
245
+ }));
246
+ }
@@ -4,6 +4,7 @@ import { BaseTableProps } from './table';
4
4
  export interface HtmlTableProps extends Required<Pick<BaseTableProps, 'getRowProps' | 'primaryKey'>> {
5
5
  tbodyHtmlTag: 'tbody' | 'tfoot';
6
6
  data: any[];
7
+ hasScrollY?: boolean;
7
8
  horizontalRenderInfo: Pick<RenderInfo, 'flat' | 'visible' | 'horizontalRenderRange' | 'stickyLeftMap' | 'stickyRightMap'>;
8
9
  verticalRenderInfo: {
9
10
  offset: number;
@@ -11,5 +12,6 @@ export interface HtmlTableProps extends Required<Pick<BaseTableProps, 'getRowPro
11
12
  last: number;
12
13
  limit: number;
13
14
  };
15
+ tbodyPosition?: 'left' | 'center' | 'right';
14
16
  }
15
- export declare function HtmlTable({ tbodyHtmlTag, getRowProps, primaryKey, data, verticalRenderInfo: verInfo, horizontalRenderInfo: hozInfo }: HtmlTableProps): JSX.Element;
17
+ export declare function HtmlTable({ tbodyHtmlTag, getRowProps, primaryKey, hasScrollY, data, verticalRenderInfo: verInfo, horizontalRenderInfo: hozInfo, tbodyPosition }: HtmlTableProps): JSX.Element;
@@ -13,6 +13,8 @@ var _flat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stabl
13
13
 
14
14
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
15
15
 
16
+ var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
17
+
16
18
  var _classnames = _interopRequireDefault(require("classnames"));
17
19
 
18
20
  var _react = _interopRequireDefault(require("react"));
@@ -25,13 +27,17 @@ var _SpanManager = _interopRequireDefault(require("./helpers/SpanManager"));
25
27
 
26
28
  var _styles = require("./styles");
27
29
 
30
+ var _utils = require("./utils");
31
+
28
32
  function HtmlTable(_ref) {
29
33
  var tbodyHtmlTag = _ref.tbodyHtmlTag,
30
34
  getRowProps = _ref.getRowProps,
31
35
  primaryKey = _ref.primaryKey,
36
+ hasScrollY = _ref.hasScrollY,
32
37
  data = _ref.data,
33
38
  verInfo = _ref.verticalRenderInfo,
34
- hozInfo = _ref.horizontalRenderInfo;
39
+ hozInfo = _ref.horizontalRenderInfo,
40
+ tbodyPosition = _ref.tbodyPosition;
35
41
  var flat = (0, _flat.default)(hozInfo),
36
42
  hoz = hozInfo.horizontalRenderRange;
37
43
  var spanManager = new _SpanManager.default();
@@ -54,15 +60,31 @@ function HtmlTable(_ref) {
54
60
  even: rowIndex % 2 === 0,
55
61
  odd: rowIndex % 2 === 1
56
62
  }, rowProps === null || rowProps === void 0 ? void 0 : rowProps.className);
63
+ var visibleColumnDescriptor = (0, _concat.default)(_context = hozInfo.visible).call(_context); // 左中右区域渲染,存在融合单元格时需要适配rowspan属性
64
+ // 如果固定的列均存在融合单元格,需空白一列做占位,否则融合的单元格不会渲染,导致显示异常
65
+ // 这里无法区分是否存在融合列,默认左右固定区域均添加占位空白列
66
+
67
+ if (['left', 'right'].indexOf(tbodyPosition) > -1) {
68
+ visibleColumnDescriptor.push({
69
+ type: 'blank',
70
+ blankSide: 'left',
71
+ width: 0,
72
+ isPlacehoder: true
73
+ });
74
+ }
75
+
57
76
  return /*#__PURE__*/_react.default.createElement("tr", (0, _extends2.default)({}, rowProps, {
58
77
  className: rowClass,
59
- key: _internals.internals.safeGetRowKey(primaryKey, record, rowIndex),
78
+ key: (rowProps === null || rowProps === void 0 ? void 0 : rowProps['data-row-detail-key']) ? rowProps['data-row-detail-key'] : _internals.internals.safeGetRowKey(primaryKey, record, rowIndex),
60
79
  "data-rowindex": rowIndex,
61
80
  "data-role": 'table-row'
62
- }), (0, _map.default)(_context = hozInfo.visible).call(_context, function (descriptor) {
81
+ }), (0, _map.default)(visibleColumnDescriptor).call(visibleColumnDescriptor, function (descriptor) {
63
82
  if (descriptor.type === 'blank') {
64
83
  return /*#__PURE__*/_react.default.createElement("td", {
65
- key: descriptor.blankSide
84
+ key: descriptor.blankSide,
85
+ style: {
86
+ visibility: descriptor.isPlacehoder ? 'hidden' : undefined
87
+ }
66
88
  });
67
89
  }
68
90
 
@@ -105,7 +127,10 @@ function HtmlTable(_ref) {
105
127
 
106
128
 
107
129
  rowSpan = Math.min(rowSpan, verInfo.limit - rowIndex);
108
- colSpan = Math.min(colSpan, leftFlatCount + hoz.rightIndex - colIndex);
130
+ colSpan = Math.min(colSpan, leftFlatCount + hoz.rightIndex + rightFlatCount - colIndex); // todo: 右侧有列固定的情况下colSpan计算不对,这里先限制一下
131
+
132
+ rowSpan = Math.max(rowSpan, 1);
133
+ colSpan = Math.max(colSpan, 1);
109
134
  var hasSpan = colSpan > 1 || rowSpan > 1;
110
135
 
111
136
  if (hasSpan) {
@@ -113,13 +138,14 @@ function HtmlTable(_ref) {
113
138
  }
114
139
 
115
140
  var positionStyle = {};
141
+ var scrollbarWidth = hasScrollY ? (0, _utils.getScrollbarSize)().width : 0;
116
142
 
117
143
  if (colIndex < leftFlatCount) {
118
144
  positionStyle.position = 'sticky';
119
145
  positionStyle.left = hozInfo.stickyLeftMap.get(colIndex);
120
146
  } else if (colIndex >= fullFlatCount - rightFlatCount) {
121
147
  positionStyle.position = 'sticky';
122
- positionStyle.right = hozInfo.stickyRightMap.get(colIndex);
148
+ positionStyle.right = hozInfo.stickyRightMap.get(colIndex) - scrollbarWidth;
123
149
  }
124
150
 
125
151
  return /*#__PURE__*/_react.default.createElement('td', (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({
@@ -129,7 +155,7 @@ function HtmlTable(_ref) {
129
155
  // class
130
156
  first: colIndex === 0,
131
157
  last: colIndex + colSpan === fullFlatCount,
132
- 'lock-left': colIndex < leftFlatCount,
158
+ 'lock-left': colIndex < leftFlatCount || tbodyPosition === 'left',
133
159
  'lock-right': colIndex >= fullFlatCount - rightFlatCount,
134
160
  'row-span': rowSpan > 1
135
161
  })
@@ -144,6 +170,6 @@ function HtmlTable(_ref) {
144
170
  'data-role': 'table-cell',
145
171
  'data-rowindex': rowIndex,
146
172
  'data-code': column.code
147
- }), cellContent);
173
+ }), tbodyPosition === 'center' && positionStyle.position === 'sticky' ? null : cellContent);
148
174
  }
149
175
  }