@kdcloudjs/table 1.2.2-canary.12 → 1.2.2-canary.14
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/dist/@kdcloudjs/table.css +1 -1
- package/dist/@kdcloudjs/table.js +1050 -459
- package/dist/@kdcloudjs/table.js.map +1 -1
- package/dist/@kdcloudjs/table.min.css +1 -1
- package/dist/@kdcloudjs/table.min.js +8 -8
- package/dist/@kdcloudjs/table.min.js.map +1 -1
- package/es/table/base/BlankComponent.d.ts +11 -0
- package/es/table/base/BlankComponent.js +61 -0
- package/es/table/base/helpers/FastScrollManager.d.ts +96 -0
- package/es/table/base/helpers/FastScrollManager.js +167 -0
- package/es/table/base/table.d.ts +13 -0
- package/es/table/base/table.js +126 -73
- package/es/table/pipeline/features/columnDrag.js +220 -242
- package/es/table/pipeline/features/columnResizeWidth.js +40 -5
- package/es/table/pipeline/features/rowDrag.js +169 -80
- package/es/table/pipeline/features/utils/touchEventUtils.d.ts +15 -0
- package/es/table/pipeline/features/utils/touchEventUtils.js +65 -0
- package/lib/table/base/BlankComponent.d.ts +11 -0
- package/lib/table/base/BlankComponent.js +75 -0
- package/lib/table/base/helpers/FastScrollManager.d.ts +96 -0
- package/lib/table/base/helpers/FastScrollManager.js +175 -0
- package/lib/table/base/table.d.ts +13 -0
- package/lib/table/base/table.js +126 -73
- package/lib/table/pipeline/features/columnDrag.js +220 -242
- package/lib/table/pipeline/features/columnResizeWidth.js +40 -5
- package/lib/table/pipeline/features/rowDrag.js +169 -80
- package/lib/table/pipeline/features/utils/touchEventUtils.d.ts +15 -0
- package/lib/table/pipeline/features/utils/touchEventUtils.js +76 -0
- package/package.json +1 -1
package/lib/table/base/table.js
CHANGED
|
@@ -34,6 +34,7 @@ var _header = _interopRequireDefault(require("./header"));
|
|
|
34
34
|
var _getRichVisibleRectsStream = require("./helpers/getRichVisibleRectsStream");
|
|
35
35
|
var _rowHeightManager = require("./helpers/rowHeightManager");
|
|
36
36
|
var _TableDOMUtils = require("./helpers/TableDOMUtils");
|
|
37
|
+
var _FastScrollManager = require("./helpers/FastScrollManager");
|
|
37
38
|
var _htmlTable = require("./html-table");
|
|
38
39
|
var _loading = _interopRequireDefault(require("./loading"));
|
|
39
40
|
var _styles = require("./styles");
|
|
@@ -41,6 +42,7 @@ var _globalStyleComponent = _interopRequireDefault(require("./globalStyleCompone
|
|
|
41
42
|
var _utils = require("./utils");
|
|
42
43
|
var _utils2 = require("../utils");
|
|
43
44
|
var _renderTemplates = _interopRequireDefault(require("./renderTemplates"));
|
|
45
|
+
var _BlankComponent = require("./BlankComponent");
|
|
44
46
|
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); }
|
|
45
47
|
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; }
|
|
46
48
|
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(_e2) { throw _e2; }, 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(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
@@ -66,6 +68,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
66
68
|
_this.artTableWrapperRef = /*#__PURE__*/_react.default.createRef();
|
|
67
69
|
_this.hasScrollY = false;
|
|
68
70
|
_this.offsetY = 0;
|
|
71
|
+
// Blank组件的引用,用于快速滚动时直接更新
|
|
72
|
+
_this.topBlankRef = /*#__PURE__*/_react.default.createRef();
|
|
73
|
+
_this.bottomBlankRef = /*#__PURE__*/_react.default.createRef();
|
|
69
74
|
_this.handleRowMouseEnter = function (e) {
|
|
70
75
|
var nodeList = _this.domHelper.getRowNodeListByEvent(e);
|
|
71
76
|
nodeList && nodeList.forEach(function (node) {
|
|
@@ -85,8 +90,7 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
85
90
|
getRowProps = _this$props.getRowProps,
|
|
86
91
|
primaryKey = _this$props.primaryKey,
|
|
87
92
|
isLoading = _this$props.isLoading,
|
|
88
|
-
emptyCellHeight = _this$props.emptyCellHeight
|
|
89
|
-
footerDataSource = _this$props.footerDataSource;
|
|
93
|
+
emptyCellHeight = _this$props.emptyCellHeight;
|
|
90
94
|
var tableBodyClassName = (0, _classnames.default)(_styles.Classes.tableBody, _styles.Classes.horizontalScrollContainer);
|
|
91
95
|
// 低版本Edge浏览器下也会出现双滚动条,这里设置overflow: 'hidden',先去掉edge的方向键控制滚动条的功能
|
|
92
96
|
var virtualStyle = _utils2.browserType.isIE || _utils2.browserType.isEdge ? {
|
|
@@ -136,12 +140,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
136
140
|
className: _styles.Classes.virtual,
|
|
137
141
|
tabIndex: -1,
|
|
138
142
|
style: virtualStyle
|
|
139
|
-
},
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
style: {
|
|
143
|
-
height: topBlank
|
|
144
|
-
}
|
|
143
|
+
}, /*#__PURE__*/_react.default.createElement(_BlankComponent.TopBlank, {
|
|
144
|
+
ref: _this.topBlankRef,
|
|
145
|
+
height: topBlank
|
|
145
146
|
}), /*#__PURE__*/_react.default.createElement(_htmlTable.HtmlTable, {
|
|
146
147
|
tbodyHtmlTag: "tbody",
|
|
147
148
|
getRowProps: getRowProps,
|
|
@@ -154,12 +155,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
154
155
|
limit: bottomIndex,
|
|
155
156
|
last: dataSource.length - 1
|
|
156
157
|
}
|
|
157
|
-
}),
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
style: {
|
|
161
|
-
height: bottomBlank
|
|
162
|
-
}
|
|
158
|
+
}), /*#__PURE__*/_react.default.createElement(_BlankComponent.BottomBlank, {
|
|
159
|
+
ref: _this.bottomBlankRef,
|
|
160
|
+
height: bottomBlank
|
|
163
161
|
})));
|
|
164
162
|
};
|
|
165
163
|
_this.state = {
|
|
@@ -174,6 +172,26 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
174
172
|
maxRenderHeight: 600,
|
|
175
173
|
maxRenderWidth: 800
|
|
176
174
|
};
|
|
175
|
+
// 初始化快速滚动管理器
|
|
176
|
+
var fastScrollCallbacks = {
|
|
177
|
+
onFastScrollStart: function onFastScrollStart(renderData) {
|
|
178
|
+
_this.setState({
|
|
179
|
+
previousRenderData: renderData
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
onFastScrollEnd: function onFastScrollEnd(scrollData) {
|
|
183
|
+
_this.setState({
|
|
184
|
+
previousRenderData: undefined,
|
|
185
|
+
offsetY: scrollData.offsetY,
|
|
186
|
+
maxRenderHeight: scrollData.maxRenderHeight,
|
|
187
|
+
maxRenderWidth: scrollData.maxRenderWidth
|
|
188
|
+
});
|
|
189
|
+
},
|
|
190
|
+
getCurrentRenderRange: function getCurrentRenderRange(offsetY, maxRenderHeight, dataLength) {
|
|
191
|
+
return _this.rowHeightManager.getRenderRange(offsetY, maxRenderHeight, dataLength);
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
_this.fastScrollManager = new _FastScrollManager.FastScrollManager(fastScrollCallbacks);
|
|
177
195
|
return _this;
|
|
178
196
|
}
|
|
179
197
|
/** @deprecated BaseTable.getDoms() 已经过时,请勿调用 */
|
|
@@ -295,7 +313,6 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
295
313
|
}, {
|
|
296
314
|
key: "syncHorizontalScroll",
|
|
297
315
|
value: function syncHorizontalScroll(x) {
|
|
298
|
-
var direction = this.props.direction;
|
|
299
316
|
var _x = Math.abs(x);
|
|
300
317
|
this.updateOffsetX(_x);
|
|
301
318
|
var flat = (0, _flat.default)(this.lastInfo);
|
|
@@ -323,11 +340,18 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
323
340
|
}, {
|
|
324
341
|
key: "getVerticalRenderRange",
|
|
325
342
|
value: function getVerticalRenderRange(useVirtual) {
|
|
326
|
-
var
|
|
343
|
+
var _this$props4 = this.props,
|
|
344
|
+
dataSource = _this$props4.dataSource,
|
|
345
|
+
isLowPerformance = _this$props4.isLowPerformance;
|
|
327
346
|
var _this$state = this.state,
|
|
328
347
|
offsetY = _this$state.offsetY,
|
|
329
|
-
maxRenderHeight = _this$state.maxRenderHeight
|
|
348
|
+
maxRenderHeight = _this$state.maxRenderHeight,
|
|
349
|
+
previousRenderData = _this$state.previousRenderData;
|
|
330
350
|
var rowCount = dataSource.length;
|
|
351
|
+
// 只有在启用快速滚动时才使用 FastScrollManager 的判断
|
|
352
|
+
if (isLowPerformance && this.fastScrollManager.getIsFastScrolling() && (previousRenderData === null || previousRenderData === void 0 ? void 0 : previousRenderData.verticalRenderRange)) {
|
|
353
|
+
return previousRenderData.verticalRenderRange;
|
|
354
|
+
}
|
|
331
355
|
if (useVirtual.vertical) {
|
|
332
356
|
return this.rowHeightManager.getRenderRange(offsetY, maxRenderHeight, rowCount);
|
|
333
357
|
} else {
|
|
@@ -338,12 +362,12 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
338
362
|
key: "renderTableFooter",
|
|
339
363
|
value: function renderTableFooter(info) {
|
|
340
364
|
// console.log('render footer')
|
|
341
|
-
var _this$
|
|
342
|
-
_this$
|
|
343
|
-
footerDataSource = _this$
|
|
344
|
-
getRowProps = _this$
|
|
345
|
-
primaryKey = _this$
|
|
346
|
-
stickyBottom = _this$
|
|
365
|
+
var _this$props5 = this.props,
|
|
366
|
+
_this$props5$footerDa = _this$props5.footerDataSource,
|
|
367
|
+
footerDataSource = _this$props5$footerDa === void 0 ? [] : _this$props5$footerDa,
|
|
368
|
+
getRowProps = _this$props5.getRowProps,
|
|
369
|
+
primaryKey = _this$props5.primaryKey,
|
|
370
|
+
stickyBottom = _this$props5.stickyBottom;
|
|
347
371
|
var stickyRightOffset = this.hasScrollY ? this.getScrollBarWidth() : 0;
|
|
348
372
|
var renderFooter = (0, _renderTemplates.default)('footer');
|
|
349
373
|
if (typeof renderFooter === 'function') {
|
|
@@ -405,9 +429,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
405
429
|
key: "renderStickyScroll",
|
|
406
430
|
value: function renderStickyScroll(info) {
|
|
407
431
|
// console.log('render stickyscroll')
|
|
408
|
-
var _this$
|
|
409
|
-
hasStickyScroll = _this$
|
|
410
|
-
stickyBottom = _this$
|
|
432
|
+
var _this$props6 = this.props,
|
|
433
|
+
hasStickyScroll = _this$props6.hasStickyScroll,
|
|
434
|
+
stickyBottom = _this$props6.stickyBottom;
|
|
411
435
|
var hasScroll = this.state.hasScroll;
|
|
412
436
|
var isScroll = hasStickyScroll && hasScroll;
|
|
413
437
|
var stickyScrollContainerStyle = this.getStickyScrollContainerStyle();
|
|
@@ -444,9 +468,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
444
468
|
}, {
|
|
445
469
|
key: "getStickyScrollContainerStyle",
|
|
446
470
|
value: function getStickyScrollContainerStyle() {
|
|
447
|
-
var _this$
|
|
448
|
-
hasStickyScroll = _this$
|
|
449
|
-
stickyScrollHeight = _this$
|
|
471
|
+
var _this$props7 = this.props,
|
|
472
|
+
hasStickyScroll = _this$props7.hasStickyScroll,
|
|
473
|
+
stickyScrollHeight = _this$props7.stickyScrollHeight;
|
|
450
474
|
var hasScroll = this.state.hasScroll;
|
|
451
475
|
var isScroll = hasStickyScroll && hasScroll;
|
|
452
476
|
var height = stickyScrollHeight === 'auto' ? this.getScrollBarWidth() : stickyScrollHeight;
|
|
@@ -464,21 +488,21 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
464
488
|
// console.log('render table')
|
|
465
489
|
var info = (0, _calculations.calculateRenderInfo)(this);
|
|
466
490
|
this.lastInfo = info;
|
|
467
|
-
var _this$
|
|
468
|
-
dataSource = _this$
|
|
469
|
-
className = _this$
|
|
470
|
-
style = _this$
|
|
471
|
-
hasHeader = _this$
|
|
472
|
-
useOuterBorder = _this$
|
|
473
|
-
isStickyHead = _this$
|
|
474
|
-
isStickyHeader = _this$
|
|
475
|
-
isStickyFooter = _this$
|
|
476
|
-
isLoading = _this$
|
|
477
|
-
getTableProps = _this$
|
|
478
|
-
footerDataSource = _this$
|
|
479
|
-
components = _this$
|
|
480
|
-
bordered = _this$
|
|
481
|
-
direction = _this$
|
|
491
|
+
var _this$props8 = this.props,
|
|
492
|
+
dataSource = _this$props8.dataSource,
|
|
493
|
+
className = _this$props8.className,
|
|
494
|
+
style = _this$props8.style,
|
|
495
|
+
hasHeader = _this$props8.hasHeader,
|
|
496
|
+
useOuterBorder = _this$props8.useOuterBorder,
|
|
497
|
+
isStickyHead = _this$props8.isStickyHead,
|
|
498
|
+
isStickyHeader = _this$props8.isStickyHeader,
|
|
499
|
+
isStickyFooter = _this$props8.isStickyFooter,
|
|
500
|
+
isLoading = _this$props8.isLoading,
|
|
501
|
+
getTableProps = _this$props8.getTableProps,
|
|
502
|
+
footerDataSource = _this$props8.footerDataSource,
|
|
503
|
+
components = _this$props8.components,
|
|
504
|
+
bordered = _this$props8.bordered,
|
|
505
|
+
direction = _this$props8.direction;
|
|
482
506
|
info.direction = direction;
|
|
483
507
|
var artTableWrapperClassName = (0, _classnames.default)(_styles.Classes.artTableWrapper, (_cx = {
|
|
484
508
|
'use-outer-border': useOuterBorder,
|
|
@@ -519,10 +543,10 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
519
543
|
this.initSubscriptions();
|
|
520
544
|
this.didMountOrUpdate();
|
|
521
545
|
// console.log('did mount end')
|
|
522
|
-
var _this$
|
|
523
|
-
cssVariables = _this$
|
|
524
|
-
enableCSSVariables = _this$
|
|
525
|
-
bordered = _this$
|
|
546
|
+
var _this$props9 = this.props,
|
|
547
|
+
cssVariables = _this$props9.cssVariables,
|
|
548
|
+
enableCSSVariables = _this$props9.enableCSSVariables,
|
|
549
|
+
bordered = _this$props9.bordered;
|
|
526
550
|
(0, _utils.cssPolifill)({
|
|
527
551
|
variables: cssVariables || {},
|
|
528
552
|
enableCSSVariables: enableCSSVariables,
|
|
@@ -537,10 +561,10 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
537
561
|
value: function componentDidUpdate(prevProps, prevState) {
|
|
538
562
|
var _a;
|
|
539
563
|
// console.log('did update start')
|
|
540
|
-
var _this$
|
|
541
|
-
cssVariables = _this$
|
|
542
|
-
enableCSSVariables = _this$
|
|
543
|
-
bordered = _this$
|
|
564
|
+
var _this$props10 = this.props,
|
|
565
|
+
cssVariables = _this$props10.cssVariables,
|
|
566
|
+
enableCSSVariables = _this$props10.enableCSSVariables,
|
|
567
|
+
bordered = _this$props10.bordered;
|
|
544
568
|
if (!(0, _utils.shallowEqual)(prevProps === null || prevProps === void 0 ? void 0 : prevProps.cssVariables, (_a = this.props) === null || _a === void 0 ? void 0 : _a.cssVariables)) {
|
|
545
569
|
(0, _utils.cssPolifill)({
|
|
546
570
|
variables: cssVariables || {},
|
|
@@ -556,10 +580,13 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
556
580
|
}, {
|
|
557
581
|
key: "didMountOrUpdate",
|
|
558
582
|
value: function didMountOrUpdate(prevProps, prevState) {
|
|
559
|
-
this
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
583
|
+
var _this2 = this;
|
|
584
|
+
window.requestAnimationFrame(function () {
|
|
585
|
+
_this2.syncHorizontalScrollFromTableBody();
|
|
586
|
+
_this2.updateStickyScroll();
|
|
587
|
+
_this2.adjustNeedRenderLock();
|
|
588
|
+
_this2.updateRowHeightManager();
|
|
589
|
+
});
|
|
563
590
|
this.updateScrollLeftWhenLayoutChanged(prevProps, prevState);
|
|
564
591
|
}
|
|
565
592
|
}, {
|
|
@@ -581,25 +608,25 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
581
608
|
}, {
|
|
582
609
|
key: "initSubscriptions",
|
|
583
610
|
value: function initSubscriptions() {
|
|
584
|
-
var
|
|
611
|
+
var _this3 = this;
|
|
585
612
|
var _this$domHelper2 = this.domHelper,
|
|
586
613
|
virtual = _this$domHelper2.virtual,
|
|
587
614
|
stickyScroll = _this$domHelper2.stickyScroll;
|
|
588
615
|
this.rootSubscription.add(_utils.throttledWindowResize$.subscribe(function () {
|
|
589
|
-
|
|
590
|
-
|
|
616
|
+
_this3.updateStickyScroll();
|
|
617
|
+
_this3.adjustNeedRenderLock();
|
|
591
618
|
}));
|
|
592
619
|
this.resizeSubject.pipe(op.debounceTime(100)).subscribe(function () {
|
|
593
620
|
var _a, _b;
|
|
594
|
-
(_b = (_a =
|
|
621
|
+
(_b = (_a = _this3.props).setTableWidth) === null || _b === void 0 ? void 0 : _b.call(_a, _this3.domHelper.tableBody.clientWidth);
|
|
595
622
|
});
|
|
596
623
|
var handleTableWrapperResize = function handleTableWrapperResize() {
|
|
597
|
-
|
|
624
|
+
_this3.resizeSubject.next();
|
|
598
625
|
};
|
|
599
626
|
this.resizeObserver = (0, _utils.addResizeObserver)(this.domHelper.artTableWrapper, handleTableWrapperResize);
|
|
600
627
|
// 滚动同步
|
|
601
628
|
this.rootSubscription.add((0, _utils.syncScrollLeft)([(0, _utils.getTableScrollHeaderDOM)(this.domHelper), virtual, (0, _utils.getTableScrollFooterDOM)(this.domHelper), stickyScroll], function (scrollLeft) {
|
|
602
|
-
|
|
629
|
+
_this3.syncHorizontalScroll(scrollLeft);
|
|
603
630
|
}));
|
|
604
631
|
var richVisibleRects$ = (0, _getRichVisibleRectsStream.getRichVisibleRectsStream)(this.domHelper.virtual, this.props$.pipe(op.skip(1), op.mapTo('structure-may-change')), this.props.virtualDebugLabel).pipe(op.shareReplay());
|
|
605
632
|
// 每当可见部分发生变化的时候,调整 loading icon 的未知(如果 loading icon 存在的话)
|
|
@@ -613,7 +640,7 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
613
640
|
}))]).subscribe(function (_ref3) {
|
|
614
641
|
var _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
|
|
615
642
|
clipRect = _ref4[0];
|
|
616
|
-
var loadingIndicator =
|
|
643
|
+
var loadingIndicator = _this3.domHelper.getLoadingIndicator();
|
|
617
644
|
if (!loadingIndicator) {
|
|
618
645
|
return;
|
|
619
646
|
}
|
|
@@ -624,9 +651,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
624
651
|
}));
|
|
625
652
|
// 每当可见部分发生变化的时候,如果开启了虚拟滚动,则重新触发 render
|
|
626
653
|
this.rootSubscription.add(richVisibleRects$.pipe(op.filter(function () {
|
|
627
|
-
var
|
|
628
|
-
horizontal =
|
|
629
|
-
vertical =
|
|
654
|
+
var _this3$lastInfo$useVi = _this3.lastInfo.useVirtual,
|
|
655
|
+
horizontal = _this3$lastInfo$useVi.horizontal,
|
|
656
|
+
vertical = _this3$lastInfo$useVi.vertical;
|
|
630
657
|
return horizontal || vertical;
|
|
631
658
|
}), op.map(function (_ref5) {
|
|
632
659
|
var clipRect = _ref5.clipRect,
|
|
@@ -643,8 +670,29 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
643
670
|
}
|
|
644
671
|
// 因为 overscan 的存在,滚动较小的距离时不需要触发组件重渲染
|
|
645
672
|
return Math.abs(x.maxRenderWidth - y.maxRenderWidth) < _utils.OVERSCAN_SIZE / 2 && Math.abs(x.maxRenderHeight - y.maxRenderHeight) < _utils.OVERSCAN_SIZE / 2 && Math.abs(x.offsetY - y.offsetY) < _utils.OVERSCAN_SIZE / 2;
|
|
673
|
+
}),
|
|
674
|
+
// 快速滚动检测和处理
|
|
675
|
+
op.tap(function (sizeAndOffset) {
|
|
676
|
+
// 只有在启用快速滚动时才使用 FastScrollManager 处理滚动事件
|
|
677
|
+
if (_this3.props.isLowPerformance) {
|
|
678
|
+
_this3.fastScrollManager.handleScrollEvent(sizeAndOffset, {
|
|
679
|
+
offsetY: _this3.state.offsetY,
|
|
680
|
+
maxRenderHeight: _this3.state.maxRenderHeight,
|
|
681
|
+
maxRenderWidth: _this3.state.maxRenderWidth
|
|
682
|
+
}, _this3.props.dataSource.length, _this3.domHelper.virtual.scrollHeight);
|
|
683
|
+
}
|
|
646
684
|
})).subscribe(function (sizeAndOffset) {
|
|
647
|
-
|
|
685
|
+
var _a, _b;
|
|
686
|
+
// 正常滚动时也需要实时更新 blank 高度,确保缓慢滚动时的视觉连续性
|
|
687
|
+
var currentRange = _this3.rowHeightManager.getRenderRange(sizeAndOffset.offsetY, sizeAndOffset.maxRenderHeight, _this3.props.dataSource.length);
|
|
688
|
+
// 直接更新 DOM,避免等待下次渲染
|
|
689
|
+
(_a = _this3.topBlankRef.current) === null || _a === void 0 ? void 0 : _a.updateHeight(currentRange.topBlank);
|
|
690
|
+
(_b = _this3.bottomBlankRef.current) === null || _b === void 0 ? void 0 : _b.updateHeight(currentRange.bottomBlank);
|
|
691
|
+
// 只有在启用快速滚动时才检查快速滚动状态
|
|
692
|
+
if (_this3.props.isLowPerformance && _this3.fastScrollManager.getIsFastScrolling()) {
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
_this3.setState(sizeAndOffset);
|
|
648
696
|
}));
|
|
649
697
|
this.rootSubscription.add(richVisibleRects$.pipe(op.map(function (_ref6) {
|
|
650
698
|
var clipRect = _ref6.clipRect,
|
|
@@ -662,13 +710,13 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
662
710
|
var _a;
|
|
663
711
|
var offsetY = sizeAndOffset.offsetY,
|
|
664
712
|
maxRenderHeight = sizeAndOffset.maxRenderHeight;
|
|
665
|
-
var scrollDirection = offsetY -
|
|
666
|
-
|
|
667
|
-
var rowCount =
|
|
668
|
-
var vertical =
|
|
713
|
+
var scrollDirection = offsetY - _this3.offsetY >= 0 ? 'down' : 'up';
|
|
714
|
+
_this3.offsetY = offsetY;
|
|
715
|
+
var rowCount = _this3.props.dataSource.length;
|
|
716
|
+
var vertical = _this3.rowHeightManager.getRenderRange(offsetY, maxRenderHeight, rowCount);
|
|
669
717
|
var topIndex = vertical.topIndex,
|
|
670
718
|
bottomIndex = vertical.bottomIndex;
|
|
671
|
-
var blockSize = ((_a =
|
|
719
|
+
var blockSize = ((_a = _this3.props.scrollLoad) === null || _a === void 0 ? void 0 : _a.blockSize) || 200;
|
|
672
720
|
var topBlockStartIndex = Math.floor(Math.max(topIndex - 1, 0) / blockSize) * blockSize;
|
|
673
721
|
var bottomBlockStartIndex = Math.floor((bottomIndex + 1) / blockSize) * blockSize;
|
|
674
722
|
return scrollDirection === 'down' ? [topBlockStartIndex, bottomBlockStartIndex] : [bottomBlockStartIndex, topBlockStartIndex];
|
|
@@ -683,7 +731,7 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
683
731
|
// 过滤掉重复掉值
|
|
684
732
|
op.distinctUntilChanged()).subscribe(function (startIndex) {
|
|
685
733
|
var _a;
|
|
686
|
-
(_a =
|
|
734
|
+
(_a = _this3.props.scrollLoad) === null || _a === void 0 ? void 0 : _a.callback(startIndex);
|
|
687
735
|
}));
|
|
688
736
|
}
|
|
689
737
|
}, {
|
|
@@ -693,6 +741,10 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
693
741
|
(_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
694
742
|
this.rootSubscription.unsubscribe();
|
|
695
743
|
this.resizeSubject.unsubscribe();
|
|
744
|
+
// 只有在启用快速滚动时才清理快速滚动管理器
|
|
745
|
+
if (this.props.isLowPerformance) {
|
|
746
|
+
this.fastScrollManager.cleanup();
|
|
747
|
+
}
|
|
696
748
|
}
|
|
697
749
|
/** 更新 DOM 节点的引用,方便其他方法直接操作 DOM */
|
|
698
750
|
}, {
|
|
@@ -788,6 +840,7 @@ BaseTable.defaultProps = {
|
|
|
788
840
|
stickyScrollHeight: 'auto',
|
|
789
841
|
useVirtual: 'auto',
|
|
790
842
|
estimatedRowHeight: 48,
|
|
843
|
+
isLowPerformance: false,
|
|
791
844
|
isLoading: false,
|
|
792
845
|
components: {},
|
|
793
846
|
getTableProps: _rxjs.noop,
|