@hi-ui/table 4.2.0 → 4.3.0

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.
@@ -8,7 +8,7 @@
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import { __rest } from 'tslib';
11
- import React__default, { forwardRef } from 'react';
11
+ import React__default, { forwardRef, useMemo } from 'react';
12
12
  import { getPrefixCls, cx } from '@hi-ui/classname';
13
13
  import { __DEV__ } from '@hi-ui/env';
14
14
  import { useLocaleContext } from '@hi-ui/core';
@@ -22,6 +22,9 @@ import { TableProvider } from './context.js';
22
22
  import { uuid, checkNeedTotalOrEvg, getTotalOrEvgRowData } from './utils/index.js';
23
23
  import { useTable } from './use-table.js';
24
24
  import { useEmbedExpand } from './hooks/use-embed-expand.js';
25
+ import { TheadContent } from './TheadContent.js';
26
+ import { ColGroupContent } from './ColGroupContent.js';
27
+ import { TbodyContent } from './TbodyContent.js';
25
28
  var _role = 'table';
26
29
 
27
30
  var _prefix = getPrefixCls('table');
@@ -30,7 +33,6 @@ var EMBED_DATA_KEY = "TABLE_EMBED_DATA_KEY_" + uuid();
30
33
  var DEFAULT_COLUMNS = [];
31
34
  var DEFAULT_DATA = [];
32
35
  var BaseTable = /*#__PURE__*/forwardRef(function (_a, ref) {
33
- // ********************** 内嵌式面板 *********************** //
34
36
  var _a$prefixCls = _a.prefixCls,
35
37
  prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
36
38
  _a$role = _a.role,
@@ -59,7 +61,9 @@ var BaseTable = /*#__PURE__*/forwardRef(function (_a, ref) {
59
61
  fixedColumnTrigger = _a$fixedColumnTrigger === void 0 ? 'auto' : _a$fixedColumnTrigger,
60
62
  emptyContent = _a.emptyContent,
61
63
  virtual = _a.virtual,
62
- rest = __rest(_a, ["prefixCls", "role", "className", "columns", "data", "striped", "bordered", "rowExpandable", "defaultExpandedEmbedRowKeys", "expandedEmbedRowKeys", "onEmbedExpand", "expandedRender", "size", "extra", "onRow", "onHeaderRow", "stickyFooter", "stickyFooterBottom", "fixedColumnTrigger", "emptyContent", "virtual"]);
64
+ needDoubleTable = _a.needDoubleTable,
65
+ rest = __rest(_a, ["prefixCls", "role", "className", "columns", "data", "striped", "bordered", "rowExpandable", "defaultExpandedEmbedRowKeys", "expandedEmbedRowKeys", "onEmbedExpand", "expandedRender", "size", "extra", "onRow", "onHeaderRow", "stickyFooter", "stickyFooterBottom", "fixedColumnTrigger", "emptyContent", "virtual", "needDoubleTable"]); // ********************** 内嵌式面板 *********************** //
66
+
63
67
 
64
68
  var _useEmbedExpand = useEmbedExpand({
65
69
  defaultExpandedEmbedRowKeys: defaultExpandedEmbedRowKeys,
@@ -115,48 +119,70 @@ var BaseTable = /*#__PURE__*/forwardRef(function (_a, ref) {
115
119
 
116
120
  return columns;
117
121
  }, [embedExpandable, getEmbedPanelColumn, columns]);
118
- var i18n = useLocaleContext(); // 确保包含 avg 属性,且值为数字类型的字符串
122
+ var i18n = useLocaleContext();
119
123
 
120
- var avgRow = {
121
- id: 'avg',
122
- raw: {
123
- key: 'avg'
124
- }
125
- };
126
- var hasAvgColumn = false;
127
- columns.forEach(function (column, index) {
128
- if (index === 0) {
129
- // @ts-ignore
130
- avgRow.raw[column.dataKey] = i18n.get('table.average');
131
- }
124
+ var _useMemo = useMemo(function () {
125
+ // 确保包含 avg 属性,且值为数字类型的字符串
126
+ var avgRow = {
127
+ id: 'avg',
128
+ raw: {
129
+ key: 'avg'
130
+ }
131
+ };
132
+ var hasAvgColumn = false;
133
+ columns.forEach(function (column, index) {
134
+ if (index === 0) {
135
+ // @ts-ignore
136
+ avgRow.raw[column.dataKey] = i18n.get('table.average');
137
+ }
132
138
 
133
- if (checkNeedTotalOrEvg(data, column, 'avg')) {
134
- hasAvgColumn = true; // @ts-ignore
139
+ if (checkNeedTotalOrEvg(data, column, 'avg')) {
140
+ hasAvgColumn = true; // @ts-ignore
141
+ // @ts-ignore
135
142
 
136
- avgRow.raw[column.dataKey] = getTotalOrEvgRowData(data, column, true);
137
- }
138
- }); // 确保包含total属性,且值为数字类型的字符串
143
+ avgRow.raw[column.dataKey] = getTotalOrEvgRowData(data, column, true);
144
+ }
145
+ });
146
+ return {
147
+ avgRow: avgRow,
148
+ hasAvgColumn: hasAvgColumn
149
+ };
150
+ }, [columns, data, i18n]),
151
+ avgRow = _useMemo.avgRow,
152
+ hasAvgColumn = _useMemo.hasAvgColumn;
139
153
 
140
- var sumRow = {
141
- id: 'sum',
142
- raw: {
143
- key: 'sum'
144
- }
145
- };
146
- var hasSumColumn = false;
147
- columns.forEach(function (column, index) {
148
- if (index === 0) {
149
- // @ts-ignore
150
- sumRow.raw[column.dataKey] = i18n.get('table.total');
151
- }
154
+ var _useMemo2 = useMemo(function () {
155
+ // 确保包含total属性,且值为数字类型的字符串
156
+ var sumRow = {
157
+ id: 'sum',
158
+ raw: {
159
+ key: 'sum'
160
+ }
161
+ };
162
+ var hasSumColumn = false;
163
+ columns.forEach(function (column, index) {
164
+ if (index === 0) {
165
+ // @ts-ignore
166
+ sumRow.raw[column.dataKey] = i18n.get('table.total');
167
+ }
152
168
 
153
- if (checkNeedTotalOrEvg(data, column, 'total')) {
154
- hasSumColumn = true; // 获取当前数据最大小数点个数,并设置最后总和值小数点
155
- // @ts-ignore
169
+ if (checkNeedTotalOrEvg(data, column, 'total')) {
170
+ hasSumColumn = true; // 获取当前数据最大小数点个数,并设置最后总和值小数点
171
+ // @ts-ignore
172
+ // 获取当前数据最大小数点个数,并设置最后总和值小数点
173
+ // @ts-ignore
174
+
175
+ sumRow.raw[column.dataKey] = getTotalOrEvgRowData(data, column, false);
176
+ }
177
+ });
178
+ return {
179
+ sumRow: sumRow,
180
+ hasSumColumn: hasSumColumn
181
+ };
182
+ }, [columns, data, i18n]),
183
+ sumRow = _useMemo2.sumRow,
184
+ hasSumColumn = _useMemo2.hasSumColumn;
156
185
 
157
- sumRow.raw[column.dataKey] = getTotalOrEvgRowData(data, column, false);
158
- }
159
- });
160
186
  var providedValue = useTable(Object.assign(Object.assign({}, rest), {
161
187
  columns: mergedColumns,
162
188
  data: data,
@@ -169,11 +195,68 @@ var BaseTable = /*#__PURE__*/forwardRef(function (_a, ref) {
169
195
  leftFixedColumnsWidth = providedValue.leftFixedColumnsWidth,
170
196
  rightFixedColumnsWidth = providedValue.rightFixedColumnsWidth,
171
197
  scrollSize = providedValue.scrollSize,
172
- getTableHeaderProps = providedValue.getTableHeaderProps;
198
+ getTableHeaderProps = providedValue.getTableHeaderProps,
199
+ scrollBodyElementRef = providedValue.scrollBodyElementRef,
200
+ onTableBodyScroll = providedValue.onTableBodyScroll,
201
+ canScroll = providedValue.canScroll,
202
+ bodyTableRef = providedValue.bodyTableRef,
203
+ scrollWidth = providedValue.scrollWidth,
204
+ footerRender = providedValue.footerRender;
173
205
  var hasBorder = borderedProp !== null && borderedProp !== void 0 ? borderedProp : bordered;
174
206
  var extraHeader = extra && extra.header;
175
207
  var extraFooter = extra && extra.footer;
176
208
  var alwaysFixedColumn = fixedColumnTrigger === 'always';
209
+
210
+ var renderTable = function renderTable() {
211
+ return needDoubleTable ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", Object.assign({}, getTableHeaderProps()), /*#__PURE__*/React__default.createElement(TableHeader, null), extraHeader ? /*#__PURE__*/React__default.createElement("div", {
212
+ style: {
213
+ position: 'absolute',
214
+ right: 0,
215
+ zIndex: 11,
216
+ bottom: 0,
217
+ top: 0
218
+ }
219
+ }, extraHeader) : null), /*#__PURE__*/React__default.createElement(TableBody, {
220
+ emptyContent: emptyContent
221
+ })) : /*#__PURE__*/React__default.createElement("div", {
222
+ ref: scrollBodyElementRef,
223
+ className: prefixCls + "-content",
224
+ onScroll: onTableBodyScroll,
225
+ style: {
226
+ // 表格宽度大于div宽度才出现横向滚动条
227
+ overflowX: canScroll ? 'scroll' : undefined
228
+ }
229
+ }, /*#__PURE__*/React__default.createElement("table", {
230
+ ref: bodyTableRef,
231
+ style: {
232
+ width: canScroll && scrollWidth !== undefined ? scrollWidth : '100%'
233
+ }
234
+ }, /*#__PURE__*/React__default.createElement(ColGroupContent, null), /*#__PURE__*/React__default.createElement(TheadContent, null), /*#__PURE__*/React__default.createElement(TbodyContent, {
235
+ emptyContent: emptyContent
236
+ })));
237
+ };
238
+
239
+ var renderFreezeShadow = function renderFreezeShadow() {
240
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, (alwaysFixedColumn || scrollSize.scrollLeft > 0) && leftFrozenColKeys.length > 0 ? /*#__PURE__*/React__default.createElement("div", {
241
+ className: prefixCls + "-freeze-shadow " + prefixCls + "-freeze-shadow--left",
242
+ style: {
243
+ width: leftFixedColumnsWidth + 'px'
244
+ }
245
+ }) : null, (alwaysFixedColumn || scrollSize.scrollRight > 0) && rightFrozenColKeys.length > 0 ? /*#__PURE__*/React__default.createElement("div", {
246
+ className: prefixCls + "-freeze-shadow " + prefixCls + "-freeze-shadow--right",
247
+ style: {
248
+ width: rightFixedColumnsWidth + 'px'
249
+ }
250
+ }) : null);
251
+ };
252
+
253
+ var tableFooter = /*#__PURE__*/React__default.createElement("div", {
254
+ className: prefixCls + "-footer",
255
+ style: stickyFooter ? {
256
+ position: 'sticky',
257
+ bottom: stickyFooterBottom
258
+ } : undefined
259
+ }, isFunction(footerRender) ? footerRender( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, extraFooter)) : extraFooter);
177
260
  var cls = cx(prefixCls, className, hasBorder && prefixCls + "--bordered", striped && prefixCls + "--striped", size && prefixCls + "--size-" + size, virtual && prefixCls + "--virtual");
178
261
  return /*#__PURE__*/React__default.createElement("div", Object.assign({
179
262
  ref: ref,
@@ -197,37 +280,7 @@ var BaseTable = /*#__PURE__*/forwardRef(function (_a, ref) {
197
280
  hasSumColumn: hasSumColumn,
198
281
  virtual: virtual
199
282
  })
200
- }, /*#__PURE__*/React__default.createElement("div", Object.assign({}, getTableHeaderProps()), /*#__PURE__*/React__default.createElement(TableHeader, {
201
- prefixCls: prefixCls + "-header"
202
- }), extraHeader ? /*#__PURE__*/React__default.createElement("div", {
203
- style: {
204
- position: 'absolute',
205
- right: 0,
206
- zIndex: 11,
207
- bottom: 0,
208
- top: 0
209
- }
210
- }, extraHeader) : null), /*#__PURE__*/React__default.createElement(TableBody, {
211
- prefixCls: prefixCls,
212
- emptyContent: emptyContent
213
- })), (alwaysFixedColumn || scrollSize.scrollLeft > 0) && leftFrozenColKeys.length > 0 ? /*#__PURE__*/React__default.createElement("div", {
214
- className: prefixCls + "-freeze-shadow " + prefixCls + "-freeze-shadow--left",
215
- style: {
216
- width: leftFixedColumnsWidth + 'px'
217
- }
218
- }) : null, (alwaysFixedColumn || scrollSize.scrollRight > 0) && rightFrozenColKeys.length > 0 ? /*#__PURE__*/React__default.createElement("div", {
219
- className: prefixCls + "-freeze-shadow " + prefixCls + "-freeze-shadow--right",
220
- style: {
221
- width: rightFixedColumnsWidth + 'px'
222
- }
223
- }) : null), /*#__PURE__*/React__default.createElement("div", {
224
- className: prefixCls + "-footer",
225
- style: stickyFooter ? {
226
- position: 'sticky',
227
- bottom: stickyFooterBottom // boxShadow: '0 5px 15px 0 rgba(0, 0, 0, 0.1)'
228
-
229
- } : undefined
230
- }, extraFooter));
283
+ }, renderTable()), renderFreezeShadow()), tableFooter);
231
284
  });
232
285
 
233
286
  if (__DEV__) {
@@ -0,0 +1,37 @@
1
+ /** @LICENSE
2
+ * @hi-ui/table
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/table#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import React__default, { forwardRef } from 'react';
11
+ import { getPrefixCls } from '@hi-ui/classname';
12
+ import { __DEV__ } from '@hi-ui/env';
13
+ import { useTableContext } from './context.js';
14
+
15
+ var _prefix = getPrefixCls('table-colgroup');
16
+
17
+ var ColGroupContent = /*#__PURE__*/forwardRef(function (_ref, ref) {
18
+ var _ref$prefixCls = _ref.prefixCls,
19
+ prefixCls = _ref$prefixCls === void 0 ? _prefix : _ref$prefixCls;
20
+
21
+ var _useTableContext = useTableContext(),
22
+ getColgroupProps = _useTableContext.getColgroupProps,
23
+ leafColumns = _useTableContext.leafColumns;
24
+
25
+ return /*#__PURE__*/React__default.createElement("colgroup", null, leafColumns.map(function (col, idx) {
26
+ return /*#__PURE__*/React__default.createElement("col", Object.assign({
27
+ key: idx,
28
+ className: prefixCls + "-col"
29
+ }, getColgroupProps(col, idx)));
30
+ }));
31
+ });
32
+
33
+ if (__DEV__) {
34
+ ColGroupContent.displayName = 'ColGroupContent';
35
+ }
36
+
37
+ export { ColGroupContent };
package/lib/esm/Table.js CHANGED
@@ -27,7 +27,13 @@ import { uuid } from './utils/index.js';
27
27
  import { useColSet } from './hooks/use-col-set.js';
28
28
 
29
29
  var _prefix = getPrefixCls('table');
30
+ /**
31
+ * 需要使用双表格的场景对应的 API
32
+ * 这些场景下的功能无法通过单表格实现,故而设计成双表格,即表头和表体分别用一个 table 实现
33
+ */
34
+
30
35
 
36
+ var DOUBLE_TABLE_SCENE = ['maxHeight', 'sticky', 'stickyTop', 'setting', 'virtual'];
31
37
  var STANDARD_PRESET = {
32
38
  striped: true,
33
39
  bordered: true,
@@ -46,7 +52,6 @@ var DEFAULT_PAGINATION = {
46
52
  */
47
53
 
48
54
  var Table = /*#__PURE__*/forwardRef(function (_a, ref) {
49
- // ************************ 预置标准模式 ************************ //
50
55
  var _a$prefixCls = _a.prefixCls,
51
56
  prefixCls = _a$prefixCls === void 0 ? _prefix : _a$prefixCls,
52
57
  _a$standard = _a.standard,
@@ -69,8 +74,13 @@ var Table = /*#__PURE__*/forwardRef(function (_a, ref) {
69
74
  extra = _a.extra,
70
75
  _a$data = _a.data,
71
76
  data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
72
- virtual = _a.virtual,
73
- rest = __rest(_a, ["prefixCls", "standard", "loading", "dataSource", "pagination", "uniqueId", "columns", "hiddenColKeys", "onHiddenColKeysChange", "sortedColKeys", "onSortedColKeysChange", "checkDisabledColKeys", "onSetColKeysChange", "rowSelection", "fieldKey", "extra", "data", "virtual"]);
77
+ rest = __rest(_a, ["prefixCls", "standard", "loading", "dataSource", "pagination", "uniqueId", "columns", "hiddenColKeys", "onHiddenColKeysChange", "sortedColKeys", "onSortedColKeysChange", "checkDisabledColKeys", "onSetColKeysChange", "rowSelection", "fieldKey", "extra", "data"]); // 是否需要双表格
78
+
79
+
80
+ var needDoubleTable = DOUBLE_TABLE_SCENE.some(function (prop) {
81
+ return !!rest[prop];
82
+ });
83
+ var virtual = rest.virtual; // ************************ 预置标准模式 ************************ //
74
84
 
75
85
  var tableProps = withDefaultProps(rest, standard ? STANDARD_PRESET : undefined);
76
86
 
@@ -282,6 +292,7 @@ var Table = /*#__PURE__*/forwardRef(function (_a, ref) {
282
292
  data: mergedData,
283
293
  fieldKey: fieldKey,
284
294
  virtual: virtual,
295
+ needDoubleTable: needDoubleTable,
285
296
  extra: Object.assign({
286
297
  header: setting ? /*#__PURE__*/React__default.createElement(TableSettingMenu, {
287
298
  prefixCls: prefixCls + "-setting",
@@ -13,9 +13,10 @@ import { getPrefixCls, cx } from '@hi-ui/classname';
13
13
  import { __DEV__ } from '@hi-ui/env';
14
14
  import { useLatestCallback } from '@hi-ui/use-latest';
15
15
  import { isArrayNonEmpty } from '@hi-ui/type-assertion';
16
- import { EmptyState } from '@hi-ui/empty-state';
17
16
  import { TableRow } from './TableRow.js';
18
17
  import { useTableContext } from './context.js';
18
+ import { ColGroupContent } from './ColGroupContent.js';
19
+ import { renderEmptyContent, TbodyContent } from './TbodyContent.js';
19
20
  var _role = 'table';
20
21
 
21
22
  var _prefix = getPrefixCls(_role);
@@ -29,10 +30,8 @@ var TableBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
29
30
 
30
31
  var _useTableContext = useTableContext(),
31
32
  columns = _useTableContext.columns,
32
- leafColumns = _useTableContext.leafColumns,
33
33
  isExpandTreeRows = _useTableContext.isExpandTreeRows,
34
34
  transitionData = _useTableContext.transitionData,
35
- getColgroupProps = _useTableContext.getColgroupProps,
36
35
  bodyTableRef = _useTableContext.bodyTableRef,
37
36
  scrollBodyElementRef = _useTableContext.scrollBodyElementRef,
38
37
  onTableBodyScroll = _useTableContext.onTableBodyScroll,
@@ -40,10 +39,6 @@ var TableBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
40
39
  maxHeight = _useTableContext.maxHeight,
41
40
  canScroll = _useTableContext.canScroll,
42
41
  scrollWidth = _useTableContext.scrollWidth,
43
- hasAvgColumn = _useTableContext.hasAvgColumn,
44
- avgRow = _useTableContext.avgRow,
45
- hasSumColumn = _useTableContext.hasSumColumn,
46
- sumRow = _useTableContext.sumRow,
47
42
  colWidths = _useTableContext.colWidths,
48
43
  virtual = _useTableContext.virtual,
49
44
  measureRowElementRef = _useTableContext.measureRowElementRef;
@@ -156,65 +151,11 @@ var TableBody = /*#__PURE__*/forwardRef(function (_ref, ref) {
156
151
  style: {
157
152
  width: canScroll && scrollWidth !== undefined ? scrollWidth : '100%'
158
153
  }
159
- }, /*#__PURE__*/React__default.createElement("colgroup", null, leafColumns.map(function (col, idx) {
160
- return /*#__PURE__*/React__default.createElement("col", Object.assign({
161
- key: idx,
162
- className: prefixCls + "-col"
163
- }, getColgroupProps(col, idx)));
164
- })), /*#__PURE__*/React__default.createElement("tbody", null, isArrayNonEmpty(transitionData) ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, transitionData.map(function (row, index) {
165
- return /*#__PURE__*/React__default.createElement(TableRow, Object.assign({
166
- ref: index === 0 ? measureRowElementRef : null,
167
- // key={depth + index}
168
- key: row.id,
169
- // @ts-ignore
170
- rowIndex: index,
171
- rowData: row
172
- }, getRequiredProps(row.id)));
173
- }), hasSumColumn ? /*#__PURE__*/React__default.createElement(TableRow, {
174
- key: sumRow.id,
175
- rowIndex: transitionData.length,
176
- rowData: sumRow,
177
- isSumRow: true
178
- }) : null, hasAvgColumn ? /*#__PURE__*/React__default.createElement(TableRow, {
179
- key: avgRow.id,
180
- rowIndex: transitionData.length + 1,
181
- rowData: avgRow,
182
- isAvgRow: true
183
- }) : null) : // 空状态,colSpan 占满表格整行
184
- renderEmptyContent(Object.assign({
185
- className: prefixCls + "-empty-content",
186
- colSpan: columns.length,
187
- emptyContent: emptyContent
188
- }, scrollBodyElementRef.current ? {
189
- scrollBodyWidth: window.getComputedStyle(scrollBodyElementRef.current).getPropertyValue('width')
190
- } : {})))));
154
+ }, /*#__PURE__*/React__default.createElement(ColGroupContent, null), /*#__PURE__*/React__default.createElement(TbodyContent, null)));
191
155
  });
192
156
 
193
157
  if (__DEV__) {
194
158
  TableBody.displayName = 'TableBody';
195
159
  }
196
- /**
197
- * 负责空状态渲染
198
- */
199
-
200
-
201
- var renderEmptyContent = function renderEmptyContent(_ref2) {
202
- var className = _ref2.className,
203
- colSpan = _ref2.colSpan,
204
- emptyContent = _ref2.emptyContent,
205
- scrollBodyWidth = _ref2.scrollBodyWidth;
206
- return /*#__PURE__*/React__default.createElement("tr", {
207
- className: className
208
- }, /*#__PURE__*/React__default.createElement("td", {
209
- colSpan: colSpan
210
- }, /*#__PURE__*/React__default.createElement("div", {
211
- style: {
212
- position: 'sticky',
213
- left: 0,
214
- width: scrollBodyWidth !== null && scrollBodyWidth !== void 0 ? scrollBodyWidth : '100%',
215
- overflow: 'hidden'
216
- }
217
- }, emptyContent || /*#__PURE__*/React__default.createElement(EmptyState, null))));
218
- };
219
160
 
220
161
  export { TableBody };
@@ -8,13 +8,11 @@
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import React__default, { forwardRef } from 'react';
11
- import { Resizable } from 'react-resizable';
12
11
  import { getPrefixCls, cx } from '@hi-ui/classname';
13
12
  import { __DEV__ } from '@hi-ui/env';
14
- import { isFunction } from '@hi-ui/type-assertion';
15
13
  import { useTableContext } from './context.js';
16
- import { renderFilter } from './TableAdvancedFilter.js';
17
- import { useCheckState } from '@hi-ui/use-check-state';
14
+ import { ColGroupContent } from './ColGroupContent.js';
15
+ import { TheadContent } from './TheadContent.js';
18
16
 
19
17
  var _prefix = getPrefixCls('table-header');
20
18
 
@@ -24,21 +22,10 @@ var TableHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
24
22
  className = _ref.className;
25
23
 
26
24
  var _useTableContext = useTableContext(),
27
- groupedColumns = _useTableContext.groupedColumns,
28
- resizable = _useTableContext.resizable,
29
- colWidths = _useTableContext.colWidths,
30
- isHoveredHighlightCol = _useTableContext.isHoveredHighlightCol,
31
- isHighlightedCol = _useTableContext.isHighlightedCol,
32
- getColgroupProps = _useTableContext.getColgroupProps,
33
- onColumnResizable = _useTableContext.onColumnResizable,
34
- getStickyColProps = _useTableContext.getStickyColProps,
35
25
  onTableBodyScrollMock = _useTableContext.onTableBodyScrollMock,
36
26
  scrollHeaderElementRef = _useTableContext.scrollHeaderElementRef,
37
- leafColumns = _useTableContext.leafColumns,
38
- getTableHeaderProps = _useTableContext.getTableHeaderProps,
39
- showColMenu = _useTableContext.showColMenu;
27
+ getTableHeaderProps = _useTableContext.getTableHeaderProps;
40
28
 
41
- var activeColumnKeysAction = useCheckState();
42
29
  var cls = cx(prefixCls, className);
43
30
  return /*#__PURE__*/React__default.createElement("div", Object.assign({
44
31
  className: cls,
@@ -48,60 +35,9 @@ var TableHeader = /*#__PURE__*/forwardRef(function (_ref, ref) {
48
35
  width: '100%',
49
36
  position: 'relative'
50
37
  }
51
- }, /*#__PURE__*/React__default.createElement("colgroup", null, leafColumns.map(function (col, idx) {
52
- return /*#__PURE__*/React__default.createElement("col", Object.assign({
53
- key: idx,
54
- className: prefixCls + "-col"
55
- }, getColgroupProps(col, idx)));
56
- })), /*#__PURE__*/React__default.createElement("thead", {
38
+ }, /*#__PURE__*/React__default.createElement(ColGroupContent, null), /*#__PURE__*/React__default.createElement(TheadContent, {
57
39
  onWheel: onTableBodyScrollMock
58
- }, groupedColumns.map(function (cols, colsIndex) {
59
- return /*#__PURE__*/React__default.createElement("tr", {
60
- key: colsIndex
61
- }, cols.map(function (col, colIndex) {
62
- var _ref2 = col || {},
63
- dataKey = _ref2.dataKey,
64
- title = _ref2.title,
65
- raw = _ref2.raw;
66
-
67
- var titleContent = isFunction(title) ? title(col) : title;
68
- var cell = /*#__PURE__*/React__default.createElement("th", Object.assign({
69
- key: dataKey
70
- }, getStickyColProps(col), {
71
- className: cx(prefixCls + "-cell", raw.className, isHighlightedCol(dataKey) && prefixCls + "-cell__col--highlight", isHoveredHighlightCol(dataKey) && prefixCls + "-cell__col--hovered-highlight", activeColumnKeysAction.has(dataKey) && prefixCls + "-cell__col--active"),
72
- // @ts-ignore
73
- colSpan: col.colSpan,
74
- // @ts-ignore
75
- rowSpan: col.rowSpan
76
- }), titleContent, renderFilter({
77
- prefixCls: prefixCls + "-filter",
78
- columnKey: dataKey,
79
- showColMenu: showColMenu,
80
- column: col,
81
- onOpen: function onOpen() {
82
- return activeColumnKeysAction.add(dataKey);
83
- },
84
- onClose: function onClose() {
85
- return activeColumnKeysAction.remove(dataKey);
86
- }
87
- }));
88
- return resizable && colIndex !== colWidths.length - 1 ? /*#__PURE__*/React__default.createElement(Resizable, {
89
- key: colIndex,
90
- className: prefixCls + "__resizable",
91
- draggableOpts: {
92
- enableUserSelectHack: false
93
- },
94
- handle: /*#__PURE__*/React__default.createElement("span", {
95
- className: prefixCls + "__resizable-handle"
96
- }),
97
- height: 0,
98
- width: colWidths[colIndex],
99
- onResize: function onResize(evt, options) {
100
- onColumnResizable(evt, options, colIndex);
101
- }
102
- }, cell) : cell;
103
- }));
104
- }))));
40
+ })));
105
41
  });
106
42
 
107
43
  if (__DEV__) {
@@ -0,0 +1,105 @@
1
+ /** @LICENSE
2
+ * @hi-ui/table
3
+ * https://github.com/XiaoMi/hiui/tree/master/packages/ui/table#readme
4
+ *
5
+ * Copyright (c) HiUI <mi-hiui@xiaomi.com>.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */
10
+ import React__default, { forwardRef } from 'react';
11
+ import { getPrefixCls } from '@hi-ui/classname';
12
+ import { __DEV__ } from '@hi-ui/env';
13
+ import { useLatestCallback } from '@hi-ui/use-latest';
14
+ import { isArrayNonEmpty } from '@hi-ui/type-assertion';
15
+ import { EmptyState } from '@hi-ui/empty-state';
16
+ import { TableRow } from './TableRow.js';
17
+ import { useTableContext } from './context.js';
18
+
19
+ var _prefix = getPrefixCls('table-body');
20
+
21
+ var TbodyContent = /*#__PURE__*/forwardRef(function (_ref, ref) {
22
+ var _ref$prefixCls = _ref.prefixCls,
23
+ prefixCls = _ref$prefixCls === void 0 ? _prefix : _ref$prefixCls,
24
+ emptyContent = _ref.emptyContent;
25
+
26
+ var _useTableContext = useTableContext(),
27
+ columns = _useTableContext.columns,
28
+ isExpandTreeRows = _useTableContext.isExpandTreeRows,
29
+ transitionData = _useTableContext.transitionData,
30
+ scrollBodyElementRef = _useTableContext.scrollBodyElementRef,
31
+ hasAvgColumn = _useTableContext.hasAvgColumn,
32
+ avgRow = _useTableContext.avgRow,
33
+ hasSumColumn = _useTableContext.hasSumColumn,
34
+ sumRow = _useTableContext.sumRow,
35
+ measureRowElementRef = _useTableContext.measureRowElementRef;
36
+
37
+ var getRequiredProps = useLatestCallback(function (id) {
38
+ return {
39
+ // @ts-ignore
40
+ expandedTree: isExpandTreeRows(id) // checked: isCheckedId(id),
41
+ // semiChecked: isSemiCheckedId(id),
42
+ // selected: selectedId === id,
43
+ // loading: isLoadingId(id),
44
+ // focused: focusedId === id,
45
+
46
+ };
47
+ }); // 外层增加 div 作为滚动容器
48
+
49
+ return /*#__PURE__*/React__default.createElement("tbody", null, isArrayNonEmpty(transitionData) ? /*#__PURE__*/React__default.createElement(React__default.Fragment, null, transitionData.map(function (row, index) {
50
+ return /*#__PURE__*/React__default.createElement(TableRow, Object.assign({
51
+ ref: index === 0 ? measureRowElementRef : null,
52
+ // key={depth + index}
53
+ key: row.id,
54
+ // @ts-ignore
55
+ rowIndex: index,
56
+ rowData: row
57
+ }, getRequiredProps(row.id)));
58
+ }), hasSumColumn ? /*#__PURE__*/React__default.createElement(TableRow, {
59
+ key: sumRow.id,
60
+ rowIndex: transitionData.length,
61
+ rowData: sumRow,
62
+ isSumRow: true
63
+ }) : null, hasAvgColumn ? /*#__PURE__*/React__default.createElement(TableRow, {
64
+ key: avgRow.id,
65
+ rowIndex: transitionData.length + 1,
66
+ rowData: avgRow,
67
+ isAvgRow: true
68
+ }) : null) : // 空状态,colSpan 占满表格整行
69
+ renderEmptyContent(Object.assign({
70
+ className: prefixCls + "-empty-content",
71
+ colSpan: columns.length,
72
+ emptyContent: emptyContent
73
+ }, scrollBodyElementRef.current ? {
74
+ scrollBodyWidth: window.getComputedStyle(scrollBodyElementRef.current).getPropertyValue('width')
75
+ } : {})));
76
+ });
77
+
78
+ if (__DEV__) {
79
+ TbodyContent.displayName = 'TbodyContent';
80
+ }
81
+ /**
82
+ * 负责空状态渲染
83
+ */
84
+
85
+
86
+ var renderEmptyContent = function renderEmptyContent(_ref2) {
87
+ var className = _ref2.className,
88
+ colSpan = _ref2.colSpan,
89
+ emptyContent = _ref2.emptyContent,
90
+ scrollBodyWidth = _ref2.scrollBodyWidth;
91
+ return /*#__PURE__*/React__default.createElement("tr", {
92
+ className: className
93
+ }, /*#__PURE__*/React__default.createElement("td", {
94
+ colSpan: colSpan
95
+ }, /*#__PURE__*/React__default.createElement("div", {
96
+ style: {
97
+ position: 'sticky',
98
+ left: 0,
99
+ width: scrollBodyWidth !== null && scrollBodyWidth !== void 0 ? scrollBodyWidth : '100%',
100
+ overflow: 'hidden'
101
+ }
102
+ }, emptyContent || /*#__PURE__*/React__default.createElement(EmptyState, null))));
103
+ };
104
+
105
+ export { TbodyContent, renderEmptyContent };