@teamix/pro 1.5.24 → 1.5.26

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.
@@ -143,8 +143,7 @@ export var BaseItem = function BaseItem(props) {
143
143
  }
144
144
  var prefixCls = usePrefixCls('formily-item', props);
145
145
  var prefix = usePrefixCls();
146
- console.log('feedbackLayout', feedbackLayout);
147
- var formatChildren = feedbackLayout === 'popover' || feedbackLayout === 'hover-popover' ? /*#__PURE__*/React.createElement(Balloon, _objectSpread({
146
+ var formatChildren = (feedbackLayout === 'popover' || feedbackLayout === 'hover-popover') && !!feedbackText ? /*#__PURE__*/React.createElement(Balloon, _objectSpread({
148
147
  needAdjust: true,
149
148
  align: "t",
150
149
  closable: false,
package/es/index.d.ts CHANGED
@@ -30,5 +30,5 @@ export * from './sidebar';
30
30
  export * from './utils';
31
31
  export * from './timeline';
32
32
  export * from './image';
33
- declare const version = "1.5.24";
33
+ declare const version = "1.5.26";
34
34
  export { version, ProAction, ProCard, ProField, ProForm, ProInfo, ProPageContainer, ProPageHeader, ProSkeleton, ProTable, ProSidebar, ProTimeline, TeamixIcon, ProImage, hooks, nocode, templates, utils, };
package/es/index.js CHANGED
@@ -37,7 +37,7 @@ export * from './sidebar';
37
37
  export * from './utils';
38
38
  export * from './timeline';
39
39
  export * from './image';
40
- var version = '1.5.24';
40
+ var version = '1.5.26';
41
41
  // By TeamixTest
42
42
  window.postMessage({
43
43
  source: 'teamix-test-devtools',
@@ -166,7 +166,7 @@ var ToolBar = function ToolBar(props) {
166
166
  flat: flat
167
167
  }),
168
168
  ref: toolBarRef
169
- }, !flat && !fullScreenState ? renderUnFlatShape() : renderFlatShape, /*#__PURE__*/React.createElement("div", {
169
+ }, !flat && !fullScreenState ? renderUnFlatShape() : renderFlatShape, toolBarAutoWidth && /*#__PURE__*/React.createElement("div", {
170
170
  className: cls('shadow'),
171
171
  ref: toolBarContentRef
172
172
  }, renderFlatShape));
package/es/table/index.js CHANGED
@@ -1,4 +1,4 @@
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"],
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
2
  _excluded2 = ["onChange"];
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(); }
@@ -33,6 +33,7 @@ import { EmptyContent } from '@teamix/pro-field';
33
33
  import { ProActionGroup } from '../actions';
34
34
  import classNames from 'classnames';
35
35
  import ProPageContainer from '../page-container';
36
+ import { genAutoWidthColumns, shadowContainer, shadowActionColumnContainer } from './utils/genAutoWidthColumns';
36
37
  import debounce from 'lodash.debounce';
37
38
  import CardView from './components/CardView';
38
39
  import { useUrlState } from '@teamix/hooks';
@@ -146,6 +147,8 @@ var ProTable = function ProTable(props) {
146
147
  propsSize = _props$size === void 0 ? 'medium' : _props$size,
147
148
  disableSelectAll = props.disableSelectAll,
148
149
  context = props.context,
150
+ _props$autoWidth = props.autoWidth,
151
+ autoWidth = _props$autoWidth === void 0 ? false : _props$autoWidth,
149
152
  _props$fixedTableBody = props.fixedTableBody,
150
153
  fixedTableBody = _props$fixedTableBody === void 0 ? false : _props$fixedTableBody,
151
154
  isTree = props.isTree,
@@ -209,6 +212,14 @@ var ProTable = function ProTable(props) {
209
212
  _useState16 = _slicedToArray(_useState15, 2),
210
213
  filteredColumns = _useState16[0],
211
214
  setFilteredColumns = _useState16[1];
215
+ // 判断是否有操作列,有的话则渲染一个 shadow dom
216
+ var hasActionColumn = false;
217
+ if (autoWidth) {
218
+ hasActionColumn = filteredColumns.some(function (column) {
219
+ var _column$actionSchema, _column$actionSchema$;
220
+ 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;
221
+ });
222
+ }
212
223
  var _useState17 = useState(propsSize),
213
224
  _useState18 = _slicedToArray(_useState17, 2),
214
225
  size = _useState18[0],
@@ -217,6 +228,13 @@ var ProTable = function ProTable(props) {
217
228
  _useState20 = _slicedToArray(_useState19, 2),
218
229
  showLoading = _useState20[0],
219
230
  setShowLoading = _useState20[1];
231
+ // 自动计算列宽需要的一些hook
232
+ var _useState21 = useState(false),
233
+ _useState22 = _slicedToArray(_useState21, 2),
234
+ showShadowContainer = _useState22[0],
235
+ setShowShadowContainer = _useState22[1];
236
+ var shadowContainerRef = useRef(null);
237
+ var shadowActionColumnContainerRef = useRef(null);
220
238
  // 表格内部用作存储的 Ref,标识 Table 组件是否被第一次渲染。用作 useUrlState filter 第一次渲染时使用 state 数据请求
221
239
  var dataRef = useRef({
222
240
  flag: true
@@ -237,19 +255,19 @@ var ProTable = function ProTable(props) {
237
255
  }, [currentPage, pageSize, urlState]);
238
256
  // 存储能够被 on 监听到的 ProTable 状态
239
257
  // 因为只做存储用。不需要更新视图以及需要同步更改。所以不使用 setState 更新
240
- var _useState21 = useState({
258
+ var _useState23 = useState({
241
259
  fullScreenState: false,
242
260
  filterRules: {},
243
261
  filterColumns: []
244
262
  }),
245
- _useState22 = _slicedToArray(_useState21, 1),
246
- actionRefState = _useState22[0];
263
+ _useState24 = _slicedToArray(_useState23, 1),
264
+ actionRefState = _useState24[0];
247
265
  // 存储 on 监听事件
248
- var _useState23 = useState({
266
+ var _useState25 = useState({
249
267
  fullScreenState: {}
250
268
  }),
251
- _useState24 = _slicedToArray(_useState23, 1),
252
- actionRefCallback = _useState24[0];
269
+ _useState26 = _slicedToArray(_useState25, 1),
270
+ actionRefCallback = _useState26[0];
253
271
  // 存储定时器 id
254
272
  var autoRefreshTimerRef = useRef();
255
273
  var onResize = null;
@@ -361,20 +379,20 @@ var ProTable = function ProTable(props) {
361
379
  }, 50);
362
380
  };
363
381
  // 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),
382
+ var _useState27 = useState(0),
370
383
  _useState28 = _slicedToArray(_useState27, 2),
371
- fullscreenState = _useState28[0],
372
- setFullscreenState = _useState28[1];
373
- // 切换视角
374
- var _useState29 = useState(defaultView !== null && defaultView !== void 0 ? defaultView : 'table'),
384
+ headerHeight = _useState28[0],
385
+ setHeaderHeight = _useState28[1];
386
+ // 全屏显示 className
387
+ var _useState29 = useState(false),
375
388
  _useState30 = _slicedToArray(_useState29, 2),
376
- switchViewState = _useState30[0],
377
- setSwitchViewState = _useState30[1];
389
+ fullscreenState = _useState30[0],
390
+ setFullscreenState = _useState30[1];
391
+ // 切换视角
392
+ var _useState31 = useState(defaultView !== null && defaultView !== void 0 ? defaultView : 'table'),
393
+ _useState32 = _slicedToArray(_useState31, 2),
394
+ switchViewState = _useState32[0],
395
+ setSwitchViewState = _useState32[1];
378
396
  // 切换全屏搜索开关
379
397
  var filterEnableRef = useRef({
380
398
  fullscreen: false,
@@ -394,10 +412,10 @@ var ProTable = function ProTable(props) {
394
412
  var dataFilterFormRef = !fullscreenState ? normalDataFilterFormRef : fullscreenDataFilterFormRef;
395
413
  // let dataFilterForm = dataFilterFormRef.current;
396
414
  // 整个内容区是否超过一屏。用于表格在非全屏模式下的吸底
397
- var _useState31 = useState(false),
398
- _useState32 = _slicedToArray(_useState31, 2),
399
- footerSuctionState = _useState32[0],
400
- setFooterSuctionState = _useState32[1];
415
+ var _useState33 = useState(false),
416
+ _useState34 = _slicedToArray(_useState33, 2),
417
+ footerSuctionState = _useState34[0],
418
+ setFooterSuctionState = _useState34[1];
401
419
  // TODO 获取内容区是否超出一屏(暂时仅支持全家桶)
402
420
  var getFooterSuctionState = function getFooterSuctionState() {
403
421
  if (!footerSuction) {
@@ -548,6 +566,9 @@ var ProTable = function ProTable(props) {
548
566
  setFullscreenState(state);
549
567
  getHeaderHeight(state);
550
568
  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);
569
+ if (autoWidth) {
570
+ reGenFilteredColumnsByAutoWidth();
571
+ }
551
572
  return state;
552
573
  },
553
574
  setColumn: function setColumn(newColumns) {
@@ -559,10 +580,16 @@ var ProTable = function ProTable(props) {
559
580
  if (update) {
560
581
  emit('refreshFilterState', newColumns);
561
582
  }
583
+ if (autoWidth) {
584
+ reGenFilteredColumnsByAutoWidth();
585
+ }
562
586
  },
563
587
  size: size,
564
588
  setSize: function setSize(mode) {
565
589
  _setSize(mode);
590
+ if (autoWidth) {
591
+ reGenFilteredColumnsByAutoWidth();
592
+ }
566
593
  },
567
594
  refresh: function refresh(params) {
568
595
  // card视角的刷新等于重新请求
@@ -672,6 +699,21 @@ var ProTable = function ProTable(props) {
672
699
  if (propsActionRef) {
673
700
  propsActionRef.current = actionRef.current;
674
701
  }
702
+ function reGenFilteredColumnsByAutoWidth() {
703
+ if (!autoWidth) {
704
+ return;
705
+ }
706
+ setShowShadowContainer(true);
707
+ var authWidthedColumns = genAutoWidthColumns(filteredColumns, shadowContainerRef, data, size, useRowSelection, shadowActionColumnContainerRef);
708
+ setFilteredColumns(authWidthedColumns);
709
+ // 移除 shadow dom
710
+ // setTimeout(() => {
711
+ // if (document.querySelector('.teamix-pro-table-shadow-container')) {
712
+ // document.querySelector('.teamix-pro-table-shadow-container')?.remove();
713
+ // }
714
+ // }, 0);
715
+ }
716
+
675
717
  function onFormatResult(next) {
676
718
  props.onFormatResult && props.onFormatResult(next);
677
719
  // 如果开启了 autoRedirect 当当前页数不为1,并且data为空的时候,重定向到第一页
@@ -711,6 +753,9 @@ var ProTable = function ProTable(props) {
711
753
  setTotal(total + (next.total || ((_next$data3 = next.data) === null || _next$data3 === void 0 ? void 0 : _next$data3.length)));
712
754
  }
713
755
  setShowSkeleton(false);
756
+ if (autoWidth) {
757
+ reGenFilteredColumnsByAutoWidth();
758
+ }
714
759
  }
715
760
  // 请求表格数据工具函数
716
761
  var getData = useRequest(function (params) {
@@ -857,6 +902,9 @@ var ProTable = function ProTable(props) {
857
902
  _setData([].concat(_toConsumableArray(data), _toConsumableArray(dataRes || [])));
858
903
  setTotal(total + (totalRes || (dataRes === null || dataRes === void 0 ? void 0 : dataRes.length)));
859
904
  }
905
+ if (autoWidth) {
906
+ reGenFilteredColumnsByAutoWidth();
907
+ }
860
908
  setShowSkeleton(false);
861
909
  setCustomTableLoading(false);
862
910
  }
@@ -1147,7 +1195,11 @@ var ProTable = function ProTable(props) {
1147
1195
  // 'footer-suction': footerSuctionState && footerSuction,
1148
1196
  }),
1149
1197
  ref: tableRef
1150
- }, renderTable(isFullScreen), fixFooterState && /*#__PURE__*/React.createElement(ProPageContainer.FixedFooter, null, renderFooter()), !fixFooterState && renderFooter());
1198
+ }, showShadowContainer && shadowContainer({
1199
+ columns: filteredColumns,
1200
+ data: data,
1201
+ shadowContainerRef: shadowContainerRef
1202
+ }), hasActionColumn && shadowActionColumnContainer(filteredColumns, shadowActionColumnContainerRef), renderTable(isFullScreen), fixFooterState && /*#__PURE__*/React.createElement(ProPageContainer.FixedFooter, null, renderFooter()), !fixFooterState && renderFooter());
1151
1203
  });
1152
1204
  };
1153
1205
  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,10 @@ declare type TDataService = {
24
24
  };
25
25
  export declare type responsivePaginationType = 'mini' | 'small' | 'simple' | 'normal';
26
26
  export declare type ProTableColumnProps = {
27
+ /** 自动计算宽度时的被挤占的情况 */
28
+ shrink?: number;
29
+ /** 是否自动适应该列宽度 */
30
+ autoWidth?: boolean;
27
31
  /**
28
32
  * 会在 title 之后展示一个 icon,hover 之后提示一些信息
29
33
  */
@@ -65,6 +69,8 @@ export declare type ProTableColumnProps = {
65
69
  } & Omit<ColumnProps, 'filters' | 'dataIndex' | 'filtersMode' | 'children'>;
66
70
  export declare type ProColumnProps = ProTableColumnProps;
67
71
  export declare type ProTableProps = {
72
+ /** 表格是否自适应宽度 */
73
+ autoWidth?: boolean;
68
74
  /** ProColums 定义,取代 Table 的 columns */
69
75
  columns: ProTableColumnProps[];
70
76
  /** 请求地址 */
@@ -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;
@@ -19,6 +19,7 @@ import { getTargetValue } from '@teamix/utils';
19
19
  import { ProActionGroup } from '../../actions';
20
20
  import ProField, { LabelIconTip } from '../../field';
21
21
  import Filter from '../components/Filter';
22
+ import { getProFieldWidth } from '@teamix/pro-field';
22
23
  /**
23
24
  * 增加了 icon 的功能 render title
24
25
  */
@@ -183,9 +184,48 @@ dataTeamixSpm) {
183
184
  value: value,
184
185
  render: newRender,
185
186
  dataSource: newDataSource,
186
- format: format
187
+ format: format,
188
+ proFieldWidthType: valueType
187
189
  }, props));
188
190
  };
191
+ export var renderCellSmartWidth = function renderCellSmartWidth(value, item, index, record) {
192
+ var _item$valueType2 = item.valueType,
193
+ valueType = _item$valueType2 === void 0 ? 'text' : _item$valueType2,
194
+ render = item.render;
195
+ var newRender = null;
196
+ var newDataSource = null;
197
+ var props = item.props;
198
+ // 如果 render 直接传函数
199
+ if (typeof render === 'function') {
200
+ newRender = function newRender() {
201
+ return render === null || render === void 0 ? void 0 : render(value, index, record);
202
+ };
203
+ } else {
204
+ newRender = processBuriedPoint(processRenderFunction(render, value, index, record), record, value, index);
205
+ if (valueType === 'selectGroup') {
206
+ newRender = _objectSpread(_objectSpread({
207
+ maxShowNumber: 'auto',
208
+ foldText: 'more',
209
+ editOnClick: function editOnClick() {},
210
+ edit: true
211
+ }, newRender), {}, {
212
+ ellipsis: false
213
+ });
214
+ props = _objectSpread({
215
+ valueAlias: {
216
+ value: 'TagValue',
217
+ key: 'TagKey'
218
+ }
219
+ }, props);
220
+ }
221
+ if ((render === null || render === void 0 ? void 0 : render.type) === 'step') {
222
+ newRender = _objectSpread(_objectSpread({}, newRender), {}, {
223
+ ellipsis: false
224
+ });
225
+ }
226
+ }
227
+ return getProFieldWidth(valueType, newRender);
228
+ };
189
229
  /**
190
230
  * 处理 render 配置项是函数的情况
191
231
  * @param render ProFieldRender
@@ -0,0 +1,30 @@
1
+ import { MutableRefObject } from 'react';
2
+ import { ProTableColumnProps, ITableCellRender } from '../typing';
3
+ /**
4
+ * @param fileteredColumns
5
+ * @param ref
6
+ * @param data
7
+ * @returns
8
+ */
9
+ export declare function genAutoWidthColumns(fileteredColumns: ProTableColumnProps[], ref: MutableRefObject<HTMLDivElement | null>, data: any[], size: 'small' | 'medium', useRowSelection?: boolean | undefined, actionColumnRef?: MutableRefObject<HTMLDivElement | null>): ProTableColumnProps[];
10
+ interface IShadowContainerProps {
11
+ columns: ProTableColumnProps[];
12
+ data: any[];
13
+ shadowContainerRef: MutableRefObject<null>;
14
+ }
15
+ export declare const shadowContainer: (props: IShadowContainerProps) => JSX.Element;
16
+ export declare const shadowActionColumnContainer: (columns: ProTableColumnProps[], shadowActionColumnContainerRef: MutableRefObject<null>) => JSX.Element | undefined;
17
+ export declare const computeableWidthTypeList: {
18
+ dateTime: (data: any[], render: ITableCellRender) => any;
19
+ };
20
+ export declare const fixedWidthTypeList: {
21
+ dateWeekRange: number;
22
+ dateMonthRange: number;
23
+ dateYearRange: number;
24
+ dateQuarterRange: number;
25
+ dateTimeRange: number;
26
+ time: number;
27
+ timeRange: number;
28
+ };
29
+ export declare const fieldTypeShrink: any;
30
+ export {};