@hi-ui/table 4.9.2 → 4.10.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @hi-ui/table
2
2
 
3
+ ## 4.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#3093](https://github.com/XiaoMi/hiui/pull/3093) [`8192dc3c0`](https://github.com/XiaoMi/hiui/commit/8192dc3c06a5299165fcad1a05f291b994384e3f) Thanks [@zyprepare](https://github.com/zyprepare)! - feat(table): 列排序支持设置默认排序顺序和受控模式 (#3091)
8
+
9
+ ### Patch Changes
10
+
11
+ - [#3105](https://github.com/XiaoMi/hiui/pull/3105) [`af5207873`](https://github.com/XiaoMi/hiui/commit/af5207873a2e1187a95b00d2c5f64658eb210086) Thanks [@zyprepare](https://github.com/zyprepare)! - fix(table): 修复虚拟表格下自定义行和单元格样式无效问题 (#3100)
12
+
3
13
  ## 4.9.2
4
14
 
5
15
  ### Patch Changes
@@ -54,7 +54,8 @@ var TableBody = /*#__PURE__*/React.forwardRef(function (_ref) {
54
54
  measureRowElementRef = _useTableContext.measureRowElementRef,
55
55
  scrollbar = _useTableContext.scrollbar,
56
56
  scrollLeft = _useTableContext.scrollLeft,
57
- innerRef = _useTableContext.innerRef;
57
+ innerRef = _useTableContext.innerRef,
58
+ rowClassName = _useTableContext.rowClassName;
58
59
  var virtualListRef = React.useRef(null);
59
60
  var listRef = React.useRef(null);
60
61
  var cls = classname.cx(prefixCls + "-body");
@@ -146,7 +147,8 @@ var TableBody = /*#__PURE__*/React.forwardRef(function (_ref) {
146
147
  key: row.id,
147
148
  // @ts-ignore
148
149
  rowIndex: index,
149
- rowData: row
150
+ rowData: row,
151
+ className: rowClassName === null || rowClassName === void 0 ? void 0 : rowClassName(row, index)
150
152
  }, getRequiredProps(row.id))));
151
153
  }
152
154
  }))) : TbodyContent.renderEmptyContent(Object.assign({
@@ -176,6 +176,7 @@ var TableRow = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
176
176
  }), flattedColumnsWithoutChildren.map(function (column, idx) {
177
177
  return /*#__PURE__*/React__default["default"].createElement(TableCell.TableCell, {
178
178
  key: idx,
179
+ className: cellClassName === null || cellClassName === void 0 ? void 0 : cellClassName(rowDataProp, column, idx),
179
180
  column: column,
180
181
  isSwitcherCol: firstColumn ? firstColumn.id === column.id : false,
181
182
  rowData: rowDataProp,
@@ -45,6 +45,7 @@ var DEFAULT_HIGHLIGHTED_COL_KEYS = [];
45
45
  var DEFAULT_EXPAND_ROW_KEYS = [];
46
46
  var DEFAULT_FIXED_TO_COLUMN = {};
47
47
  var useTable = function useTable(_a) {
48
+ var _b, _c, _d;
48
49
  var _a$data = _a.data,
49
50
  data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
50
51
  _a$columns = _a.columns,
@@ -494,29 +495,25 @@ var useTable = function useTable(_a) {
494
495
  return row.children && row.children.length || onLoadChildren && !row.isLeaf;
495
496
  }) : false;
496
497
  }, [data, onLoadChildren]);
497
- var _useState3 = React.useState(null),
498
+ var sortOrderColumn = React.useMemo(function () {
499
+ return index.getColumnByDefaultSortOrder(columns);
500
+ }, [columns]);
501
+ var _useState3 = React.useState((_b = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.dataKey) !== null && _b !== void 0 ? _b : null),
498
502
  activeSorterColumn = _useState3[0],
499
503
  setActiveSorterColumn = _useState3[1];
500
- var _useState4 = React.useState(null),
504
+ var _useState4 = React.useState((_d = (_c = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.defaultSortOrder) !== null && _c !== void 0 ? _c : sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.sortOrder) !== null && _d !== void 0 ? _d : null),
501
505
  activeSorterType = _useState4[0],
502
506
  setActiveSorterType = _useState4[1];
507
+ React.useEffect(function () {
508
+ var _a, _b, _c;
509
+ setActiveSorterColumn((_a = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.dataKey) !== null && _a !== void 0 ? _a : null);
510
+ setActiveSorterType((_c = (_b = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.defaultSortOrder) !== null && _b !== void 0 ? _b : sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.sortOrder) !== null && _c !== void 0 ? _c : null);
511
+ }, [sortOrderColumn]);
503
512
  //* *************** 根据排序列处理数据 ************** *//
504
513
  var showData = React.useMemo(function () {
505
514
  var _data = [].concat(transitionData);
506
515
  if (activeSorterColumn) {
507
- var sortedColumn = {};
508
- var findColumn = function findColumn(columns) {
509
- columns.forEach(function (item) {
510
- if (item.dataKey === activeSorterColumn) {
511
- sortedColumn = item;
512
- return;
513
- }
514
- if (item.children) {
515
- findColumn(item.children);
516
- }
517
- });
518
- };
519
- findColumn(columns);
516
+ var sortedColumn = index.getColumnByDataKey(columns, activeSorterColumn);
520
517
  var sorter = sortedColumn === null || sortedColumn === void 0 ? void 0 : sortedColumn.sorter;
521
518
  if (sorter) {
522
519
  activeSorterType === 'ascend' ? _data.sort(sorter) : _data.sort(sorter).reverse();
@@ -13,6 +13,39 @@ Object.defineProperty(exports, '__esModule', {
13
13
  value: true
14
14
  });
15
15
  var typeAssertion = require('@hi-ui/type-assertion');
16
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
17
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
18
+ if (it) return (it = it.call(o)).next.bind(it);
19
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
20
+ if (it) o = it;
21
+ var i = 0;
22
+ return function () {
23
+ if (i >= o.length) return {
24
+ done: true
25
+ };
26
+ return {
27
+ done: false,
28
+ value: o[i++]
29
+ };
30
+ };
31
+ }
32
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
33
+ }
34
+ function _unsupportedIterableToArray(o, minLen) {
35
+ if (!o) return;
36
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
37
+ var n = Object.prototype.toString.call(o).slice(8, -1);
38
+ if (n === "Object" && o.constructor) n = o.constructor.name;
39
+ if (n === "Map" || n === "Set") return Array.from(o);
40
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
41
+ }
42
+ function _arrayLikeToArray(arr, len) {
43
+ if (len == null || len > arr.length) len = arr.length;
44
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
45
+ arr2[i] = arr[i];
46
+ }
47
+ return arr2;
48
+ }
16
49
  var setColumnsDefaultWidth = function setColumnsDefaultWidth(columns, defaultWidth) {
17
50
  var _columns = columns.concat();
18
51
  var setWidth = function setWidth(_columns) {
@@ -153,7 +186,39 @@ var getTotalOrEvgRowData = function getTotalOrEvgRowData(_data, c, isAvg) {
153
186
  }
154
187
  return maxPointCount > 0 ? columnSumData.toFixed(maxPointCount) : columnSumData;
155
188
  };
189
+ /**
190
+ * 获取指定列
191
+ */
192
+ var getColumnByDataKey = function getColumnByDataKey(columns, dataKey) {
193
+ for (var _iterator = _createForOfIteratorHelperLoose(columns), _step; !(_step = _iterator()).done;) {
194
+ var column = _step.value;
195
+ if (column.dataKey === dataKey) {
196
+ return column;
197
+ }
198
+ if (column.children) {
199
+ return getColumnByDataKey(column.children, dataKey);
200
+ }
201
+ }
202
+ return {};
203
+ };
204
+ /**
205
+ * 获取默认排序的列
206
+ */
207
+ var getColumnByDefaultSortOrder = function getColumnByDefaultSortOrder(columns) {
208
+ for (var _iterator2 = _createForOfIteratorHelperLoose(columns), _step2; !(_step2 = _iterator2()).done;) {
209
+ var column = _step2.value;
210
+ if (column.defaultSortOrder || column.sortOrder) {
211
+ return column;
212
+ }
213
+ if (column.children) {
214
+ return getColumnByDefaultSortOrder(column.children);
215
+ }
216
+ }
217
+ return {};
218
+ };
156
219
  exports.checkNeedTotalOrEvg = checkNeedTotalOrEvg;
220
+ exports.getColumnByDataKey = getColumnByDataKey;
221
+ exports.getColumnByDefaultSortOrder = getColumnByDefaultSortOrder;
157
222
  exports.getGroupItemWidth = getGroupItemWidth;
158
223
  exports.getTotalOrEvgRowData = getTotalOrEvgRowData;
159
224
  exports.parseFixedColumns = parseFixedColumns;
@@ -41,7 +41,8 @@ var TableBody = /*#__PURE__*/forwardRef(function (_ref) {
41
41
  measureRowElementRef = _useTableContext.measureRowElementRef,
42
42
  scrollbar = _useTableContext.scrollbar,
43
43
  scrollLeft = _useTableContext.scrollLeft,
44
- innerRef = _useTableContext.innerRef;
44
+ innerRef = _useTableContext.innerRef,
45
+ rowClassName = _useTableContext.rowClassName;
45
46
  var virtualListRef = useRef(null);
46
47
  var listRef = useRef(null);
47
48
  var cls = cx(prefixCls + "-body");
@@ -133,7 +134,8 @@ var TableBody = /*#__PURE__*/forwardRef(function (_ref) {
133
134
  key: row.id,
134
135
  // @ts-ignore
135
136
  rowIndex: index,
136
- rowData: row
137
+ rowData: row,
138
+ className: rowClassName === null || rowClassName === void 0 ? void 0 : rowClassName(row, index)
137
139
  }, getRequiredProps(row.id))));
138
140
  }
139
141
  }))) : renderEmptyContent(Object.assign({
@@ -164,6 +164,7 @@ var TableRow = /*#__PURE__*/forwardRef(function (_ref, ref) {
164
164
  }), flattedColumnsWithoutChildren.map(function (column, idx) {
165
165
  return /*#__PURE__*/React__default.createElement(TableCell, {
166
166
  key: idx,
167
+ className: cellClassName === null || cellClassName === void 0 ? void 0 : cellClassName(rowDataProp, column, idx),
167
168
  column: column,
168
169
  isSwitcherCol: firstColumn ? firstColumn.id === column.id : false,
169
170
  rowData: rowDataProp,
@@ -17,7 +17,7 @@ import { invariant } from '@hi-ui/env';
17
17
  import { setAttrStatus } from '@hi-ui/dom-utils';
18
18
  import { useCache } from '@hi-ui/use-cache';
19
19
  import { useLatestCallback } from '@hi-ui/use-latest';
20
- import { setColumnsDefaultWidth, parseFixedColumns } from './utils/index.js';
20
+ import { setColumnsDefaultWidth, parseFixedColumns, getColumnByDefaultSortOrder, getColumnByDataKey } from './utils/index.js';
21
21
  import { useAsyncSwitch } from './hooks/use-async-switch.js';
22
22
  import { useExpand } from './hooks/use-expand.js';
23
23
  import { useChange } from './hooks/use-change.js';
@@ -33,6 +33,7 @@ var DEFAULT_HIGHLIGHTED_COL_KEYS = [];
33
33
  var DEFAULT_EXPAND_ROW_KEYS = [];
34
34
  var DEFAULT_FIXED_TO_COLUMN = {};
35
35
  var useTable = function useTable(_a) {
36
+ var _b, _c, _d;
36
37
  var _a$data = _a.data,
37
38
  data = _a$data === void 0 ? DEFAULT_DATA : _a$data,
38
39
  _a$columns = _a.columns,
@@ -482,29 +483,25 @@ var useTable = function useTable(_a) {
482
483
  return row.children && row.children.length || onLoadChildren && !row.isLeaf;
483
484
  }) : false;
484
485
  }, [data, onLoadChildren]);
485
- var _useState3 = useState(null),
486
+ var sortOrderColumn = useMemo(function () {
487
+ return getColumnByDefaultSortOrder(columns);
488
+ }, [columns]);
489
+ var _useState3 = useState((_b = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.dataKey) !== null && _b !== void 0 ? _b : null),
486
490
  activeSorterColumn = _useState3[0],
487
491
  setActiveSorterColumn = _useState3[1];
488
- var _useState4 = useState(null),
492
+ var _useState4 = useState((_d = (_c = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.defaultSortOrder) !== null && _c !== void 0 ? _c : sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.sortOrder) !== null && _d !== void 0 ? _d : null),
489
493
  activeSorterType = _useState4[0],
490
494
  setActiveSorterType = _useState4[1];
495
+ useEffect(function () {
496
+ var _a, _b, _c;
497
+ setActiveSorterColumn((_a = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.dataKey) !== null && _a !== void 0 ? _a : null);
498
+ setActiveSorterType((_c = (_b = sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.defaultSortOrder) !== null && _b !== void 0 ? _b : sortOrderColumn === null || sortOrderColumn === void 0 ? void 0 : sortOrderColumn.sortOrder) !== null && _c !== void 0 ? _c : null);
499
+ }, [sortOrderColumn]);
491
500
  //* *************** 根据排序列处理数据 ************** *//
492
501
  var showData = useMemo(function () {
493
502
  var _data = [].concat(transitionData);
494
503
  if (activeSorterColumn) {
495
- var sortedColumn = {};
496
- var findColumn = function findColumn(columns) {
497
- columns.forEach(function (item) {
498
- if (item.dataKey === activeSorterColumn) {
499
- sortedColumn = item;
500
- return;
501
- }
502
- if (item.children) {
503
- findColumn(item.children);
504
- }
505
- });
506
- };
507
- findColumn(columns);
504
+ var sortedColumn = getColumnByDataKey(columns, activeSorterColumn);
508
505
  var sorter = sortedColumn === null || sortedColumn === void 0 ? void 0 : sortedColumn.sorter;
509
506
  if (sorter) {
510
507
  activeSorterType === 'ascend' ? _data.sort(sorter) : _data.sort(sorter).reverse();
@@ -8,6 +8,39 @@
8
8
  * LICENSE file in the root directory of this source tree.
9
9
  */
10
10
  import { isNumeric } from '@hi-ui/type-assertion';
11
+ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
12
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
13
+ if (it) return (it = it.call(o)).next.bind(it);
14
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
15
+ if (it) o = it;
16
+ var i = 0;
17
+ return function () {
18
+ if (i >= o.length) return {
19
+ done: true
20
+ };
21
+ return {
22
+ done: false,
23
+ value: o[i++]
24
+ };
25
+ };
26
+ }
27
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
28
+ }
29
+ function _unsupportedIterableToArray(o, minLen) {
30
+ if (!o) return;
31
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
32
+ var n = Object.prototype.toString.call(o).slice(8, -1);
33
+ if (n === "Object" && o.constructor) n = o.constructor.name;
34
+ if (n === "Map" || n === "Set") return Array.from(o);
35
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
36
+ }
37
+ function _arrayLikeToArray(arr, len) {
38
+ if (len == null || len > arr.length) len = arr.length;
39
+ for (var i = 0, arr2 = new Array(len); i < len; i++) {
40
+ arr2[i] = arr[i];
41
+ }
42
+ return arr2;
43
+ }
11
44
  var setColumnsDefaultWidth = function setColumnsDefaultWidth(columns, defaultWidth) {
12
45
  var _columns = columns.concat();
13
46
  var setWidth = function setWidth(_columns) {
@@ -148,4 +181,34 @@ var getTotalOrEvgRowData = function getTotalOrEvgRowData(_data, c, isAvg) {
148
181
  }
149
182
  return maxPointCount > 0 ? columnSumData.toFixed(maxPointCount) : columnSumData;
150
183
  };
151
- export { checkNeedTotalOrEvg, getGroupItemWidth, getTotalOrEvgRowData, parseFixedColumns, parseLocalArray, setColumnsDefaultWidth, uuid };
184
+ /**
185
+ * 获取指定列
186
+ */
187
+ var getColumnByDataKey = function getColumnByDataKey(columns, dataKey) {
188
+ for (var _iterator = _createForOfIteratorHelperLoose(columns), _step; !(_step = _iterator()).done;) {
189
+ var column = _step.value;
190
+ if (column.dataKey === dataKey) {
191
+ return column;
192
+ }
193
+ if (column.children) {
194
+ return getColumnByDataKey(column.children, dataKey);
195
+ }
196
+ }
197
+ return {};
198
+ };
199
+ /**
200
+ * 获取默认排序的列
201
+ */
202
+ var getColumnByDefaultSortOrder = function getColumnByDefaultSortOrder(columns) {
203
+ for (var _iterator2 = _createForOfIteratorHelperLoose(columns), _step2; !(_step2 = _iterator2()).done;) {
204
+ var column = _step2.value;
205
+ if (column.defaultSortOrder || column.sortOrder) {
206
+ return column;
207
+ }
208
+ if (column.children) {
209
+ return getColumnByDefaultSortOrder(column.children);
210
+ }
211
+ }
212
+ return {};
213
+ };
214
+ export { checkNeedTotalOrEvg, getColumnByDataKey, getColumnByDefaultSortOrder, getGroupItemWidth, getTotalOrEvgRowData, parseFixedColumns, parseLocalArray, setColumnsDefaultWidth, uuid };
@@ -80,6 +80,7 @@ export interface TableColumnItemRenderReturn {
80
80
  rowSpan?: number;
81
81
  };
82
82
  }
83
+ export declare type TableColumnSortOrder = 'ascend' | 'descend' | null;
83
84
  export declare type TableColumnItem = {
84
85
  /**
85
86
  * 列标题
@@ -101,6 +102,14 @@ export declare type TableColumnItem = {
101
102
  * 列对齐方式
102
103
  */
103
104
  align?: TableColumnItemAlignEnum;
105
+ /**
106
+ * 排序顺序
107
+ */
108
+ sortOrder?: TableColumnSortOrder;
109
+ /**
110
+ * 默认排序顺序
111
+ */
112
+ defaultSortOrder?: TableColumnSortOrder;
104
113
  /**
105
114
  * 列排序函数
106
115
  */
@@ -16,3 +16,11 @@ export declare const uuid: () => string;
16
16
  export declare const parseLocalArray: ({ key, defaultValue }: any) => any;
17
17
  export declare const checkNeedTotalOrEvg: (_data: any[], item: any, calcKey: string) => boolean;
18
18
  export declare const getTotalOrEvgRowData: (_data: any[], c: any, isAvg: boolean) => any;
19
+ /**
20
+ * 获取指定列
21
+ */
22
+ export declare const getColumnByDataKey: (columns: TableColumnItem[], dataKey: string) => TableColumnItem;
23
+ /**
24
+ * 获取默认排序的列
25
+ */
26
+ export declare const getColumnByDefaultSortOrder: (columns: TableColumnItem[]) => TableColumnItem;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hi-ui/table",
3
- "version": "4.9.2",
3
+ "version": "4.10.0",
4
4
  "description": "A sub-package for @hi-ui/hiui.",
5
5
  "keywords": [],
6
6
  "author": "HiUI <mi-hiui@xiaomi.com>",