@kdcloudjs/table 1.1.2-canary.1 → 1.1.3-canary.1
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 +56 -7
- package/dist/@kdcloudjs/table.js.map +1 -1
- package/dist/@kdcloudjs/table.min.css +1 -1
- package/dist/@kdcloudjs/table.min.js +7 -7
- package/dist/@kdcloudjs/table.min.js.map +1 -1
- package/es/table/base/helpers/TableDOMUtils.js +12 -10
- package/es/table/base/styles.d.ts +0 -1
- package/es/table/base/styles.js +1 -2
- package/es/table/base/table.d.ts +7 -0
- package/es/table/base/table.js +52 -3
- package/lib/table/base/helpers/TableDOMUtils.js +12 -10
- package/lib/table/base/styles.d.ts +0 -1
- package/lib/table/base/styles.js +1 -2
- package/lib/table/base/table.d.ts +7 -0
- package/lib/table/base/table.js +51 -2
- package/package.json +1 -1
|
@@ -69,31 +69,33 @@ export var TableDOMHelper = /*#__PURE__*/function () {
|
|
|
69
69
|
}, {
|
|
70
70
|
key: "getTableRows",
|
|
71
71
|
value: function getTableRows() {
|
|
72
|
-
var
|
|
73
|
-
|
|
72
|
+
var _context2;
|
|
73
|
+
|
|
74
|
+
var tbody = this.artTable.querySelector(_concatInstanceProperty(_context2 = ".".concat(Classes.tableBody, " .")).call(_context2, Classes.virtual, " table tbody"));
|
|
75
|
+
return tbody.childNodes;
|
|
74
76
|
}
|
|
75
77
|
}, {
|
|
76
78
|
key: "getTableBodyHtmlTable",
|
|
77
79
|
value: function getTableBodyHtmlTable() {
|
|
78
|
-
var
|
|
80
|
+
var _context3;
|
|
79
81
|
|
|
80
|
-
return this.artTable.querySelector(_concatInstanceProperty(
|
|
82
|
+
return this.artTable.querySelector(_concatInstanceProperty(_context3 = ".".concat(Classes.tableBody, " .")).call(_context3, Classes.virtual, " table"));
|
|
81
83
|
}
|
|
82
84
|
}, {
|
|
83
85
|
key: "getLeftLockShadow",
|
|
84
86
|
value: function getLeftLockShadow() {
|
|
85
|
-
var
|
|
87
|
+
var _context4;
|
|
86
88
|
|
|
87
|
-
var selector = _concatInstanceProperty(
|
|
89
|
+
var selector = _concatInstanceProperty(_context4 = ".".concat(Classes.lockShadowMask, " .")).call(_context4, Classes.leftLockShadow);
|
|
88
90
|
|
|
89
91
|
return this.artTable.querySelector(selector);
|
|
90
92
|
}
|
|
91
93
|
}, {
|
|
92
94
|
key: "getRightLockShadow",
|
|
93
95
|
value: function getRightLockShadow() {
|
|
94
|
-
var
|
|
96
|
+
var _context5;
|
|
95
97
|
|
|
96
|
-
var selector = _concatInstanceProperty(
|
|
98
|
+
var selector = _concatInstanceProperty(_context5 = ".".concat(Classes.lockShadowMask, " .")).call(_context5, Classes.rightLockShadow);
|
|
97
99
|
|
|
98
100
|
return this.artTable.querySelector(selector);
|
|
99
101
|
}
|
|
@@ -105,11 +107,11 @@ export var TableDOMHelper = /*#__PURE__*/function () {
|
|
|
105
107
|
}, {
|
|
106
108
|
key: "getRowTop",
|
|
107
109
|
value: function getRowTop(rowIndex) {
|
|
108
|
-
var
|
|
110
|
+
var _context6, _context7;
|
|
109
111
|
|
|
110
112
|
if (rowIndex === 0) return 0;
|
|
111
113
|
|
|
112
|
-
var selector = _concatInstanceProperty(
|
|
114
|
+
var selector = _concatInstanceProperty(_context6 = _concatInstanceProperty(_context7 = ".".concat(Classes.tableBody, " .")).call(_context7, Classes.tableRow, "[data-rowindex=\"")).call(_context6, rowIndex, "\"]");
|
|
113
115
|
|
|
114
116
|
var row = this.artTable.querySelector(selector);
|
|
115
117
|
var rowOffsetTop = row && row.offsetTop || 0;
|
|
@@ -149,7 +149,6 @@ export declare const defaultCSSVariables: {
|
|
|
149
149
|
'---cell-border-vertical': string;
|
|
150
150
|
'--header-cell-border': string;
|
|
151
151
|
'--header-cell-border-horizontal': string;
|
|
152
|
-
'--header-cell-border-vertical': string;
|
|
153
152
|
};
|
|
154
153
|
export declare const variableConst: string;
|
|
155
154
|
export declare const StyledArtTableWrapper: any;
|
package/es/table/base/styles.js
CHANGED
|
@@ -117,8 +117,7 @@ export var defaultCSSVariables = {
|
|
|
117
117
|
'--cell-border-horizontal': '1px solid #dfe3e8',
|
|
118
118
|
'---cell-border-vertical': '1px solid #dfe3e8',
|
|
119
119
|
'--header-cell-border': '1px solid #dfe3e8',
|
|
120
|
-
'--header-cell-border-horizontal': '1px solid #dfe3e8'
|
|
121
|
-
'--header-cell-border-vertical': '1px solid #dfe3e8'
|
|
120
|
+
'--header-cell-border-horizontal': '1px solid #dfe3e8'
|
|
122
121
|
};
|
|
123
122
|
export var variableConst = getCssVariableText(defaultCSSVariables);
|
|
124
123
|
export var StyledArtTableWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n user-select:none;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.", " {\n border-right: none;\n border-bottom: none;\n }\n\n tr.", " th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.", " {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.", " {\n border-left: var(--cell-border-vertical);\n }\n tr.", " td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tbody tr.", " td {\n border-bottom: none;\n }\n\n .", ",\n .", " {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: auto;\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n \n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.leaf, Classes.first, Classes.first, Classes.first, Classes.first, Classes.first, Classes.last, Classes.lockLeft, Classes.lockRight, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder);
|
package/es/table/base/table.d.ts
CHANGED
|
@@ -80,6 +80,12 @@ export interface BaseTableProps {
|
|
|
80
80
|
[key: string]: any;
|
|
81
81
|
};
|
|
82
82
|
enableCSSVariables?: boolean;
|
|
83
|
+
scrollLoad?: {
|
|
84
|
+
/** 表格滚动加载回调 */
|
|
85
|
+
callback(startIndex: number): void;
|
|
86
|
+
/** 每个数据块的数据条数 */
|
|
87
|
+
blockSize?: number;
|
|
88
|
+
};
|
|
83
89
|
}
|
|
84
90
|
export interface BaseTableState {
|
|
85
91
|
/** 是否要展示自定义滚动条(stickyScroll) */
|
|
@@ -127,6 +133,7 @@ export declare class BaseTable extends React.Component<BaseTableProps, BaseTable
|
|
|
127
133
|
private hasScrollY;
|
|
128
134
|
private resizeObserver?;
|
|
129
135
|
private resizeSubject;
|
|
136
|
+
private offsetY;
|
|
130
137
|
/** @deprecated BaseTable.getDoms() 已经过时,请勿调用 */
|
|
131
138
|
getDoms(): TableDOMHelper;
|
|
132
139
|
constructor(props: Readonly<BaseTableProps>);
|
package/es/table/base/table.js
CHANGED
|
@@ -27,7 +27,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_R
|
|
|
27
27
|
|
|
28
28
|
import cx from 'classnames';
|
|
29
29
|
import React from 'react';
|
|
30
|
-
import { BehaviorSubject, combineLatest, noop, Subscription, Subject } from 'rxjs';
|
|
30
|
+
import { BehaviorSubject, combineLatest, noop, Subscription, Subject, from } from 'rxjs';
|
|
31
31
|
import * as op from 'rxjs/operators';
|
|
32
32
|
import { calculateRenderInfo } from './calculations';
|
|
33
33
|
import { EmptyHtmlTable } from './empty';
|
|
@@ -93,6 +93,7 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
93
93
|
_this.rootSubscription = new Subscription();
|
|
94
94
|
_this.hasScrollY = false;
|
|
95
95
|
_this.resizeSubject = new Subject();
|
|
96
|
+
_this.offsetY = 0;
|
|
96
97
|
|
|
97
98
|
_this.getRowNodeListByEvent = function (e) {
|
|
98
99
|
var nodeList = null;
|
|
@@ -657,11 +658,57 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
657
658
|
offsetY: offsetY
|
|
658
659
|
};
|
|
659
660
|
}), op.distinctUntilChanged(function (x, y) {
|
|
660
|
-
//
|
|
661
|
+
// 如果表格区域被隐藏, 不需要触发组件重渲染
|
|
662
|
+
if (y.maxRenderHeight === 0 && y.maxRenderWidth === 0) {
|
|
663
|
+
return true;
|
|
664
|
+
} // 因为 overscan 的存在,滚动较小的距离时不需要触发组件重渲染
|
|
665
|
+
|
|
666
|
+
|
|
661
667
|
return Math.abs(x.maxRenderWidth - y.maxRenderWidth) < OVERSCAN_SIZE / 2 && Math.abs(x.maxRenderHeight - y.maxRenderHeight) < OVERSCAN_SIZE / 2 && Math.abs(x.offsetY - y.offsetY) < OVERSCAN_SIZE / 2;
|
|
662
668
|
})).subscribe(function (sizeAndOffset) {
|
|
663
669
|
_this2.setState(sizeAndOffset);
|
|
664
670
|
}));
|
|
671
|
+
this.rootSubscription.add(richVisibleRects$.pipe(op.map(function (_ref7) {
|
|
672
|
+
var clipRect = _ref7.clipRect,
|
|
673
|
+
offsetY = _ref7.offsetY;
|
|
674
|
+
return {
|
|
675
|
+
maxRenderHeight: clipRect.bottom - clipRect.top,
|
|
676
|
+
maxRenderWidth: clipRect.right - clipRect.left,
|
|
677
|
+
offsetY: offsetY
|
|
678
|
+
};
|
|
679
|
+
}), op.distinctUntilChanged(function (x, y) {
|
|
680
|
+
return x.offsetY - y.offsetY === 0;
|
|
681
|
+
}), // 计算得到当前行索引对应的数据块,blocks改成数组的形式,兼容快速拖动可视区域出现两个数据块的情况
|
|
682
|
+
op.map(function (sizeAndOffset) {
|
|
683
|
+
var _a;
|
|
684
|
+
|
|
685
|
+
var offsetY = sizeAndOffset.offsetY,
|
|
686
|
+
maxRenderHeight = sizeAndOffset.maxRenderHeight;
|
|
687
|
+
var scrollDirection = offsetY - _this2.offsetY >= 0 ? 'down' : 'up';
|
|
688
|
+
_this2.offsetY = offsetY;
|
|
689
|
+
var rowCount = _this2.props.dataSource.length;
|
|
690
|
+
|
|
691
|
+
var vertical = _this2.rowHeightManager.getRenderRange(offsetY, maxRenderHeight, rowCount);
|
|
692
|
+
|
|
693
|
+
var topIndex = vertical.topIndex,
|
|
694
|
+
bottomIndex = vertical.bottomIndex;
|
|
695
|
+
var blockSize = ((_a = _this2.props.scrollLoad) === null || _a === void 0 ? void 0 : _a.blockSize) || 200;
|
|
696
|
+
var topBlockStartIndex = Math.floor(Math.max(topIndex - 1, 0) / blockSize) * blockSize;
|
|
697
|
+
var bottomBlockStartIndex = Math.floor((bottomIndex + 1) / blockSize) * blockSize;
|
|
698
|
+
return scrollDirection === 'down' ? [topBlockStartIndex, bottomBlockStartIndex] : [bottomBlockStartIndex, topBlockStartIndex];
|
|
699
|
+
}), op.distinctUntilChanged(function (x, y) {
|
|
700
|
+
return x[0] === y[0] && x[1] === y[1];
|
|
701
|
+
}), op.switchMap(function (startIndexs) {
|
|
702
|
+
var event$ = from(startIndexs);
|
|
703
|
+
return event$.pipe(op.map(function (startIndex) {
|
|
704
|
+
return startIndex;
|
|
705
|
+
}));
|
|
706
|
+
}), // 过滤掉重复掉值
|
|
707
|
+
op.distinctUntilChanged()).subscribe(function (startIndex) {
|
|
708
|
+
var _a;
|
|
709
|
+
|
|
710
|
+
(_a = _this2.props.scrollLoad) === null || _a === void 0 ? void 0 : _a.callback(startIndex);
|
|
711
|
+
}));
|
|
665
712
|
}
|
|
666
713
|
}, {
|
|
667
714
|
key: "componentWillUnmount",
|
|
@@ -708,10 +755,12 @@ export var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
708
755
|
|
|
709
756
|
if (size === 0) {
|
|
710
757
|
zeroHeightRowCount += 1;
|
|
758
|
+
} else {
|
|
759
|
+
// 渲染出来的行高度为0,说明是display=none情况,行高不存在该种异常情况,不保存当前的高度
|
|
760
|
+
this.rowHeightManager.updateRow(rowIndex, offset, size);
|
|
711
761
|
}
|
|
712
762
|
|
|
713
763
|
maxTrBottom = Math.max(maxTrBottom, offset + size);
|
|
714
|
-
this.rowHeightManager.updateRow(rowIndex, offset, size);
|
|
715
764
|
} // 当 estimatedRowHeight 过大时,可能出现「渲染行数过少,无法覆盖可视范围」的情况
|
|
716
765
|
// 出现这种情况时,我们判断「下一次渲染能够渲染更多行」是否满足,满足的话就直接调用 forceUpdate
|
|
717
766
|
// zeroHeightRowCount === 0 用于确保当前没有 display=none 的情况
|
|
@@ -79,30 +79,32 @@ var TableDOMHelper = /*#__PURE__*/function () {
|
|
|
79
79
|
}, {
|
|
80
80
|
key: "getTableRows",
|
|
81
81
|
value: function getTableRows() {
|
|
82
|
-
var
|
|
83
|
-
|
|
82
|
+
var _context2;
|
|
83
|
+
|
|
84
|
+
var tbody = this.artTable.querySelector((0, _concat.default)(_context2 = ".".concat(_styles.Classes.tableBody, " .")).call(_context2, _styles.Classes.virtual, " table tbody"));
|
|
85
|
+
return tbody.childNodes;
|
|
84
86
|
}
|
|
85
87
|
}, {
|
|
86
88
|
key: "getTableBodyHtmlTable",
|
|
87
89
|
value: function getTableBodyHtmlTable() {
|
|
88
|
-
var
|
|
90
|
+
var _context3;
|
|
89
91
|
|
|
90
|
-
return this.artTable.querySelector((0, _concat.default)(
|
|
92
|
+
return this.artTable.querySelector((0, _concat.default)(_context3 = ".".concat(_styles.Classes.tableBody, " .")).call(_context3, _styles.Classes.virtual, " table"));
|
|
91
93
|
}
|
|
92
94
|
}, {
|
|
93
95
|
key: "getLeftLockShadow",
|
|
94
96
|
value: function getLeftLockShadow() {
|
|
95
|
-
var
|
|
97
|
+
var _context4;
|
|
96
98
|
|
|
97
|
-
var selector = (0, _concat.default)(
|
|
99
|
+
var selector = (0, _concat.default)(_context4 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context4, _styles.Classes.leftLockShadow);
|
|
98
100
|
return this.artTable.querySelector(selector);
|
|
99
101
|
}
|
|
100
102
|
}, {
|
|
101
103
|
key: "getRightLockShadow",
|
|
102
104
|
value: function getRightLockShadow() {
|
|
103
|
-
var
|
|
105
|
+
var _context5;
|
|
104
106
|
|
|
105
|
-
var selector = (0, _concat.default)(
|
|
107
|
+
var selector = (0, _concat.default)(_context5 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context5, _styles.Classes.rightLockShadow);
|
|
106
108
|
return this.artTable.querySelector(selector);
|
|
107
109
|
}
|
|
108
110
|
}, {
|
|
@@ -113,10 +115,10 @@ var TableDOMHelper = /*#__PURE__*/function () {
|
|
|
113
115
|
}, {
|
|
114
116
|
key: "getRowTop",
|
|
115
117
|
value: function getRowTop(rowIndex) {
|
|
116
|
-
var
|
|
118
|
+
var _context6, _context7;
|
|
117
119
|
|
|
118
120
|
if (rowIndex === 0) return 0;
|
|
119
|
-
var selector = (0, _concat.default)(
|
|
121
|
+
var selector = (0, _concat.default)(_context6 = (0, _concat.default)(_context7 = ".".concat(_styles.Classes.tableBody, " .")).call(_context7, _styles.Classes.tableRow, "[data-rowindex=\"")).call(_context6, rowIndex, "\"]");
|
|
120
122
|
var row = this.artTable.querySelector(selector);
|
|
121
123
|
var rowOffsetTop = row && row.offsetTop || 0;
|
|
122
124
|
var tableOffsetTop = this.tableElement.offsetTop || 0;
|
|
@@ -149,7 +149,6 @@ export declare const defaultCSSVariables: {
|
|
|
149
149
|
'---cell-border-vertical': string;
|
|
150
150
|
'--header-cell-border': string;
|
|
151
151
|
'--header-cell-border-horizontal': string;
|
|
152
|
-
'--header-cell-border-vertical': string;
|
|
153
152
|
};
|
|
154
153
|
export declare const variableConst: string;
|
|
155
154
|
export declare const StyledArtTableWrapper: any;
|
package/lib/table/base/styles.js
CHANGED
|
@@ -142,8 +142,7 @@ var defaultCSSVariables = {
|
|
|
142
142
|
'--cell-border-horizontal': '1px solid #dfe3e8',
|
|
143
143
|
'---cell-border-vertical': '1px solid #dfe3e8',
|
|
144
144
|
'--header-cell-border': '1px solid #dfe3e8',
|
|
145
|
-
'--header-cell-border-horizontal': '1px solid #dfe3e8'
|
|
146
|
-
'--header-cell-border-vertical': '1px solid #dfe3e8'
|
|
145
|
+
'--header-cell-border-horizontal': '1px solid #dfe3e8'
|
|
147
146
|
};
|
|
148
147
|
exports.defaultCSSVariables = defaultCSSVariables;
|
|
149
148
|
var variableConst = getCssVariableText(defaultCSSVariables);
|
|
@@ -80,6 +80,12 @@ export interface BaseTableProps {
|
|
|
80
80
|
[key: string]: any;
|
|
81
81
|
};
|
|
82
82
|
enableCSSVariables?: boolean;
|
|
83
|
+
scrollLoad?: {
|
|
84
|
+
/** 表格滚动加载回调 */
|
|
85
|
+
callback(startIndex: number): void;
|
|
86
|
+
/** 每个数据块的数据条数 */
|
|
87
|
+
blockSize?: number;
|
|
88
|
+
};
|
|
83
89
|
}
|
|
84
90
|
export interface BaseTableState {
|
|
85
91
|
/** 是否要展示自定义滚动条(stickyScroll) */
|
|
@@ -127,6 +133,7 @@ export declare class BaseTable extends React.Component<BaseTableProps, BaseTable
|
|
|
127
133
|
private hasScrollY;
|
|
128
134
|
private resizeObserver?;
|
|
129
135
|
private resizeSubject;
|
|
136
|
+
private offsetY;
|
|
130
137
|
/** @deprecated BaseTable.getDoms() 已经过时,请勿调用 */
|
|
131
138
|
getDoms(): TableDOMHelper;
|
|
132
139
|
constructor(props: Readonly<BaseTableProps>);
|
package/lib/table/base/table.js
CHANGED
|
@@ -143,6 +143,7 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
143
143
|
_this.rootSubscription = new _rxjs.Subscription();
|
|
144
144
|
_this.hasScrollY = false;
|
|
145
145
|
_this.resizeSubject = new _rxjs.Subject();
|
|
146
|
+
_this.offsetY = 0;
|
|
146
147
|
|
|
147
148
|
_this.getRowNodeListByEvent = function (e) {
|
|
148
149
|
var nodeList = null;
|
|
@@ -704,11 +705,57 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
704
705
|
offsetY: offsetY
|
|
705
706
|
};
|
|
706
707
|
}), op.distinctUntilChanged(function (x, y) {
|
|
707
|
-
//
|
|
708
|
+
// 如果表格区域被隐藏, 不需要触发组件重渲染
|
|
709
|
+
if (y.maxRenderHeight === 0 && y.maxRenderWidth === 0) {
|
|
710
|
+
return true;
|
|
711
|
+
} // 因为 overscan 的存在,滚动较小的距离时不需要触发组件重渲染
|
|
712
|
+
|
|
713
|
+
|
|
708
714
|
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;
|
|
709
715
|
})).subscribe(function (sizeAndOffset) {
|
|
710
716
|
_this2.setState(sizeAndOffset);
|
|
711
717
|
}));
|
|
718
|
+
this.rootSubscription.add(richVisibleRects$.pipe(op.map(function (_ref7) {
|
|
719
|
+
var clipRect = _ref7.clipRect,
|
|
720
|
+
offsetY = _ref7.offsetY;
|
|
721
|
+
return {
|
|
722
|
+
maxRenderHeight: clipRect.bottom - clipRect.top,
|
|
723
|
+
maxRenderWidth: clipRect.right - clipRect.left,
|
|
724
|
+
offsetY: offsetY
|
|
725
|
+
};
|
|
726
|
+
}), op.distinctUntilChanged(function (x, y) {
|
|
727
|
+
return x.offsetY - y.offsetY === 0;
|
|
728
|
+
}), // 计算得到当前行索引对应的数据块,blocks改成数组的形式,兼容快速拖动可视区域出现两个数据块的情况
|
|
729
|
+
op.map(function (sizeAndOffset) {
|
|
730
|
+
var _a;
|
|
731
|
+
|
|
732
|
+
var offsetY = sizeAndOffset.offsetY,
|
|
733
|
+
maxRenderHeight = sizeAndOffset.maxRenderHeight;
|
|
734
|
+
var scrollDirection = offsetY - _this2.offsetY >= 0 ? 'down' : 'up';
|
|
735
|
+
_this2.offsetY = offsetY;
|
|
736
|
+
var rowCount = _this2.props.dataSource.length;
|
|
737
|
+
|
|
738
|
+
var vertical = _this2.rowHeightManager.getRenderRange(offsetY, maxRenderHeight, rowCount);
|
|
739
|
+
|
|
740
|
+
var topIndex = vertical.topIndex,
|
|
741
|
+
bottomIndex = vertical.bottomIndex;
|
|
742
|
+
var blockSize = ((_a = _this2.props.scrollLoad) === null || _a === void 0 ? void 0 : _a.blockSize) || 200;
|
|
743
|
+
var topBlockStartIndex = Math.floor(Math.max(topIndex - 1, 0) / blockSize) * blockSize;
|
|
744
|
+
var bottomBlockStartIndex = Math.floor((bottomIndex + 1) / blockSize) * blockSize;
|
|
745
|
+
return scrollDirection === 'down' ? [topBlockStartIndex, bottomBlockStartIndex] : [bottomBlockStartIndex, topBlockStartIndex];
|
|
746
|
+
}), op.distinctUntilChanged(function (x, y) {
|
|
747
|
+
return x[0] === y[0] && x[1] === y[1];
|
|
748
|
+
}), op.switchMap(function (startIndexs) {
|
|
749
|
+
var event$ = (0, _rxjs.from)(startIndexs);
|
|
750
|
+
return event$.pipe(op.map(function (startIndex) {
|
|
751
|
+
return startIndex;
|
|
752
|
+
}));
|
|
753
|
+
}), // 过滤掉重复掉值
|
|
754
|
+
op.distinctUntilChanged()).subscribe(function (startIndex) {
|
|
755
|
+
var _a;
|
|
756
|
+
|
|
757
|
+
(_a = _this2.props.scrollLoad) === null || _a === void 0 ? void 0 : _a.callback(startIndex);
|
|
758
|
+
}));
|
|
712
759
|
}
|
|
713
760
|
}, {
|
|
714
761
|
key: "componentWillUnmount",
|
|
@@ -755,10 +802,12 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
|
|
|
755
802
|
|
|
756
803
|
if (size === 0) {
|
|
757
804
|
zeroHeightRowCount += 1;
|
|
805
|
+
} else {
|
|
806
|
+
// 渲染出来的行高度为0,说明是display=none情况,行高不存在该种异常情况,不保存当前的高度
|
|
807
|
+
this.rowHeightManager.updateRow(rowIndex, offset, size);
|
|
758
808
|
}
|
|
759
809
|
|
|
760
810
|
maxTrBottom = Math.max(maxTrBottom, offset + size);
|
|
761
|
-
this.rowHeightManager.updateRow(rowIndex, offset, size);
|
|
762
811
|
} // 当 estimatedRowHeight 过大时,可能出现「渲染行数过少,无法覆盖可视范围」的情况
|
|
763
812
|
// 出现这种情况时,我们判断「下一次渲染能够渲染更多行」是否满足,满足的话就直接调用 forceUpdate
|
|
764
813
|
// zeroHeightRowCount === 0 用于确保当前没有 display=none 的情况
|