@teamix/pro 1.5.24 → 1.5.26-beta-2

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.
Files changed (61) hide show
  1. package/dist/pro.all.min.css +1 -1
  2. package/dist/pro.css +1 -1
  3. package/dist/pro.js +25836 -22015
  4. package/dist/pro.min.css +1 -1
  5. package/dist/pro.min.js +1 -1
  6. package/dist/pro.xconsole.min.css +1 -1
  7. package/es/card/index.scss +4 -0
  8. package/es/form/Components/FormItem2/index.js +1 -2
  9. package/es/form/SchemaForm/adapterType.js +3 -0
  10. package/es/form/fieldTypeMap.js +3 -0
  11. package/es/form/global.scss +7 -0
  12. package/es/index.d.ts +1 -1
  13. package/es/index.js +10 -1
  14. package/es/table/components/Cell/index.d.ts +17 -0
  15. package/es/table/components/Cell/index.js +191 -0
  16. package/es/table/components/Filter/index.js +3 -3
  17. package/es/table/components/Layout/index.js +9 -7
  18. package/es/table/components/Pagination/index.d.ts +5 -4
  19. package/es/table/components/Pagination/index.js +5 -3
  20. package/es/table/components/TableContent/index.d.ts +8 -0
  21. package/es/table/components/TableContent/index.js +23 -0
  22. package/es/table/components/ToolBar/index.js +1 -1
  23. package/es/table/index.js +172 -136
  24. package/es/table/index.scss +27 -0
  25. package/es/table/typing.d.ts +9 -1
  26. package/es/table/utils/columnRender.d.ts +1 -0
  27. package/es/table/utils/columnRender.js +41 -1
  28. package/es/table/utils/genAutoWidthColumns.d.ts +30 -0
  29. package/es/table/utils/genAutoWidthColumns.js +353 -0
  30. package/es/table/utils/genProColumnToColumn.js +11 -2
  31. package/es/table/utils/processColumns.d.ts +8 -0
  32. package/es/table/utils/processColumns.js +39 -0
  33. package/es/table/xconsole.scss +6 -0
  34. package/lib/card/index.scss +4 -0
  35. package/lib/form/Components/FormItem2/index.js +1 -2
  36. package/lib/form/SchemaForm/adapterType.js +3 -0
  37. package/lib/form/fieldTypeMap.js +3 -0
  38. package/lib/form/global.scss +7 -0
  39. package/lib/index.d.ts +1 -1
  40. package/lib/index.js +11 -2
  41. package/lib/table/components/Cell/index.d.ts +17 -0
  42. package/lib/table/components/Cell/index.js +196 -0
  43. package/lib/table/components/Filter/index.js +3 -3
  44. package/lib/table/components/Layout/index.js +8 -6
  45. package/lib/table/components/Pagination/index.d.ts +5 -4
  46. package/lib/table/components/Pagination/index.js +4 -2
  47. package/lib/table/components/TableContent/index.d.ts +8 -0
  48. package/lib/table/components/TableContent/index.js +34 -0
  49. package/lib/table/components/ToolBar/index.js +1 -1
  50. package/lib/table/index.js +174 -138
  51. package/lib/table/index.scss +27 -0
  52. package/lib/table/typing.d.ts +9 -1
  53. package/lib/table/utils/columnRender.d.ts +1 -0
  54. package/lib/table/utils/columnRender.js +44 -3
  55. package/lib/table/utils/genAutoWidthColumns.d.ts +30 -0
  56. package/lib/table/utils/genAutoWidthColumns.js +368 -0
  57. package/lib/table/utils/genProColumnToColumn.js +10 -1
  58. package/lib/table/utils/processColumns.d.ts +8 -0
  59. package/lib/table/utils/processColumns.js +46 -0
  60. package/lib/table/xconsole.scss +6 -0
  61. package/package.json +1 -1
package/es/table/index.js CHANGED
@@ -1,10 +1,13 @@
1
- var _excluded = ["header", "className", "tableClassName", "mainAction", "extra", "dataFilter", "afterDataFilter", "toolBar", "columns", "useRowSelection", "rowSelection", "onChangeRowSelection", "getRowSelection", "primaryKey", "footerAction", "footer", "url", "pageKey", "pageSizeKey", "method", "params", "formatSort", "formatParams", "formatResult", "requestConfig", "requestWhenMount", "showPagination", "pageSizeList", "responsivePaginationType", "showSkeleton", "skeletonSize", "actionRef", "dataSource", "filterDebounce", "footerSuction", "autoRefresh", "autoRefreshProps", "customRequest", "filterColumnType", "defaultFilterParams", "reserveSelectedRecords", "size", "disableSelectAll", "context", "fixedTableBody", "isTree", "toolBarAutoWidth", "data-teamix-spm", "switchCardView", "cardViewProps", "defaultView", "emptyProps", "bindUrlProps", "bindUrl", "autoRedirect", "useMaxData"],
2
- _excluded2 = ["onChange"];
1
+ var _excluded = ["header", "className", "tableClassName", "mainAction", "extra", "dataFilter", "afterDataFilter", "toolBar", "columns", "useRowSelection", "rowSelection", "onChangeRowSelection", "getRowSelection", "primaryKey", "footerAction", "footer", "url", "pageKey", "pageSizeKey", "method", "params", "formatSort", "formatParams", "formatResult", "requestConfig", "requestWhenMount", "showPagination", "pageSizeList", "responsivePaginationType", "showSkeleton", "skeletonSize", "actionRef", "dataSource", "filterDebounce", "footerSuction", "autoRefresh", "autoRefreshProps", "customRequest", "filterColumnType", "defaultFilterParams", "reserveSelectedRecords", "size", "disableSelectAll", "context", "autoWidth", "fixedTableBody", "isTree", "toolBarAutoWidth", "data-teamix-spm", "switchCardView", "cardViewProps", "defaultView", "emptyProps", "bindUrlProps", "bindUrl", "autoRedirect", "useMaxData"],
2
+ _excluded2 = ["onChange", "onPageSizeChange"];
3
3
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
4
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
5
5
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6
6
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
7
7
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
8
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
11
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
12
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
13
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -13,12 +16,10 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
13
16
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
14
17
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
15
18
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
- import React, { useState, useEffect, useRef, useMemo } from 'react';
19
+ import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
20
20
  import { Table, Checkbox } from '@alicloudfe/components';
21
21
  import Pagination from './components/Pagination';
22
+ import TableContent from './components/TableContent';
22
23
  import genProColumnToColumn from './utils/genProColumnToColumn';
23
24
  import { getGlobalConfig, useRequest, request as utilResquest, getDeepValue, getMessage, pickProps, usePrefixCls, getTargetValue } from '@teamix/utils';
24
25
  import { ProSkeletonRaw as Skeleton } from '../skeleton';
@@ -26,53 +27,19 @@ import './index.scss';
26
27
  import Layout from './components/Layout';
27
28
  import { actionRefUseStateOn, emit, initActionRef, processDefaultFilter, useActionType } from './utils';
28
29
  import getTableProps from './utils/getTableProps';
29
- import getTableSortIcons from './utils/getTableSortIcons';
30
30
  import useTableSelection from './utils/useTableSelection';
31
31
  import FullScreen from './components/ToolBar/Fullscreen';
32
- import { EmptyContent } from '@teamix/pro-field';
33
32
  import { ProActionGroup } from '../actions';
34
33
  import classNames from 'classnames';
35
34
  import ProPageContainer from '../page-container';
35
+ import { genAutoWidthColumns, shadowContainer, shadowActionColumnContainer } from './utils/genAutoWidthColumns';
36
36
  import debounce from 'lodash.debounce';
37
37
  import CardView from './components/CardView';
38
38
  import { useUrlState } from '@teamix/hooks';
39
39
  import { getUrlStateFilter } from './utils/util';
40
+ import processColumns from './utils/processColumns';
40
41
  export * from './typing';
41
42
  var cls = usePrefixCls('teamix-pro-table');
42
- /**
43
- * 处理原生传入的 columns 以便于 选择列 方便处理
44
- * @param columns 原生传入的 columns
45
- * @returns
46
- */
47
- var processColumns = function processColumns(columns, initialColumns) {
48
- var _getGlobalConfig;
49
- var globalFilterColumns = (_getGlobalConfig = getGlobalConfig('ProTable')) === null || _getGlobalConfig === void 0 ? void 0 : _getGlobalConfig.filterColumns;
50
- var filterColumns = columns.filter(function (item) {
51
- return item.columnFilters !== false && (item === null || item === void 0 ? void 0 : item.hidden) !== true && (!globalFilterColumns || globalFilterColumns(_objectSpread({}, item)));
52
- });
53
- // 处理只剩一列批量选择的情况下宽度错乱问题
54
- if (filterColumns === null || filterColumns === void 0 ? void 0 : filterColumns.length) {
55
- var _initialColumns$;
56
- if ((filterColumns === null || filterColumns === void 0 ? void 0 : filterColumns.length) === 1) {
57
- var _filterColumns$, _filterColumns$2;
58
- if ((_filterColumns$ = filterColumns[0]) === null || _filterColumns$ === void 0 ? void 0 : _filterColumns$.width) {
59
- delete filterColumns[0].width;
60
- }
61
- if ((_filterColumns$2 = filterColumns[0]) === null || _filterColumns$2 === void 0 ? void 0 : _filterColumns$2.lock) {
62
- filterColumns[0].lock = false;
63
- }
64
- } else if (((_initialColumns$ = initialColumns[0]) === null || _initialColumns$ === void 0 ? void 0 : _initialColumns$.columnFilters) !== false) {
65
- var _initialColumns$2, _initialColumns$3;
66
- if ((_initialColumns$2 = initialColumns[0]) === null || _initialColumns$2 === void 0 ? void 0 : _initialColumns$2.width) {
67
- filterColumns[0].width = initialColumns[0].width;
68
- }
69
- if ((_initialColumns$3 = initialColumns[0]) === null || _initialColumns$3 === void 0 ? void 0 : _initialColumns$3.lock) {
70
- filterColumns[0].lock = initialColumns[0].lock;
71
- }
72
- }
73
- }
74
- return filterColumns;
75
- };
76
43
  /** 默认请求翻页参数 */
77
44
  var globalPageKey = 'currentPage';
78
45
  var globalPageSizeKey = 'pageSize';
@@ -86,6 +53,7 @@ var globalFormatSort = function globalFormatSort(sort) {
86
53
  };
87
54
  var ProTable = function ProTable(props) {
88
55
  var _urlState$currentPage, _rowSelection$selecte;
56
+ console.log('ProTable 代理成功');
89
57
  var header = props.header,
90
58
  className = props.className,
91
59
  tableClassName = props.tableClassName,
@@ -146,6 +114,8 @@ var ProTable = function ProTable(props) {
146
114
  propsSize = _props$size === void 0 ? 'medium' : _props$size,
147
115
  disableSelectAll = props.disableSelectAll,
148
116
  context = props.context,
117
+ _props$autoWidth = props.autoWidth,
118
+ autoWidthProp = _props$autoWidth === void 0 ? true : _props$autoWidth,
149
119
  _props$fixedTableBody = props.fixedTableBody,
150
120
  fixedTableBody = _props$fixedTableBody === void 0 ? false : _props$fixedTableBody,
151
121
  isTree = props.isTree,
@@ -195,7 +165,9 @@ var ProTable = function ProTable(props) {
195
165
  _useState12 = _slicedToArray(_useState11, 2),
196
166
  showSkeleton = _useState12[0],
197
167
  setShowSkeleton = _useState12[1]; // 首次加载,渲染骨架屏
198
- var skeletonDataSource = new Array(skeletonSize).fill({});
168
+ var skeletonDataSource = useMemo(function () {
169
+ return new Array(skeletonSize).fill({});
170
+ }, [skeletonSize]);
199
171
  var requestDataKey = method.toLowerCase() === 'get' ? 'params' : 'data';
200
172
  // 如果使用 customRequest 的话,内置 loading
201
173
  var _useState13 = useState(requestWhenMount),
@@ -209,6 +181,19 @@ var ProTable = function ProTable(props) {
209
181
  _useState16 = _slicedToArray(_useState15, 2),
210
182
  filteredColumns = _useState16[0],
211
183
  setFilteredColumns = _useState16[1];
184
+ // 全局状态 : 自适应表格
185
+ var autoWidth = useMemo(function () {
186
+ var _getGlobalConfig;
187
+ return ((_getGlobalConfig = getGlobalConfig('ProTable')) === null || _getGlobalConfig === void 0 ? void 0 : _getGlobalConfig.autoWidth) || autoWidthProp;
188
+ }, [autoWidthProp]);
189
+ // 判断是否有操作列,有的话则渲染一个 shadow dom
190
+ var hasActionColumn = false;
191
+ if (autoWidth) {
192
+ hasActionColumn = filteredColumns.some(function (column) {
193
+ var _column$actionSchema, _column$actionSchema$;
194
+ return (column === null || column === void 0 ? void 0 : column.actionSchema) && ((_column$actionSchema = column.actionSchema) === null || _column$actionSchema === void 0 ? void 0 : (_column$actionSchema$ = _column$actionSchema.actions) === null || _column$actionSchema$ === void 0 ? void 0 : _column$actionSchema$.length) > 0;
195
+ });
196
+ }
212
197
  var _useState17 = useState(propsSize),
213
198
  _useState18 = _slicedToArray(_useState17, 2),
214
199
  size = _useState18[0],
@@ -217,6 +202,13 @@ var ProTable = function ProTable(props) {
217
202
  _useState20 = _slicedToArray(_useState19, 2),
218
203
  showLoading = _useState20[0],
219
204
  setShowLoading = _useState20[1];
205
+ // 自动计算列宽需要的一些hook
206
+ var _useState21 = useState(false),
207
+ _useState22 = _slicedToArray(_useState21, 2),
208
+ showShadowContainer = _useState22[0],
209
+ setShowShadowContainer = _useState22[1];
210
+ var shadowContainerRef = useRef(null);
211
+ var shadowActionColumnContainerRef = useRef(null);
220
212
  // 表格内部用作存储的 Ref,标识 Table 组件是否被第一次渲染。用作 useUrlState filter 第一次渲染时使用 state 数据请求
221
213
  var dataRef = useRef({
222
214
  flag: true
@@ -237,19 +229,19 @@ var ProTable = function ProTable(props) {
237
229
  }, [currentPage, pageSize, urlState]);
238
230
  // 存储能够被 on 监听到的 ProTable 状态
239
231
  // 因为只做存储用。不需要更新视图以及需要同步更改。所以不使用 setState 更新
240
- var _useState21 = useState({
232
+ var _useState23 = useState({
241
233
  fullScreenState: false,
242
234
  filterRules: {},
243
235
  filterColumns: []
244
236
  }),
245
- _useState22 = _slicedToArray(_useState21, 1),
246
- actionRefState = _useState22[0];
237
+ _useState24 = _slicedToArray(_useState23, 1),
238
+ actionRefState = _useState24[0];
247
239
  // 存储 on 监听事件
248
- var _useState23 = useState({
240
+ var _useState25 = useState({
249
241
  fullScreenState: {}
250
242
  }),
251
- _useState24 = _slicedToArray(_useState23, 1),
252
- actionRefCallback = _useState24[0];
243
+ _useState26 = _slicedToArray(_useState25, 1),
244
+ actionRefCallback = _useState26[0];
253
245
  // 存储定时器 id
254
246
  var autoRefreshTimerRef = useRef();
255
247
  var onResize = null;
@@ -361,20 +353,20 @@ var ProTable = function ProTable(props) {
361
353
  }, 50);
362
354
  };
363
355
  // header 区域高度。用作全屏计算吸顶吸底高度。默认不做计算
364
- var _useState25 = useState(0),
365
- _useState26 = _slicedToArray(_useState25, 2),
366
- headerHeight = _useState26[0],
367
- setHeaderHeight = _useState26[1];
368
- // 全屏显示 className
369
- var _useState27 = useState(false),
356
+ var _useState27 = useState(0),
370
357
  _useState28 = _slicedToArray(_useState27, 2),
371
- fullscreenState = _useState28[0],
372
- setFullscreenState = _useState28[1];
373
- // 切换视角
374
- var _useState29 = useState(defaultView !== null && defaultView !== void 0 ? defaultView : 'table'),
358
+ headerHeight = _useState28[0],
359
+ setHeaderHeight = _useState28[1];
360
+ // 全屏显示 className
361
+ var _useState29 = useState(false),
375
362
  _useState30 = _slicedToArray(_useState29, 2),
376
- switchViewState = _useState30[0],
377
- setSwitchViewState = _useState30[1];
363
+ fullscreenState = _useState30[0],
364
+ setFullscreenState = _useState30[1];
365
+ // 切换视角
366
+ var _useState31 = useState(defaultView !== null && defaultView !== void 0 ? defaultView : 'table'),
367
+ _useState32 = _slicedToArray(_useState31, 2),
368
+ switchViewState = _useState32[0],
369
+ setSwitchViewState = _useState32[1];
378
370
  // 切换全屏搜索开关
379
371
  var filterEnableRef = useRef({
380
372
  fullscreen: false,
@@ -394,10 +386,10 @@ var ProTable = function ProTable(props) {
394
386
  var dataFilterFormRef = !fullscreenState ? normalDataFilterFormRef : fullscreenDataFilterFormRef;
395
387
  // let dataFilterForm = dataFilterFormRef.current;
396
388
  // 整个内容区是否超过一屏。用于表格在非全屏模式下的吸底
397
- var _useState31 = useState(false),
398
- _useState32 = _slicedToArray(_useState31, 2),
399
- footerSuctionState = _useState32[0],
400
- setFooterSuctionState = _useState32[1];
389
+ var _useState33 = useState(false),
390
+ _useState34 = _slicedToArray(_useState33, 2),
391
+ footerSuctionState = _useState34[0],
392
+ setFooterSuctionState = _useState34[1];
401
393
  // TODO 获取内容区是否超出一屏(暂时仅支持全家桶)
402
394
  var getFooterSuctionState = function getFooterSuctionState() {
403
395
  if (!footerSuction) {
@@ -548,6 +540,9 @@ var ProTable = function ProTable(props) {
548
540
  setFullscreenState(state);
549
541
  getHeaderHeight(state);
550
542
  actionRef === null || actionRef === void 0 ? void 0 : (_actionRef$current2 = actionRef.current) === null || _actionRef$current2 === void 0 ? void 0 : (_actionRef$current2$s = _actionRef$current2.setState) === null || _actionRef$current2$s === void 0 ? void 0 : _actionRef$current2$s.call(_actionRef$current2, 'fullScreenState', state);
543
+ if (autoWidth) {
544
+ reGenFilteredColumnsByAutoWidth();
545
+ }
551
546
  return state;
552
547
  },
553
548
  setColumn: function setColumn(newColumns) {
@@ -559,10 +554,16 @@ var ProTable = function ProTable(props) {
559
554
  if (update) {
560
555
  emit('refreshFilterState', newColumns);
561
556
  }
557
+ if (autoWidth) {
558
+ reGenFilteredColumnsByAutoWidth(columns);
559
+ }
562
560
  },
563
561
  size: size,
564
562
  setSize: function setSize(mode) {
565
563
  _setSize(mode);
564
+ if (autoWidth) {
565
+ reGenFilteredColumnsByAutoWidth();
566
+ }
566
567
  },
567
568
  refresh: function refresh(params) {
568
569
  // card视角的刷新等于重新请求
@@ -626,6 +627,9 @@ var ProTable = function ProTable(props) {
626
627
  filterEnableRef: filterEnableRef,
627
628
  setData: function setData(data) {
628
629
  _setData(data);
630
+ if (autoWidth) {
631
+ reGenFilteredColumnsByAutoWidth();
632
+ }
629
633
  },
630
634
  resetTableMaxBodyHeight: function resetTableMaxBodyHeight(offset) {
631
635
  getHeaderHeight(fullscreenState, offset);
@@ -672,6 +676,21 @@ var ProTable = function ProTable(props) {
672
676
  if (propsActionRef) {
673
677
  propsActionRef.current = actionRef.current;
674
678
  }
679
+ function reGenFilteredColumnsByAutoWidth(columns) {
680
+ if (!autoWidth) {
681
+ return;
682
+ }
683
+ setShowShadowContainer(true);
684
+ var authWidthedColumns = genAutoWidthColumns(columns !== null && columns !== void 0 ? columns : filteredColumns, shadowContainerRef, data, size, useRowSelection, shadowActionColumnContainerRef);
685
+ setFilteredColumns(authWidthedColumns);
686
+ // 移除 shadow dom
687
+ // setTimeout(() => {
688
+ // if (document.querySelector('.teamix-pro-table-shadow-container')) {
689
+ // document.querySelector('.teamix-pro-table-shadow-container')?.remove();
690
+ // }
691
+ // }, 0);
692
+ }
693
+
675
694
  function onFormatResult(next) {
676
695
  props.onFormatResult && props.onFormatResult(next);
677
696
  // 如果开启了 autoRedirect 当当前页数不为1,并且data为空的时候,重定向到第一页
@@ -711,6 +730,9 @@ var ProTable = function ProTable(props) {
711
730
  setTotal(total + (next.total || ((_next$data3 = next.data) === null || _next$data3 === void 0 ? void 0 : _next$data3.length)));
712
731
  }
713
732
  setShowSkeleton(false);
733
+ if (autoWidth) {
734
+ reGenFilteredColumnsByAutoWidth();
735
+ }
714
736
  }
715
737
  // 请求表格数据工具函数
716
738
  var getData = useRequest(function (params) {
@@ -777,7 +799,7 @@ var ProTable = function ProTable(props) {
777
799
  }
778
800
  });
779
801
  // 请求函数
780
- function _request(params, noLoading, filterParams, isReset) {
802
+ var _request = useCallback(function (params, noLoading, filterParams, isReset) {
781
803
  var _dataFilterFormRef$cu2, _actionRef$current$ge, _actionRef$current6, _actionRef$current6$g, _objectSpread3;
782
804
  // 首次渲染表格,获取 urlState 上的 表头 filter 数据
783
805
  if (bindUrl && (bindUrlProps === null || bindUrlProps === void 0 ? void 0 : bindUrlProps.headerFilters) !== false && dataRef.current.flag) {
@@ -857,6 +879,9 @@ var ProTable = function ProTable(props) {
857
879
  _setData([].concat(_toConsumableArray(data), _toConsumableArray(dataRes || [])));
858
880
  setTotal(total + (totalRes || (dataRes === null || dataRes === void 0 ? void 0 : dataRes.length)));
859
881
  }
882
+ if (autoWidth) {
883
+ reGenFilteredColumnsByAutoWidth();
884
+ }
860
885
  setShowSkeleton(false);
861
886
  setCustomTableLoading(false);
862
887
  }
@@ -878,7 +903,7 @@ var ProTable = function ProTable(props) {
878
903
  if (Number.isInteger(time) && time >= 1000) {
879
904
  autoRefreshTimerRef.current = setTimeout(function () {
880
905
  // 自动刷新不显示 loading
881
- _request({}, true);
906
+ _request(params, true);
882
907
  }, Number(time));
883
908
  emit('PRO_TABLE_REFRESH_TIMER_FLAG', Number(time));
884
909
  }
@@ -889,57 +914,64 @@ var ProTable = function ProTable(props) {
889
914
  getData.run(requestData);
890
915
  }
891
916
  }
892
- }
893
- function onSort(dataIndex, order) {
917
+ }, [bindUrl, bindUrlProps, dataRef, url, customRequest]);
918
+ var onSort = useCallback(function (dataIndex, order) {
894
919
  var nextSort = _defineProperty({}, dataIndex, order);
895
920
  setSort(nextSort);
896
921
  _request(targetFormatSort(nextSort));
897
- }
922
+ }, [_request, targetFormatSort]);
898
923
  // 处理 dataFilter 中的 onFilter、onReset
899
- var dataFilter = _objectSpread(_objectSpread({
900
- mode: 'inline',
901
- forceClear: true
902
- }, propsDataFilter), {}, {
903
- onInit: (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onInit) || requestWhenMount ? function (values) {
904
- var _propsDataFilter$onIn;
905
- // 表单初始化请求处理
906
- propsDataFilter === null || propsDataFilter === void 0 ? void 0 : (_propsDataFilter$onIn = propsDataFilter.onInit) === null || _propsDataFilter$onIn === void 0 ? void 0 : _propsDataFilter$onIn.call(propsDataFilter, values);
907
- !fullscreenState && requestWhenMount && _request({}, false, values);
908
- return true;
909
- } : undefined,
910
- onFilter: function onFilter(values) {
911
- var _actionRef$current7, _actionRef$current7$c;
912
- // 全屏状态,判断全屏表单onFilter是否禁用
913
- if (fullscreenState && !filterEnableRef.current.fullscreen) {
914
- filterEnableRef.current.fullscreen = true;
915
- return;
916
- }
917
- // 非全屏状态,判断普通表单onFiler是否禁用
918
- if (!fullscreenState && !filterEnableRef.current.normal) {
919
- filterEnableRef.current.normal = true;
920
- return;
924
+ var dataFilter = useMemo(function () {
925
+ return _objectSpread(_objectSpread({
926
+ mode: 'inline',
927
+ forceClear: true
928
+ }, propsDataFilter), {}, {
929
+ onInit: (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onInit) || requestWhenMount ? function (values) {
930
+ var _propsDataFilter$onIn;
931
+ // 表单初始化请求处理
932
+ propsDataFilter === null || propsDataFilter === void 0 ? void 0 : (_propsDataFilter$onIn = propsDataFilter.onInit) === null || _propsDataFilter$onIn === void 0 ? void 0 : _propsDataFilter$onIn.call(propsDataFilter, values);
933
+ !fullscreenState && requestWhenMount && _request({}, false, values);
934
+ return true;
935
+ } : undefined,
936
+ onFilter: function onFilter(values) {
937
+ var _actionRef$current7, _actionRef$current7$c;
938
+ // 全屏状态,判断全屏表单onFilter是否禁用
939
+ if (fullscreenState && !filterEnableRef.current.fullscreen) {
940
+ filterEnableRef.current.fullscreen = true;
941
+ return;
942
+ }
943
+ // 非全屏状态,判断普通表单onFiler是否禁用
944
+ if (!fullscreenState && !filterEnableRef.current.normal) {
945
+ filterEnableRef.current.normal = true;
946
+ return;
947
+ }
948
+ (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onFilter) && (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onFilter(values));
949
+ // 搜索变化时,暂时先清空选择
950
+ (_actionRef$current7 = actionRef.current) === null || _actionRef$current7 === void 0 ? void 0 : (_actionRef$current7$c = _actionRef$current7.clearRowSelection) === null || _actionRef$current7$c === void 0 ? void 0 : _actionRef$current7$c.call(_actionRef$current7);
951
+ setCurrentPage(1);
952
+ _request(_defineProperty({}, targetPageKey, 1), false, values);
953
+ },
954
+ onReset: function onReset(values) {
955
+ var _dataFilterFormRef$cu3;
956
+ (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onReset) && (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onReset());
957
+ (_dataFilterFormRef$cu3 = dataFilterFormRef.current) === null || _dataFilterFormRef$cu3 === void 0 ? void 0 : _dataFilterFormRef$cu3.reset();
958
+ setCurrentPage(1);
959
+ _request(_defineProperty({}, targetPageKey, 1), false, values);
921
960
  }
922
- (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onFilter) && (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onFilter(values));
923
- // 搜索变化时,暂时先清空选择
924
- (_actionRef$current7 = actionRef.current) === null || _actionRef$current7 === void 0 ? void 0 : (_actionRef$current7$c = _actionRef$current7.clearRowSelection) === null || _actionRef$current7$c === void 0 ? void 0 : _actionRef$current7$c.call(_actionRef$current7);
925
- setCurrentPage(1);
926
- _request(_defineProperty({}, targetPageKey, 1), false, values);
927
- },
928
- onReset: function onReset(values) {
929
- var _dataFilterFormRef$cu3;
930
- (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onReset) && (propsDataFilter === null || propsDataFilter === void 0 ? void 0 : propsDataFilter.onReset());
931
- (_dataFilterFormRef$cu3 = dataFilterFormRef.current) === null || _dataFilterFormRef$cu3 === void 0 ? void 0 : _dataFilterFormRef$cu3.reset();
932
- setCurrentPage(1);
933
- _request(_defineProperty({}, targetPageKey, 1), false, values);
934
- }
935
- });
936
- var getTableLoading = function getTableLoading() {
961
+ });
962
+ }, [propsDataFilter, fullscreenState, filterEnableRef, actionRef]);
963
+ var isLoading = useMemo(function () {
937
964
  if (!customRequest) {
938
965
  return showLoading && !showSkeleton && (getData.loading || props.loading);
939
966
  } else {
940
967
  return showLoading && !showSkeleton && (customTableLoading || props.loading);
941
968
  }
942
- };
969
+ }, [customRequest, showLoading, showSkeleton, customTableLoading, props.loading, getData]);
970
+ var memorizedGenProColumnToColumn = useMemo(function () {
971
+ return genProColumnToColumn(filteredColumns, showSkeleton, actionRef, context, dataTeamixSpm, bindUrl, bindUrlProps);
972
+ }, [
973
+ // filteredColumns,
974
+ showSkeleton, actionRef, context, dataTeamixSpm, bindUrl, bindUrlProps]);
943
975
  var renderTable = function renderTable(isFullScreen) {
944
976
  if (propsColumns) {
945
977
  return /*#__PURE__*/React.createElement("div", {
@@ -966,11 +998,11 @@ var ProTable = function ProTable(props) {
966
998
  autoRefreshProps: autoRefreshProps,
967
999
  bindUrlProps: bindUrlProps,
968
1000
  bindUrl: bindUrl
969
- }), switchViewState === 'table' && /*#__PURE__*/React.createElement(Table.StickyLock, _objectSpread({
1001
+ }), switchViewState === 'table' && /*#__PURE__*/React.createElement(TableContent, _objectSpread({
970
1002
  hasBorder: false,
971
1003
  dataSource: showSkeleton ? skeletonDataSource : data || props.dataSource,
972
- columns: genProColumnToColumn(filteredColumns, showSkeleton, actionRef, context, dataTeamixSpm, bindUrl, bindUrlProps),
973
- loading: getTableLoading(),
1004
+ columns: memorizedGenProColumnToColumn,
1005
+ loading: isLoading,
974
1006
  className: classNames('teamix-pro-table', tableClassName, {
975
1007
  'with-row-select': rowSelection,
976
1008
  'teamix-pro-tree-table': isTree
@@ -981,14 +1013,12 @@ var ProTable = function ProTable(props) {
981
1013
  sort: sort,
982
1014
  primaryKey: primaryKey,
983
1015
  rowSelection: rowSelection,
984
- emptyContent: /*#__PURE__*/React.createElement(EmptyContent, _objectSpread({}, emptyProps)),
985
- sortIcons: getTableSortIcons(),
986
1016
  fixedHeader: fullscreenState || fixedTableBody,
987
1017
  maxBodyHeight: "calc(100vh - ".concat(headerHeight, "px)")
988
1018
  }, pickProps(getTableProps(), otherProps))), switchViewState === 'card' && /*#__PURE__*/React.createElement(CardView, {
989
1019
  dataSource: showSkeleton ? skeletonDataSource : data || props.dataSource,
990
1020
  showSkeleton: showSkeleton,
991
- loading: getTableLoading(),
1021
+ loading: isLoading,
992
1022
  originColumns: propsColumns,
993
1023
  cardViewProps: cardViewProps,
994
1024
  scrollHeight: fullscreenState || fixedTableBody ? "calc(100vh - ".concat(headerHeight, "px)") : undefined,
@@ -1030,28 +1060,28 @@ var ProTable = function ProTable(props) {
1030
1060
  })));
1031
1061
  } else return footerAction;
1032
1062
  };
1033
- var renderFooter = function renderFooter() {
1034
- function onChangePagination(currentPage) {
1035
- var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1036
- // 翻页默认清空选择
1037
- if (!reserveSelectedRecords) {
1038
- var _actionRef$current8, _actionRef$current8$c;
1039
- (_actionRef$current8 = actionRef.current) === null || _actionRef$current8 === void 0 ? void 0 : (_actionRef$current8$c = _actionRef$current8.clearRowSelection) === null || _actionRef$current8$c === void 0 ? void 0 : _actionRef$current8$c.call(_actionRef$current8);
1040
- }
1041
- setCurrentPage(currentPage);
1042
- _request(_objectSpread(_defineProperty({}, targetPageKey, currentPage), params));
1063
+ var onChangePagination = useCallback(function (currentPage) {
1064
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1065
+ // 翻页默认清空选择
1066
+ if (!reserveSelectedRecords) {
1067
+ var _actionRef$current8, _actionRef$current8$c;
1068
+ (_actionRef$current8 = actionRef.current) === null || _actionRef$current8 === void 0 ? void 0 : (_actionRef$current8$c = _actionRef$current8.clearRowSelection) === null || _actionRef$current8$c === void 0 ? void 0 : _actionRef$current8$c.call(_actionRef$current8);
1043
1069
  }
1044
- function onChangePaginationSize(currentPageSize) {
1045
- var _request10;
1046
- // 翻页默认清空选择
1047
- if (!reserveSelectedRecords) {
1048
- var _actionRef$current9, _actionRef$current9$c;
1049
- (_actionRef$current9 = actionRef.current) === null || _actionRef$current9 === void 0 ? void 0 : (_actionRef$current9$c = _actionRef$current9.clearRowSelection) === null || _actionRef$current9$c === void 0 ? void 0 : _actionRef$current9$c.call(_actionRef$current9);
1050
- }
1051
- setPageSize(currentPageSize);
1052
- setCurrentPage(1);
1053
- _request((_request10 = {}, _defineProperty(_request10, targetPageSizeKey, currentPageSize), _defineProperty(_request10, targetPageKey, 1), _request10));
1070
+ setCurrentPage(currentPage);
1071
+ _request(_objectSpread(_defineProperty({}, targetPageKey, currentPage), params));
1072
+ }, [reserveSelectedRecords, targetPageKey, actionRef]);
1073
+ var onChangePaginationSize = useCallback(function (currentPageSize) {
1074
+ var _request10;
1075
+ // 翻页默认清空选择
1076
+ if (!reserveSelectedRecords) {
1077
+ var _actionRef$current9, _actionRef$current9$c;
1078
+ (_actionRef$current9 = actionRef.current) === null || _actionRef$current9 === void 0 ? void 0 : (_actionRef$current9$c = _actionRef$current9.clearRowSelection) === null || _actionRef$current9$c === void 0 ? void 0 : _actionRef$current9$c.call(_actionRef$current9);
1054
1079
  }
1080
+ setPageSize(currentPageSize);
1081
+ setCurrentPage(1);
1082
+ _request((_request10 = {}, _defineProperty(_request10, targetPageSizeKey, currentPageSize), _defineProperty(_request10, targetPageKey, 1), _request10));
1083
+ }, [reserveSelectedRecords, actionRef, targetPageSizeKey, targetPageKey]);
1084
+ var renderFooter = function renderFooter() {
1055
1085
  function renderRowSelection() {
1056
1086
  if (rowSelection) {
1057
1087
  if (showSkeleton) {
@@ -1085,6 +1115,7 @@ var ProTable = function ProTable(props) {
1085
1115
  var _props$paginationProp3;
1086
1116
  var _ref8 = (_props$paginationProp3 = props === null || props === void 0 ? void 0 : props.paginationProps) !== null && _props$paginationProp3 !== void 0 ? _props$paginationProp3 : {},
1087
1117
  onPaginationPropsChange = _ref8.onChange,
1118
+ onPageSizeChangeProp = _ref8.onPageSizeChange,
1088
1119
  othersPaginationProps = _objectWithoutProperties(_ref8, _excluded2);
1089
1120
  return /*#__PURE__*/React.createElement("div", {
1090
1121
  className: cls('footer', {
@@ -1109,7 +1140,8 @@ var ProTable = function ProTable(props) {
1109
1140
  pageSizeSelector: total > (props.pageSize || 10) * 2 ? 'dropdown' : false,
1110
1141
  type: total / pageSize <= 2 ? 'simple' : 'normal',
1111
1142
  onPageSizeChange: function onPageSizeChange(number) {
1112
- return onChangePaginationSize(number);
1143
+ onChangePaginationSize(number);
1144
+ onPageSizeChangeProp === null || onPageSizeChangeProp === void 0 ? void 0 : onPageSizeChangeProp(number);
1113
1145
  },
1114
1146
  useMaxData: globalUseMaxData !== null && globalUseMaxData !== void 0 ? globalUseMaxData : useMaxData
1115
1147
  }, othersPaginationProps)))));
@@ -1147,7 +1179,11 @@ var ProTable = function ProTable(props) {
1147
1179
  // 'footer-suction': footerSuctionState && footerSuction,
1148
1180
  }),
1149
1181
  ref: tableRef
1150
- }, renderTable(isFullScreen), fixFooterState && /*#__PURE__*/React.createElement(ProPageContainer.FixedFooter, null, renderFooter()), !fixFooterState && renderFooter());
1182
+ }, showShadowContainer && shadowContainer({
1183
+ columns: filteredColumns,
1184
+ data: data,
1185
+ shadowContainerRef: shadowContainerRef
1186
+ }), hasActionColumn && shadowActionColumnContainer(filteredColumns, shadowActionColumnContainerRef), renderTable(isFullScreen), fixFooterState && /*#__PURE__*/React.createElement(ProPageContainer.FixedFooter, null, renderFooter()), !fixFooterState && renderFooter());
1151
1187
  });
1152
1188
  };
1153
1189
  export default ProTable;
@@ -1,3 +1,4 @@
1
+ @import "xconsole";
1
2
  $prefix: 'teamix-pro-table';
2
3
  $fullscreenPadding: 24px;
3
4
 
@@ -77,6 +78,32 @@ $fullscreenPadding: 24px;
77
78
  transition: all 0.1s;
78
79
  }
79
80
  }
81
+ &-shadow-container {
82
+ overflow: hidden;
83
+ position: absolute;
84
+ right: 0;
85
+ left: 0;
86
+ top: 0;
87
+ visibility: hidden;
88
+ pointer-events: none;
89
+ }
90
+ &-shadow-container-columns {
91
+ display: flex;
92
+ >* {
93
+ flex-shrink: 0;
94
+ }
95
+ }
96
+ &-action-column-shadow-container {
97
+ overflow: hidden;
98
+ position: absolute;
99
+ right: 0;
100
+ left: 0;
101
+ top: 0;
102
+ visibility: hidden;
103
+ pointer-events: none;
104
+ display: flex;
105
+ }
106
+
80
107
  // sort icon
81
108
  .next-table-sort.next-table-header-icon {
82
109
  line-height: 16px;
@@ -13,7 +13,7 @@ import { ProCardProps } from '../card';
13
13
  declare type IFieldRenderProps = keyof ProFieldRenderProps;
14
14
  /** 列record函数 */
15
15
  declare type ProTableCellFunProp = (value: any, index: number, record: any, ...others: any) => any;
16
- declare type ITableCellRender = {
16
+ export declare type ITableCellRender = {
17
17
  [key in IFieldRenderProps]?: ProFieldRenderProps[key] | ProTableCellFunProp;
18
18
  } | ((...other: any) => React.ReactNode);
19
19
  declare type TDataService = {
@@ -24,6 +24,12 @@ declare type TDataService = {
24
24
  };
25
25
  export declare type responsivePaginationType = 'mini' | 'small' | 'simple' | 'normal';
26
26
  export declare type ProTableColumnProps = {
27
+ /** 是否开启了自动计算宽度 */
28
+ isAutoWidth?: boolean;
29
+ /** 自动计算宽度时的被挤占的情况 */
30
+ shrink?: number;
31
+ /** 是否自动适应该列宽度 */
32
+ autoWidth?: boolean;
27
33
  /**
28
34
  * 会在 title 之后展示一个 icon,hover 之后提示一些信息
29
35
  */
@@ -65,6 +71,8 @@ export declare type ProTableColumnProps = {
65
71
  } & Omit<ColumnProps, 'filters' | 'dataIndex' | 'filtersMode' | 'children'>;
66
72
  export declare type ProColumnProps = ProTableColumnProps;
67
73
  export declare type ProTableProps = {
74
+ /** 表格是否自适应宽度 */
75
+ autoWidth?: boolean;
68
76
  /** ProColums 定义,取代 Table 的 columns */
69
77
  columns: ProTableColumnProps[];
70
78
  /** 请求地址 */
@@ -11,3 +11,4 @@ export declare const renderColumnsTitle: (item: ProTableColumnProps, actionRef:
11
11
  * 负责单元格的具体渲染
12
12
  */
13
13
  export declare const renderCell: (value: any, item: ProTableColumnProps, index: number, record: any, actionRef: React.MutableRefObject<ProTableActionType | undefined>, context?: any, dataTeamixSpm?: string) => JSX.Element;
14
+ export declare const renderCellSmartWidth: (value: any, item: ProTableColumnProps, index: number, record: any) => 0 | import("@teamix/pro-field/lib/autoWidth/typing").ProFieldAutoWidthPropsItem;