@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.
- package/LICENSE +1 -1
- package/README.md +34 -33
- package/dist/@kdcloudjs/table.css +1 -1
- package/dist/@kdcloudjs/table.css.map +1 -1
- package/dist/@kdcloudjs/table.js +6554 -3389
- package/dist/@kdcloudjs/table.js.map +1 -1
- package/dist/@kdcloudjs/table.min.css +1 -1
- package/dist/@kdcloudjs/table.min.js +32 -24
- package/dist/@kdcloudjs/table.min.js.map +1 -1
- package/es/_utils/hooks.js +1 -2
- package/es/_utils/numberUtil.js +3 -4
- package/es/locale/locale.js +1 -2
- package/es/table/base/calculations.js +3 -4
- package/es/table/base/empty.js +2 -2
- package/es/table/base/header.d.ts +6 -2
- package/es/table/base/header.js +41 -22
- package/es/table/base/helpers/SpanManager.js +1 -1
- package/es/table/base/helpers/TableDOMUtils.d.ts +3 -0
- package/es/table/base/helpers/TableDOMUtils.js +23 -5
- package/es/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
- package/es/table/base/helpers/getRichVisibleRectsStream.js +216 -0
- package/es/table/base/html-table.d.ts +3 -1
- package/es/table/base/html-table.js +43 -26
- package/es/table/base/interfaces.d.ts +1 -0
- package/es/table/base/renderTemplates.d.ts +1 -0
- package/es/table/base/renderTemplates.js +344 -0
- package/es/table/base/styles.d.ts +24 -0
- package/es/table/base/styles.js +31 -9
- package/es/table/base/table.d.ts +12 -4
- package/es/table/base/table.js +183 -136
- package/es/table/base/utils.d.ts +6 -3
- package/es/table/base/utils.js +27 -6
- package/es/table/common-views.js +3 -3
- package/es/table/pipeline/features/__test__/treeMode.test.js +2 -1
- package/es/table/pipeline/features/autoFill.js +7 -1
- package/es/table/pipeline/features/columnDrag.js +168 -59
- package/es/table/pipeline/features/columnFilter.js +7 -9
- package/es/table/pipeline/features/columnResizeWidth.d.ts +3 -0
- package/es/table/pipeline/features/columnResizeWidth.js +11 -4
- package/es/table/pipeline/features/contextMenu.js +78 -31
- package/es/table/pipeline/features/filter/Filter.js +74 -37
- package/es/table/pipeline/features/index.d.ts +1 -0
- package/es/table/pipeline/features/index.js +2 -1
- package/es/table/pipeline/features/multiSelect.js +83 -79
- package/es/table/pipeline/features/rangeSelection.d.ts +10 -0
- package/es/table/pipeline/features/rangeSelection.js +231 -0
- package/es/table/pipeline/features/rowDetail.js +39 -16
- package/es/table/pipeline/features/rowGrouping.js +2 -1
- package/es/table/pipeline/features/singleSelect.js +4 -1
- package/es/table/pipeline/features/sort.js +2 -3
- package/es/table/pipeline/features/treeMode.js +4 -4
- package/es/table/pipeline/pipeline.d.ts +8 -0
- package/es/table/pipeline/pipeline.js +49 -5
- package/es/table/pivot/cross-table/buildCrossTable.js +1 -2
- package/es/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -2
- package/es/table/pivot/pivot-utils/builders.js +1 -2
- package/es/table/pivot/pivot-utils/convert-utils.js +5 -4
- package/es/table/transforms/autoWidth.js +1 -2
- package/es/table/transforms/sort.js +1 -2
- package/es/table/transforms/treeMode.js +1 -2
- package/es/table/utils/applyTransforms.js +1 -3
- package/es/table/utils/browserType.d.ts +6 -0
- package/es/table/utils/browserType.js +6 -0
- package/es/table/utils/buildTree.js +4 -5
- package/es/table/utils/collectNodes.js +1 -2
- package/es/table/utils/exportTableAsExcel.js +1 -2
- package/es/table/utils/getTreeDepth.js +1 -2
- package/es/table/utils/groupBy.js +1 -2
- package/es/table/utils/index.d.ts +1 -0
- package/es/table/utils/index.js +2 -1
- package/es/table/utils/layeredSort.js +5 -2
- package/es/table/utils/makeRecursiveMapper.js +4 -5
- package/es/table/utils/others.d.ts +1 -1
- package/es/table/utils/others.js +20 -14
- package/es/table/utils/traverseColumn.js +1 -2
- package/es/table/utils/tree-data-helpers/StrictTreeDataHelper.js +4 -5
- package/es/table/utils/tree-data-helpers/TreeDataHelper.js +4 -5
- package/lib/_utils/formatUtil.js +1 -1
- package/lib/_utils/hooks.js +2 -4
- package/lib/_utils/numberUtil.js +7 -9
- package/lib/_utils/usePopper.js +9 -1
- package/lib/config-provider/configProvider.js +9 -1
- package/lib/config-provider/index.js +5 -5
- package/lib/locale/index.js +14 -6
- package/lib/locale/locale.js +2 -4
- package/lib/table/base/calculations.js +4 -6
- package/lib/table/base/empty.js +11 -3
- package/lib/table/base/header.d.ts +6 -2
- package/lib/table/base/header.js +39 -19
- package/lib/table/base/helpers/SpanManager.js +1 -1
- package/lib/table/base/helpers/TableDOMUtils.d.ts +3 -0
- package/lib/table/base/helpers/TableDOMUtils.js +21 -5
- package/lib/table/base/helpers/getRichVisibleRectsStream.d.ts +23 -0
- package/lib/table/base/helpers/getRichVisibleRectsStream.js +246 -0
- package/lib/table/base/html-table.d.ts +3 -1
- package/lib/table/base/html-table.js +44 -26
- package/lib/table/base/index.js +4 -4
- package/lib/table/base/interfaces.d.ts +1 -0
- package/lib/table/base/renderTemplates.d.ts +1 -0
- package/lib/table/base/renderTemplates.js +370 -0
- package/lib/table/base/styles.d.ts +24 -0
- package/lib/table/base/styles.js +42 -13
- package/lib/table/base/table.d.ts +12 -4
- package/lib/table/base/table.js +191 -137
- package/lib/table/base/utils.d.ts +6 -3
- package/lib/table/base/utils.js +47 -10
- package/lib/table/common-views.js +3 -3
- package/lib/table/pipeline/features/__test__/sort.test.js +5 -3
- package/lib/table/pipeline/features/__test__/treeMode.test.js +3 -1
- package/lib/table/pipeline/features/autoFill.js +9 -2
- package/lib/table/pipeline/features/columnDrag.js +168 -59
- package/lib/table/pipeline/features/columnFilter.js +6 -9
- package/lib/table/pipeline/features/columnResizeWidth.d.ts +3 -0
- package/lib/table/pipeline/features/columnResizeWidth.js +21 -5
- package/lib/table/pipeline/features/contextMenu.js +89 -32
- package/lib/table/pipeline/features/filter/DefaultFilterContent.js +10 -2
- package/lib/table/pipeline/features/filter/Filter.js +88 -37
- package/lib/table/pipeline/features/filter/FilterPanel.js +10 -2
- package/lib/table/pipeline/features/filter/index.js +4 -4
- package/lib/table/pipeline/features/index.d.ts +1 -0
- package/lib/table/pipeline/features/index.js +37 -27
- package/lib/table/pipeline/features/multiSelect.js +79 -75
- package/lib/table/pipeline/features/rangeSelection.d.ts +10 -0
- package/lib/table/pipeline/features/rangeSelection.js +256 -0
- package/lib/table/pipeline/features/rowDetail.js +42 -16
- package/lib/table/pipeline/features/rowGrouping.js +3 -1
- package/lib/table/pipeline/features/singleSelect.js +4 -1
- package/lib/table/pipeline/features/sort.js +2 -4
- package/lib/table/pipeline/features/treeMode.js +6 -6
- package/lib/table/pipeline/index.js +11 -3
- package/lib/table/pipeline/pipeline.d.ts +8 -0
- package/lib/table/pipeline/pipeline.js +50 -7
- package/lib/table/pivot/cross-table/buildCrossTable.js +1 -3
- package/lib/table/pivot/cross-table/index.js +4 -4
- package/lib/table/pivot/cross-tree-table/buildCrossTreeTable.js +1 -3
- package/lib/table/pivot/pivot-utils/builders.js +2 -4
- package/lib/table/pivot/pivot-utils/convert-utils.js +7 -5
- package/lib/table/pivot/pivot-utils/index.js +4 -4
- package/lib/table/transforms/autoWidth.js +10 -4
- package/lib/table/transforms/columnResize.js +10 -2
- package/lib/table/transforms/index.js +32 -32
- package/lib/table/transforms/sort.js +10 -4
- package/lib/table/transforms/treeMode.js +9 -3
- package/lib/table/utils/applyTransforms.js +1 -5
- package/lib/table/utils/browserType.d.ts +6 -0
- package/lib/table/utils/browserType.js +13 -0
- package/lib/table/utils/buildTree.js +1 -3
- package/lib/table/utils/collectNodes.js +1 -3
- package/lib/table/utils/copyToClipboard.js +1 -1
- package/lib/table/utils/element.js +3 -3
- package/lib/table/utils/exportTableAsExcel.js +1 -3
- package/lib/table/utils/getTreeDepth.js +1 -3
- package/lib/table/utils/groupBy.js +1 -3
- package/lib/table/utils/index.d.ts +1 -0
- package/lib/table/utils/index.js +57 -49
- package/lib/table/utils/layeredSort.js +6 -2
- package/lib/table/utils/makeRecursiveMapper.js +1 -3
- package/lib/table/utils/others.d.ts +1 -1
- package/lib/table/utils/others.js +23 -18
- package/lib/table/utils/traverseColumn.js +1 -3
- package/lib/table/utils/tree-data-helpers/StrictTreeDataHelper.js +5 -7
- package/lib/table/utils/tree-data-helpers/TreeDataHelper.js +5 -7
- package/package.json +7 -2
- package/dist/kd-table.css +0 -422
- package/dist/kd-table.css.map +0 -1
- package/dist/kd-table.js +0 -38578
- package/dist/kd-table.js.map +0 -1
- package/dist/kd-table.min.css +0 -9
- package/dist/kd-table.min.js +0 -208
- package/dist/kd-table.min.js.map +0 -1
- package/es/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
- package/es/table/base/helpers/__test__/visible-part.test.js +0 -28
- package/es/table/base/helpers/visible-part.d.ts +0 -23
- package/es/table/base/helpers/visible-part.js +0 -58
- package/lib/table/base/helpers/__test__/visible-part.test.d.ts +0 -1
- package/lib/table/base/helpers/__test__/visible-part.test.js +0 -31
- package/lib/table/base/helpers/visible-part.d.ts +0 -23
- package/lib/table/base/helpers/visible-part.js +0 -72
package/lib/table/base/header.js
CHANGED
|
@@ -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", {
|
|
@@ -17,6 +15,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
17
15
|
});
|
|
18
16
|
exports.default = TableHeader;
|
|
19
17
|
|
|
18
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
19
|
+
|
|
20
20
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
21
21
|
|
|
22
22
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
|
|
@@ -35,7 +35,7 @@ var _utils = require("../utils");
|
|
|
35
35
|
|
|
36
36
|
var _styles = require("./styles");
|
|
37
37
|
|
|
38
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it
|
|
38
|
+
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
39
|
|
|
40
40
|
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
41
|
|
|
@@ -247,21 +247,40 @@ function calculateHeaderRenderInfo(_ref, rowCount) {
|
|
|
247
247
|
function TableHeader(_ref2) {
|
|
248
248
|
var _context4, _context5;
|
|
249
249
|
|
|
250
|
-
var info = _ref2.info
|
|
250
|
+
var info = _ref2.info,
|
|
251
|
+
theaderPosition = _ref2.theaderPosition,
|
|
252
|
+
_rowCount = _ref2.rowCount;
|
|
251
253
|
var nested = info.nested,
|
|
252
254
|
flat = (0, _flat.default)(info),
|
|
253
255
|
stickyLeftMap = info.stickyLeftMap,
|
|
254
256
|
stickyRightMap = info.stickyRightMap;
|
|
255
|
-
var rowCount = (0, _utils.getTreeDepth)(nested.full) + 1;
|
|
257
|
+
var rowCount = _rowCount !== null && _rowCount !== void 0 ? _rowCount : (0, _utils.getTreeDepth)(nested.full) + 1;
|
|
256
258
|
var headerRenderInfo = calculateHeaderRenderInfo(info, rowCount);
|
|
257
259
|
var fullFlatCount = flat.full.length;
|
|
258
260
|
var leftFlatCount = flat.left.length;
|
|
259
261
|
var rightFlatCount = flat.right.length;
|
|
260
262
|
var thead = (0, _map.default)(_context4 = headerRenderInfo.leveled).call(_context4, function (wrappedCols, level) {
|
|
261
|
-
var
|
|
263
|
+
var _cx2;
|
|
264
|
+
|
|
265
|
+
var _wrappedCols = (0, _concat.default)(wrappedCols).call(wrappedCols); // 左中右区域渲染,分组列可能单独位于一个区域,此时其他区域也需要适配分组的高度
|
|
266
|
+
// rowspan 需要空白的列头去占位, 需要补充额外的空白列头
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
if (rowCount > 1 && ['left', 'right'].indexOf(theaderPosition) > -1) {
|
|
270
|
+
_wrappedCols.push({
|
|
271
|
+
type: 'blank',
|
|
272
|
+
blankSide: 'left',
|
|
273
|
+
width: 1,
|
|
274
|
+
isPlacehoder: true
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
var headerCells = (0, _map.default)(_wrappedCols).call(_wrappedCols, function (wrapped, index) {
|
|
262
279
|
var _a, _b, _c;
|
|
263
280
|
|
|
264
281
|
if (wrapped.type === 'normal') {
|
|
282
|
+
var _cx;
|
|
283
|
+
|
|
265
284
|
var colIndex = wrapped.colIndex,
|
|
266
285
|
colSpan = wrapped.colSpan,
|
|
267
286
|
isLeaf = wrapped.isLeaf,
|
|
@@ -277,16 +296,12 @@ function TableHeader(_ref2) {
|
|
|
277
296
|
positionStyle.right = stickyRightMap.get(colIndex);
|
|
278
297
|
}
|
|
279
298
|
|
|
299
|
+
var justifyContent = col.align === 'right' ? 'flex-end' : col.align === 'center' ? 'center' : 'flex-start';
|
|
300
|
+
|
|
280
301
|
var cell = /*#__PURE__*/_react.default.createElement("th", (0, _extends2.default)({
|
|
281
302
|
key: colIndex
|
|
282
303
|
}, headerCellProps, {
|
|
283
|
-
className: (0, _classnames.default)(_styles.Classes.tableHeaderCell, headerCellProps.className, {
|
|
284
|
-
first: colIndex === 0,
|
|
285
|
-
last: colIndex + colSpan === fullFlatCount,
|
|
286
|
-
'lock-left': colIndex < leftFlatCount,
|
|
287
|
-
'lock-right': colIndex >= fullFlatCount - rightFlatCount,
|
|
288
|
-
leaf: wrapped.isLeaf
|
|
289
|
-
}),
|
|
304
|
+
className: (0, _classnames.default)(_styles.Classes.tableHeaderCell, headerCellProps.className, (_cx = {}, (0, _defineProperty2.default)(_cx, _styles.Classes.first, colIndex === 0), (0, _defineProperty2.default)(_cx, _styles.Classes.last, colIndex + colSpan === fullFlatCount), (0, _defineProperty2.default)(_cx, _styles.Classes.lockLeft, colIndex < leftFlatCount || theaderPosition === 'left'), (0, _defineProperty2.default)(_cx, _styles.Classes.lockRight, colIndex >= fullFlatCount - rightFlatCount || theaderPosition === 'right'), (0, _defineProperty2.default)(_cx, _styles.Classes.leaf, wrapped.isLeaf), _cx)),
|
|
290
305
|
colSpan: colSpan,
|
|
291
306
|
rowSpan: isLeaf ? rowCount - level : undefined,
|
|
292
307
|
style: (0, _extends2.default)((0, _extends2.default)({
|
|
@@ -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
|
-
}),
|
|
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;
|
|
@@ -309,10 +332,7 @@ function TableHeader(_ref2) {
|
|
|
309
332
|
});
|
|
310
333
|
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
311
334
|
key: level,
|
|
312
|
-
className: (0, _classnames.default)(_styles.Classes.tableHeaderRow, {
|
|
313
|
-
first: level === 0,
|
|
314
|
-
last: level === rowCount - 1
|
|
315
|
-
})
|
|
335
|
+
className: (0, _classnames.default)(_styles.Classes.tableHeaderRow, (_cx2 = {}, (0, _defineProperty2.default)(_cx2, _styles.Classes.first, level === 0), (0, _defineProperty2.default)(_cx2, _styles.Classes.last, level === rowCount - 1), _cx2))
|
|
316
336
|
}, headerCells);
|
|
317
337
|
});
|
|
318
338
|
var colgroup = (0, _map.default)(_context5 = (0, _flat.default)(headerRenderInfo)).call(_context5, function (wrapped) {
|
|
@@ -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
|
-
|
|
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
|
|
95
|
+
var _context3;
|
|
92
96
|
|
|
93
|
-
var selector = (0, _concat.default)(
|
|
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
|
|
103
|
+
var _context4;
|
|
100
104
|
|
|
101
|
-
var selector = (0, _concat.default)(
|
|
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;
|
|
@@ -9,10 +9,14 @@ exports.HtmlTable = HtmlTable;
|
|
|
9
9
|
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
|
11
11
|
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
|
13
|
+
|
|
12
14
|
var _flat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/flat"));
|
|
13
15
|
|
|
14
16
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
15
17
|
|
|
18
|
+
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
|
19
|
+
|
|
16
20
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
17
21
|
|
|
18
22
|
var _react = _interopRequireDefault(require("react"));
|
|
@@ -25,13 +29,17 @@ var _SpanManager = _interopRequireDefault(require("./helpers/SpanManager"));
|
|
|
25
29
|
|
|
26
30
|
var _styles = require("./styles");
|
|
27
31
|
|
|
32
|
+
var _utils = require("./utils");
|
|
33
|
+
|
|
28
34
|
function HtmlTable(_ref) {
|
|
29
35
|
var tbodyHtmlTag = _ref.tbodyHtmlTag,
|
|
30
36
|
getRowProps = _ref.getRowProps,
|
|
31
37
|
primaryKey = _ref.primaryKey,
|
|
38
|
+
hasScrollY = _ref.hasScrollY,
|
|
32
39
|
data = _ref.data,
|
|
33
40
|
verInfo = _ref.verticalRenderInfo,
|
|
34
|
-
hozInfo = _ref.horizontalRenderInfo
|
|
41
|
+
hozInfo = _ref.horizontalRenderInfo,
|
|
42
|
+
tbodyPosition = _ref.tbodyPosition;
|
|
35
43
|
var flat = (0, _flat.default)(hozInfo),
|
|
36
44
|
hoz = hozInfo.horizontalRenderRange;
|
|
37
45
|
var spanManager = new _SpanManager.default();
|
|
@@ -43,26 +51,37 @@ function HtmlTable(_ref) {
|
|
|
43
51
|
}), /*#__PURE__*/_react.default.createElement(tbodyHtmlTag, null, (0, _map.default)(data).call(data, renderRow)));
|
|
44
52
|
|
|
45
53
|
function renderRow(record, i) {
|
|
46
|
-
var _context;
|
|
54
|
+
var _cx, _context;
|
|
47
55
|
|
|
48
56
|
var rowIndex = verInfo.offset + i;
|
|
49
57
|
spanManager.stripUpwards(rowIndex);
|
|
50
58
|
var rowProps = getRowProps(record, rowIndex);
|
|
51
|
-
var rowClass = (0, _classnames.default)(_styles.Classes.tableRow, {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
var rowClass = (0, _classnames.default)(_styles.Classes.tableRow, (_cx = {}, (0, _defineProperty2.default)(_cx, _styles.Classes.first, rowIndex === verInfo.first), (0, _defineProperty2.default)(_cx, _styles.Classes.last, rowIndex === verInfo.last), (0, _defineProperty2.default)(_cx, _styles.Classes.even, rowIndex % 2 === 0), (0, _defineProperty2.default)(_cx, _styles.Classes.odd, rowIndex % 2 === 1), _cx), rowProps === null || rowProps === void 0 ? void 0 : rowProps.className);
|
|
60
|
+
var visibleColumnDescriptor = (0, _concat.default)(_context = hozInfo.visible).call(_context); // 左中右区域渲染,存在融合单元格时需要适配rowspan属性
|
|
61
|
+
// 如果固定的列均存在融合单元格,需空白一列做占位,否则融合的单元格不会渲染,导致显示异常
|
|
62
|
+
// 这里无法区分是否存在融合列,默认左右固定区域均添加占位空白列
|
|
63
|
+
|
|
64
|
+
if (['left', 'right'].indexOf(tbodyPosition) > -1) {
|
|
65
|
+
visibleColumnDescriptor.push({
|
|
66
|
+
type: 'blank',
|
|
67
|
+
blankSide: 'left',
|
|
68
|
+
width: 0,
|
|
69
|
+
isPlacehoder: true
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
57
73
|
return /*#__PURE__*/_react.default.createElement("tr", (0, _extends2.default)({}, rowProps, {
|
|
58
74
|
className: rowClass,
|
|
59
|
-
key: _internals.internals.safeGetRowKey(primaryKey, record, rowIndex),
|
|
75
|
+
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
76
|
"data-rowindex": rowIndex,
|
|
61
77
|
"data-role": 'table-row'
|
|
62
|
-
}), (0, _map.default)(
|
|
78
|
+
}), (0, _map.default)(visibleColumnDescriptor).call(visibleColumnDescriptor, function (descriptor) {
|
|
63
79
|
if (descriptor.type === 'blank') {
|
|
64
80
|
return /*#__PURE__*/_react.default.createElement("td", {
|
|
65
|
-
key: descriptor.blankSide
|
|
81
|
+
key: descriptor.blankSide,
|
|
82
|
+
style: {
|
|
83
|
+
visibility: descriptor.isPlacehoder ? 'hidden' : undefined
|
|
84
|
+
}
|
|
66
85
|
});
|
|
67
86
|
}
|
|
68
87
|
|
|
@@ -71,6 +90,8 @@ function HtmlTable(_ref) {
|
|
|
71
90
|
}
|
|
72
91
|
|
|
73
92
|
function renderBodyCell(record, rowIndex, column, colIndex) {
|
|
93
|
+
var _cx2;
|
|
94
|
+
|
|
74
95
|
var _a, _b, _c;
|
|
75
96
|
|
|
76
97
|
if (spanManager.testSkip(rowIndex, colIndex)) {
|
|
@@ -101,38 +122,35 @@ function HtmlTable(_ref) {
|
|
|
101
122
|
if (cellProps.rowSpan != null) {
|
|
102
123
|
rowSpan = cellProps.rowSpan;
|
|
103
124
|
}
|
|
104
|
-
}
|
|
105
|
-
|
|
125
|
+
}
|
|
106
126
|
|
|
107
|
-
rowSpan = Math.min(rowSpan, verInfo.limit - rowIndex);
|
|
108
|
-
colSpan = Math.min(colSpan, leftFlatCount + hoz.rightIndex - colIndex);
|
|
109
127
|
var hasSpan = colSpan > 1 || rowSpan > 1;
|
|
110
128
|
|
|
111
129
|
if (hasSpan) {
|
|
112
130
|
spanManager.add(rowIndex, colIndex, colSpan, rowSpan);
|
|
113
|
-
}
|
|
131
|
+
} // rowSpan/colSpan 不能过大,避免 rowSpan/colSpan 影响因虚拟滚动而未渲染的单元格
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
rowSpan = Math.min(rowSpan, verInfo.limit - rowIndex);
|
|
135
|
+
colSpan = Math.min(colSpan, hozInfo.visible.length - colIndex); // todo: 右侧有列固定的情况下colSpan计算不对,这里先限制一下
|
|
114
136
|
|
|
137
|
+
rowSpan = Math.max(rowSpan, 1);
|
|
138
|
+
colSpan = Math.max(colSpan, 1);
|
|
115
139
|
var positionStyle = {};
|
|
140
|
+
var scrollbarWidth = hasScrollY ? (0, _utils.getScrollbarSize)().width : 0;
|
|
116
141
|
|
|
117
142
|
if (colIndex < leftFlatCount) {
|
|
118
143
|
positionStyle.position = 'sticky';
|
|
119
144
|
positionStyle.left = hozInfo.stickyLeftMap.get(colIndex);
|
|
120
145
|
} else if (colIndex >= fullFlatCount - rightFlatCount) {
|
|
121
146
|
positionStyle.position = 'sticky';
|
|
122
|
-
positionStyle.right = hozInfo.stickyRightMap.get(colIndex);
|
|
147
|
+
positionStyle.right = hozInfo.stickyRightMap.get(colIndex) - scrollbarWidth;
|
|
123
148
|
}
|
|
124
149
|
|
|
125
150
|
return /*#__PURE__*/_react.default.createElement('td', (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({
|
|
126
151
|
key: colIndex
|
|
127
152
|
}, cellProps), {
|
|
128
|
-
className: (0, _classnames.default)(_styles.Classes.tableCell, cellProps.className, {
|
|
129
|
-
// class
|
|
130
|
-
first: colIndex === 0,
|
|
131
|
-
last: colIndex + colSpan === fullFlatCount,
|
|
132
|
-
'lock-left': colIndex < leftFlatCount,
|
|
133
|
-
'lock-right': colIndex >= fullFlatCount - rightFlatCount,
|
|
134
|
-
'row-span': rowSpan > 1
|
|
135
|
-
})
|
|
153
|
+
className: (0, _classnames.default)(_styles.Classes.tableCell, cellProps.className, (_cx2 = {}, (0, _defineProperty2.default)(_cx2, _styles.Classes.first, colIndex === 0), (0, _defineProperty2.default)(_cx2, _styles.Classes.last, colIndex + colSpan === fullFlatCount), (0, _defineProperty2.default)(_cx2, _styles.Classes.lockLeft, colIndex < leftFlatCount || tbodyPosition === 'left'), (0, _defineProperty2.default)(_cx2, _styles.Classes.lockRight, colIndex >= fullFlatCount - rightFlatCount), (0, _defineProperty2.default)(_cx2, _styles.Classes.rowSpan, rowSpan > 1), _cx2))
|
|
136
154
|
}), hasSpan ? {
|
|
137
155
|
colSpan: colSpan,
|
|
138
156
|
rowSpan: rowSpan
|
|
@@ -144,6 +162,6 @@ function HtmlTable(_ref) {
|
|
|
144
162
|
'data-role': 'table-cell',
|
|
145
163
|
'data-rowindex': rowIndex,
|
|
146
164
|
'data-code': column.code
|
|
147
|
-
}), cellContent);
|
|
165
|
+
}), tbodyPosition === 'center' && positionStyle.position === 'sticky' ? null : cellContent);
|
|
148
166
|
}
|
|
149
167
|
}
|