@aloudata/aloudata-design 2.15.9 → 2.15.11

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.
@@ -27,7 +27,7 @@ import useScroll from "./hooks/useScroll";
27
27
  var HEADER_HEIGHT = 41;
28
28
  var FOOTER_HEIGHT = 52;
29
29
  function Table(props, ref) {
30
- var _classnames, _classnames5, _classnames7;
30
+ var _classnames2, _classnames5, _classnames7;
31
31
  var data = props.data,
32
32
  bordered = props.bordered,
33
33
  rowKey = props.rowKey,
@@ -129,35 +129,121 @@ function Table(props, ref) {
129
129
  // 总列宽改变时,重新计算是否需要显示固定列的阴影
130
130
  changeIsPing();
131
131
  }, [changeIsPing, totalColumnsWidth]);
132
+ var renderHeaderCell = useCallback(function (header, index) {
133
+ // 选择行的列不能拖动宽度
134
+ var showResizer = columnSizing && !(!!rowSelectionInfo.isRowSelectionEnabled && index === 0);
135
+ var _getColumnFixedInfo = getColumnFixedInfo(index, true),
136
+ fixedClassName = _getColumnFixedInfo.className,
137
+ fixedStyle = _getColumnFixedInfo.style;
138
+ return /*#__PURE__*/React.createElement("div", {
139
+ className: classnames(prefixCls('th'), fixedClassName),
140
+ style: _objectSpread({
141
+ width: header.getSize()
142
+ }, fixedStyle),
143
+ key: header.id
144
+ }, flexRender(header.column.columnDef.header, header.getContext()), showResizer && /*#__PURE__*/React.createElement("div", {
145
+ onMouseDown: header.getResizeHandler(),
146
+ onTouchStart: header.getResizeHandler(),
147
+ className: classnames(prefixCls('resizer'), _defineProperty({}, prefixCls('self-resizing'), header.column.getIsResizing()))
148
+ }));
149
+ }, [columnSizing, rowSelectionInfo, getColumnFixedInfo]);
150
+ var visibleColumns = tableInstance.getVisibleLeafColumns();
151
+ var columnVirtualizer = useVirtualizer({
152
+ count: tableColumns.length,
153
+ estimateSize: function estimateSize(index) {
154
+ return visibleColumns[index].getSize();
155
+ },
156
+ getScrollElement: function getScrollElement() {
157
+ return bodyRef.current;
158
+ },
159
+ horizontal: true,
160
+ overscan: 5
161
+ });
162
+ var virtualColumns = columnVirtualizer.getVirtualItems();
163
+
164
+ //different virtualization strategy for columns - instead of absolute and translateY, we add empty columns to the left and right
165
+ var virtualPaddingLeft;
166
+ var virtualPaddingRight;
167
+ if (columnVirtualizer && virtualColumns !== null && virtualColumns !== void 0 && virtualColumns.length) {
168
+ var _virtualColumns$0$sta, _virtualColumns$, _virtualColumns$end, _virtualColumns;
169
+ virtualPaddingLeft = (_virtualColumns$0$sta = (_virtualColumns$ = virtualColumns[0]) === null || _virtualColumns$ === void 0 ? void 0 : _virtualColumns$.start) !== null && _virtualColumns$0$sta !== void 0 ? _virtualColumns$0$sta : 0;
170
+ virtualPaddingRight = columnVirtualizer.getTotalSize() - ((_virtualColumns$end = (_virtualColumns = virtualColumns[virtualColumns.length - 1]) === null || _virtualColumns === void 0 ? void 0 : _virtualColumns.end) !== null && _virtualColumns$end !== void 0 ? _virtualColumns$end : 0);
171
+ }
132
172
  var headerContent = /*#__PURE__*/React.createElement("div", {
133
- className: classnames(prefixCls('header'), (_classnames = {}, _defineProperty(_classnames, prefixCls('overflow-x'), true), _defineProperty(_classnames, prefixCls('sticky'), isStickyWork), _defineProperty(_classnames, prefixCls('resizing'), tableInstance.getState().columnSizingInfo.isResizingColumn), _classnames)),
173
+ className: classnames(prefixCls('header'), (_classnames2 = {}, _defineProperty(_classnames2, prefixCls('overflow-x'), true), _defineProperty(_classnames2, prefixCls('sticky'), isStickyWork), _defineProperty(_classnames2, prefixCls('resizing'), tableInstance.getState().columnSizingInfo.isResizingColumn), _classnames2)),
134
174
  ref: headerRef,
135
175
  style: headerStyle
136
176
  }, _.map(headerGroups, function (headerGroup) {
177
+ var allHeaderCells = headerGroup.headers;
178
+ var virtualColumns = columnVirtualizer.getVirtualItems();
179
+ var middleVirtualColumns = [];
180
+ // 将固定列单独拎出来,固定列不受列虚拟化影响,必须要渲染
181
+ var leftFixedColumns = [];
182
+ var rightFixedColumns = [];
183
+ var content = null;
184
+ if (virtual) {
185
+ _.forEach(allHeaderCells, function (header, index) {
186
+ var fixedInfo = getColumnFixedInfo(index);
187
+ if (fixedInfo.fixed === 'left') {
188
+ leftFixedColumns.push({
189
+ header: header,
190
+ index: index
191
+ });
192
+ }
193
+ if (fixedInfo.fixed === 'right') {
194
+ rightFixedColumns.push({
195
+ header: header,
196
+ index: index
197
+ });
198
+ }
199
+ });
200
+ _.forEach(virtualColumns, function (virtualColumn) {
201
+ var colIndex = virtualColumn.index;
202
+ var fixedInfo = getColumnFixedInfo(colIndex);
203
+ if (fixedInfo.fixed !== 'left' && fixedInfo.fixed !== 'right') {
204
+ middleVirtualColumns.push(virtualColumn);
205
+ }
206
+ });
207
+ content = /*#__PURE__*/React.createElement(React.Fragment, null, virtualPaddingLeft ?
208
+ /*#__PURE__*/
209
+ //fake empty column to the left for virtualization scroll padding
210
+ React.createElement("div", {
211
+ className: prefixCls('virtual-padding-left'),
212
+ style: {
213
+ width: virtualPaddingLeft
214
+ }
215
+ }) : null, leftFixedColumns.map(function (_ref) {
216
+ var header = _ref.header,
217
+ index = _ref.index;
218
+ return renderHeaderCell(header, index);
219
+ }), _.map(middleVirtualColumns, function (virtualColumn) {
220
+ var header = allHeaderCells[virtualColumn.index];
221
+ return renderHeaderCell(header, virtualColumn.index);
222
+ }), rightFixedColumns.map(function (_ref2) {
223
+ var header = _ref2.header,
224
+ index = _ref2.index;
225
+ return renderHeaderCell(header, index);
226
+ }), virtualPaddingRight ?
227
+ /*#__PURE__*/
228
+ //fake empty column to the right for virtualization scroll padding
229
+ React.createElement("div", {
230
+ className: prefixCls('virtual-padding-right'),
231
+ style: {
232
+ width: virtualPaddingRight
233
+ }
234
+ }) : null);
235
+ } else {
236
+ content = _.map(allHeaderCells, function (header, index) {
237
+ return renderHeaderCell(header, index);
238
+ });
239
+ }
137
240
  return /*#__PURE__*/React.createElement("div", {
138
241
  className: prefixCls('tr'),
139
242
  key: headerGroup.id,
140
243
  style: {
141
244
  width: totalColumnsWidth
142
245
  }
143
- }, _.map(headerGroup.headers, function (header, index) {
144
- // 选择行的列不能拖动宽度
145
- var showResizer = columnSizing && !(!!rowSelectionInfo.isRowSelectionEnabled && index === 0);
146
- var _getColumnFixedInfo = getColumnFixedInfo(index, true),
147
- fixedClassName = _getColumnFixedInfo.className,
148
- fixedStyle = _getColumnFixedInfo.style;
149
- return /*#__PURE__*/React.createElement("div", {
150
- className: classnames(prefixCls('th'), fixedClassName),
151
- style: _objectSpread({
152
- width: header.getSize()
153
- }, fixedStyle),
154
- key: header.id
155
- }, flexRender(header.column.columnDef.header, header.getContext()), showResizer && /*#__PURE__*/React.createElement("div", {
156
- onMouseDown: header.getResizeHandler(),
157
- onTouchStart: header.getResizeHandler(),
158
- className: classnames(prefixCls('resizer'), _defineProperty({}, prefixCls('self-resizing'), header.column.getIsResizing()))
159
- }));
160
- }), y !== undefined && /*#__PURE__*/React.createElement("div", {
246
+ }, content, y !== undefined && /*#__PURE__*/React.createElement("div", {
161
247
  className: prefixCls('header-scroll-placeholder'),
162
248
  style: {
163
249
  flexBasis: scrollbarWidth
@@ -201,6 +287,24 @@ function Table(props, ref) {
201
287
  overscan: 5
202
288
  });
203
289
  var tableRows = virtual ? rowVirtualizer.getVirtualItems() : rows;
290
+ var renderBodyCell = useCallback(function (row, cell, colIndex) {
291
+ var _getColumnFixedInfo2 = getColumnFixedInfo(colIndex),
292
+ fixedClassName = _getColumnFixedInfo2.className,
293
+ fixedStyle = _getColumnFixedInfo2.style;
294
+ var tdContent = flexRender(cell.column.columnDef.cell, cell.getContext());
295
+ return /*#__PURE__*/React.createElement("div", {
296
+ className: classnames(prefixCls('td'), fixedClassName),
297
+ key: cell.id,
298
+ style: _objectSpread({
299
+ width: cell.column.getSize()
300
+ }, fixedStyle)
301
+ }, expandableInfo.isExpandable && colIndex === 0 ? /*#__PURE__*/React.createElement(ExpandCell, {
302
+ expandableInfo: expandableInfo,
303
+ expandable: expandable,
304
+ data: row.original,
305
+ rowKey: rowKey
306
+ }, tdContent) : tdContent);
307
+ }, [expandableInfo, expandable, rowKey, getColumnFixedInfo]);
204
308
 
205
309
  // 渲染 body
206
310
  var bodyContent = /*#__PURE__*/React.createElement("div", {
@@ -221,6 +325,70 @@ function Table(props, ref) {
221
325
  }))) : _.reduce(tableRows, function (rowList, rowData, rowIndex) {
222
326
  var _classnames4;
223
327
  var row = virtual ? rows[rowData.index] : rowData;
328
+ var allRowCells = row.getVisibleCells();
329
+ var content = null;
330
+ // 将固定列单独拎出来,固定列不受列虚拟化影响,必须要渲染
331
+ var leftFixedColumns = [];
332
+ var rightFixedColumns = [];
333
+ if (virtual) {
334
+ var _virtualColumns2 = columnVirtualizer.getVirtualItems();
335
+ var middleVirtualColumns = [];
336
+ _.forEach(allRowCells, function (cell, index) {
337
+ var fixedInfo = getColumnFixedInfo(index);
338
+ if (fixedInfo.fixed === 'left') {
339
+ leftFixedColumns.push({
340
+ cell: cell,
341
+ index: index
342
+ });
343
+ }
344
+ if (fixedInfo.fixed === 'right') {
345
+ rightFixedColumns.push({
346
+ cell: cell,
347
+ index: index
348
+ });
349
+ }
350
+ });
351
+ _.forEach(_virtualColumns2, function (virtualColumn) {
352
+ var colIndex = virtualColumn.index;
353
+ var fixedInfo = getColumnFixedInfo(colIndex);
354
+ if (fixedInfo.fixed !== 'left' && fixedInfo.fixed !== 'right') {
355
+ middleVirtualColumns.push(virtualColumn);
356
+ }
357
+ });
358
+ content = /*#__PURE__*/React.createElement(React.Fragment, null, virtualPaddingLeft ?
359
+ /*#__PURE__*/
360
+ //fake empty column to the left for virtualization scroll padding
361
+ React.createElement("div", {
362
+ className: prefixCls('virtual-padding-left'),
363
+ style: {
364
+ width: virtualPaddingLeft
365
+ }
366
+ }) : null, leftFixedColumns.map(function (_ref3) {
367
+ var cell = _ref3.cell,
368
+ index = _ref3.index;
369
+ return renderBodyCell(row, cell, index);
370
+ }), middleVirtualColumns.map(function (virtualColumn) {
371
+ var colIndex = virtualColumn.index;
372
+ var cell = allRowCells[colIndex];
373
+ return renderBodyCell(row, cell, colIndex);
374
+ }), rightFixedColumns.map(function (_ref4) {
375
+ var cell = _ref4.cell,
376
+ index = _ref4.index;
377
+ return renderBodyCell(row, cell, index);
378
+ }), virtualPaddingRight ?
379
+ /*#__PURE__*/
380
+ //fake empty column to the right for virtualization scroll padding
381
+ React.createElement("div", {
382
+ className: prefixCls('virtual-padding-right'),
383
+ style: {
384
+ width: virtualPaddingRight
385
+ }
386
+ }) : null);
387
+ } else {
388
+ content = allRowCells.map(function (cell, index) {
389
+ return renderBodyCell(row, cell, index);
390
+ });
391
+ }
224
392
  var rowId = row.id;
225
393
  var rowNode = /*#__PURE__*/React.createElement("div", {
226
394
  key: rowId,
@@ -240,24 +408,7 @@ function Table(props, ref) {
240
408
  position: 'absolute',
241
409
  transform: "translateY(".concat(rowData.start, "px)")
242
410
  } : {}
243
- }, _.map(row.getVisibleCells(), function (cell, colIndex) {
244
- var _getColumnFixedInfo2 = getColumnFixedInfo(colIndex),
245
- fixedClassName = _getColumnFixedInfo2.className,
246
- fixedStyle = _getColumnFixedInfo2.style;
247
- var tdContent = flexRender(cell.column.columnDef.cell, cell.getContext());
248
- return /*#__PURE__*/React.createElement("div", {
249
- className: classnames(prefixCls('td'), fixedClassName),
250
- key: cell.id,
251
- style: _objectSpread({
252
- width: cell.column.getSize()
253
- }, fixedStyle)
254
- }, expandableInfo.isExpandable && colIndex === 0 ? /*#__PURE__*/React.createElement(ExpandCell, {
255
- expandableInfo: expandableInfo,
256
- expandable: expandable,
257
- data: row.original,
258
- rowKey: rowKey
259
- }, tdContent) : tdContent);
260
- }));
411
+ }, content);
261
412
  rowList.push(rowNode);
262
413
 
263
414
  // 渲染额外展开的行
@@ -392,3 +392,10 @@
392
392
  align-items: center;
393
393
  flex: 1 1 auto;
394
394
  }
395
+
396
+ .ald-table-virtual-padding-left,
397
+ .ald-table-virtual-padding-right {
398
+ display: flex;
399
+ flex-shrink: 0;
400
+ flex-grow: 0;
401
+ }