@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.
@@ -69,31 +69,33 @@ export var TableDOMHelper = /*#__PURE__*/function () {
69
69
  }, {
70
70
  key: "getTableRows",
71
71
  value: function getTableRows() {
72
- var htmlTable = this.getTableBodyHtmlTable();
73
- return htmlTable.querySelectorAll("tbody > .".concat(Classes.tableRow));
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 _context2;
80
+ var _context3;
79
81
 
80
- return this.artTable.querySelector(_concatInstanceProperty(_context2 = ".".concat(Classes.tableBody, " .")).call(_context2, Classes.virtual, " table"));
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 _context3;
87
+ var _context4;
86
88
 
87
- var selector = _concatInstanceProperty(_context3 = ".".concat(Classes.lockShadowMask, " .")).call(_context3, Classes.leftLockShadow);
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 _context4;
96
+ var _context5;
95
97
 
96
- var selector = _concatInstanceProperty(_context4 = ".".concat(Classes.lockShadowMask, " .")).call(_context4, Classes.rightLockShadow);
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 _context5, _context6;
110
+ var _context6, _context7;
109
111
 
110
112
  if (rowIndex === 0) return 0;
111
113
 
112
- var selector = _concatInstanceProperty(_context5 = _concatInstanceProperty(_context6 = ".".concat(Classes.tableBody, " .")).call(_context6, Classes.tableRow, "[data-rowindex=\"")).call(_context5, rowIndex, "\"]");
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;
@@ -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);
@@ -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>);
@@ -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
- // 因为 overscan 的存在,滚动较小的距离时不需要触发组件重渲染
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 htmlTable = this.getTableBodyHtmlTable();
83
- return htmlTable.querySelectorAll("tbody > .".concat(_styles.Classes.tableRow));
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 _context2;
90
+ var _context3;
89
91
 
90
- return this.artTable.querySelector((0, _concat.default)(_context2 = ".".concat(_styles.Classes.tableBody, " .")).call(_context2, _styles.Classes.virtual, " table"));
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 _context3;
97
+ var _context4;
96
98
 
97
- var selector = (0, _concat.default)(_context3 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context3, _styles.Classes.leftLockShadow);
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 _context4;
105
+ var _context5;
104
106
 
105
- var selector = (0, _concat.default)(_context4 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context4, _styles.Classes.rightLockShadow);
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 _context5, _context6;
118
+ var _context6, _context7;
117
119
 
118
120
  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, "\"]");
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;
@@ -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>);
@@ -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
- // 因为 overscan 的存在,滚动较小的距离时不需要触发组件重渲染
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 的情况
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kdcloudjs/table",
3
- "version": "1.1.2-canary.1",
3
+ "version": "1.1.3-canary.1",
4
4
  "description": "金蝶 react table 组件",
5
5
  "title": "table",
6
6
  "keywords": [