@qn-pandora/pandora-component 4.4.6 → 5.0.1

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.
@@ -4,6 +4,7 @@ interface IInputNumberWithUnitProps {
4
4
  onChange?: (value: string) => void;
5
5
  onNumberChange?: (num?: number) => void;
6
6
  onUnitChange?: (unit: string) => void;
7
+ readOnly?: boolean;
7
8
  className?: string;
8
9
  unitClassName?: string;
9
10
  placeholder?: string;
@@ -26,7 +26,7 @@ var getUnit = function (value) {
26
26
  return (value === null || value === void 0 ? void 0 : value.replace(/\d+/, '')) || '';
27
27
  };
28
28
  function InputNumberWithUnit(props) {
29
- var value = props.value, onChange = props.onChange, onNumberChange = props.onNumberChange, onUnitChange = props.onUnitChange, className = props.className, unitClassName = props.unitClassName, placeholder = props.placeholder, unitOptions = props.unitOptions, _a = props.unitWidth, unitWidth = _a === void 0 ? 86 : _a, min = props.min, max = props.max;
29
+ var value = props.value, onChange = props.onChange, onNumberChange = props.onNumberChange, onUnitChange = props.onUnitChange, className = props.className, unitClassName = props.unitClassName, placeholder = props.placeholder, unitOptions = props.unitOptions, _a = props.unitWidth, unitWidth = _a === void 0 ? 86 : _a, min = props.min, max = props.max, readOnly = props.readOnly;
30
30
  var _b = __read(useState(), 2), num = _b[0], setNum = _b[1];
31
31
  var _c = __read(useState(), 2), unit = _c[0], setUnit = _c[1];
32
32
  var controlled = Object.hasOwnProperty.call(props, 'value');
@@ -50,7 +50,7 @@ function InputNumberWithUnit(props) {
50
50
  }
51
51
  onUnitChange === null || onUnitChange === void 0 ? void 0 : onUnitChange(unit);
52
52
  }, [num, onChange, onUnitChange, controlled, value]);
53
- var addonAfterNode = (React.createElement(Selector, { options: unitOptions, className: unitClassName, value: controlled ? getUnit(value) : unit, style: { width: unitWidth }, onChange: onSelectorChange }));
54
- return (React.createElement(InputNumber, { className: SDK_PREFIX + "-input-number-unit " + className, value: controlled ? getNum(value) : num, onChange: onInputChange, placeholder: placeholder, addonAfter: addonAfterNode, min: min, max: max }));
53
+ var addonAfterNode = (React.createElement(Selector, { options: unitOptions, className: unitClassName, value: controlled ? getUnit(value) : unit, style: { width: unitWidth }, onChange: onSelectorChange, disabled: readOnly }));
54
+ return (React.createElement(InputNumber, { className: SDK_PREFIX + "-input-number-unit " + className, value: controlled ? getNum(value) : num, onChange: onInputChange, placeholder: placeholder, addonAfter: addonAfterNode, min: min, max: max, disabled: readOnly }));
55
55
  }
56
56
  export default InputNumberWithUnit;
@@ -20,21 +20,50 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  }
21
21
  return t;
22
22
  };
23
- import React from 'react';
23
+ var __read = (this && this.__read) || function (o, n) {
24
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
25
+ if (!m) return o;
26
+ var i = m.call(o), r, ar = [], e;
27
+ try {
28
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
29
+ }
30
+ catch (error) { e = { error: error }; }
31
+ finally {
32
+ try {
33
+ if (r && !r.done && (m = i["return"])) m.call(i);
34
+ }
35
+ finally { if (e) throw e.error; }
36
+ }
37
+ return ar;
38
+ };
39
+ import React, { useState, useRef, useEffect } from 'react';
24
40
  import { Resizable } from 'react-resizable';
25
41
  import classnames from 'classnames';
26
42
  import { Resizable as ResizableIcon } from '@qn-pandora/pandora-component-icons';
27
43
  import { SDK_PREFIX } from '../../../constants/style';
28
44
  var ResizableTitle = function (props) {
29
- var onResize = props.onResize, width = props.width, className = props.className, restProps = __rest(props, ["onResize", "width", "className"]);
30
- if (!width) {
45
+ var onResize = props.onResize, propsWidth = props.width, className = props.className, isLastColumn = props.isLastColumn, restProps = __rest(props, ["onResize", "width", "className", "isLastColumn"]);
46
+ var _a = __read(useState(propsWidth), 2), width = _a[0], setWidth = _a[1];
47
+ var contentRef = useRef(null);
48
+ useEffect(function () {
49
+ // Set the initial width based on content
50
+ if (!width && contentRef.current) {
51
+ setWidth(contentRef.current.offsetWidth);
52
+ }
53
+ }, [width]);
54
+ var handleResize = function (event, params) {
55
+ setWidth(params.size.width);
56
+ onResize(event, params);
57
+ };
58
+ // 最后一列不添加拖拽按钮
59
+ if (!onResize || isLastColumn) {
31
60
  return (React.createElement("th", __assign({}, restProps, { className: classnames(className, SDK_PREFIX + "-table-resizable-th") })));
32
61
  }
33
- return (React.createElement(Resizable, { width: width, height: 0, onResize: onResize, minConstraints: [40, 0], draggableOpts: { enableUserSelectHack: false }, handle: React.createElement("span", { className: SDK_PREFIX + "-table-resizable-handle", onClick: function (e) {
62
+ return (React.createElement(Resizable, { axis: "x", width: width, className: SDK_PREFIX + "-table-resizable-Resizable", height: 0, onResize: handleResize, minConstraints: [40, 0], draggableOpts: { enableUserSelectHack: false }, handle: React.createElement("span", { className: SDK_PREFIX + "-table-resizable-handle", onClick: function (e) {
34
63
  e.preventDefault();
35
64
  e.stopPropagation();
36
65
  } },
37
66
  React.createElement(ResizableIcon, null)) },
38
- React.createElement("th", __assign({}, restProps, { className: classnames(className, SDK_PREFIX + "-table-resizable-th") }))));
67
+ React.createElement("th", __assign({}, restProps, { className: classnames(className, SDK_PREFIX + "-table-resizable-th"), ref: contentRef }))));
39
68
  };
40
69
  export default ResizableTitle;
@@ -1,13 +1,14 @@
1
+ .pandora-sdk-table-resizable-th {
2
+ width: 100%;
3
+ }
1
4
  .pandora-sdk-table-resizable-th .pandora-sdk-table-resizable-handle {
2
5
  position: absolute;
3
6
  cursor: col-resize;
4
- right: 6px;
5
- margin-left: 6px;
7
+ right: 1px;
6
8
  height: 40%;
7
9
  top: 50%;
8
10
  -webkit-transform: translateY(-50%);
9
11
  transform: translateY(-50%);
10
- padding: 2px;
11
12
  width: 8px;
12
13
  opacity: 0;
13
14
  -webkit-transition: opacity 0.2s ease-in-out;
@@ -1,15 +1,14 @@
1
1
  @import '../../../style/theme.less';
2
2
 
3
3
  .@{sdk-prefix}-table-resizable-th {
4
+ width: 100%;
4
5
  .@{sdk-prefix}-table-resizable-handle {
5
6
  position: absolute;
6
7
  cursor: col-resize;
7
- right: 6px;
8
- margin-left: 6px;
8
+ right: 1px;
9
9
  height: 40%;
10
10
  top: 50%;
11
11
  transform: translateY(-50%);
12
- padding: 2px;
13
12
  width: 8px;
14
13
  opacity: 0;
15
14
  transition: opacity 0.2s ease-in-out;
@@ -61,6 +61,12 @@ export interface ITableProps<T> extends Omit<TableProps<T>, 'columns'> {
61
61
  draggable?: boolean | ETableSettingType;
62
62
  saveSettingKey?: string;
63
63
  onSettingChange?: (fields: ISaveFieldItem[]) => void;
64
+ /**
65
+ * 是否需要填充空白列, 默认为true
66
+ * 如果支持拖拽,在屏幕宽度大于table总的列宽的时候,会把剩余空间平均分到每一列上。那么拖拽一列会导致其他列的宽度都发生变更
67
+ * 添加一个空白列,宽度auto.可以解决此问题。如果可以接受上述问题,那就无需空白列,needEmptyColumn = false
68
+ */
69
+ needEmptyColumn?: boolean;
64
70
  }
65
71
  /**
66
72
  * pandora2.0风格的表格
@@ -108,7 +114,7 @@ declare class Table<T = any> extends React.Component<ITableProps<T>, any> {
108
114
  updateSettingFields(columns: Array<IColumnType<T>>, settingFields: ISaveFieldItem[]): void;
109
115
  handleHideColumnsChange(keys: string[]): Promise<void> | undefined;
110
116
  getSortedColumns(): IKeyValues<any>[];
111
- transfromColumns(columns: IKeyValues[]): IKeyValues<any>[];
117
+ transfromColumns(columns: IKeyValues[], needEmptyColumn?: boolean): IKeyValues<any>[];
112
118
  getColumns(): IKeyValues<any>[];
113
119
  getRowKey(row: any, index: number): any;
114
120
  getSortCoulmns(columns: IKeyValues[]): IKeyValues<any>[];
@@ -387,8 +387,8 @@ var Table = /** @class */ (function (_super) {
387
387
  };
388
388
  // 如果支持拖拽,在屏幕宽度大于table总的列宽的时候,添加一个空白列,宽度auto.
389
389
  // 空白列添加到右固定列的前面
390
- Table.prototype.transfromColumns = function (columns) {
391
- if (!this.resizable)
390
+ Table.prototype.transfromColumns = function (columns, needEmptyColumn) {
391
+ if (!this.resizable || needEmptyColumn === false)
392
392
  return columns;
393
393
  var cols = __spread(columns);
394
394
  var firstFixedRightIndex = cols.findIndex(function (item) { return get(item, 'fixed') === 'right'; });
@@ -406,14 +406,14 @@ var Table = /** @class */ (function (_super) {
406
406
  return cols;
407
407
  };
408
408
  Table.prototype.getColumns = function () {
409
- var _a = this.props, showColumnSetting = _a.showColumnSetting, columnSettingOverlayClass = _a.columnSettingOverlayClass;
409
+ var _a = this.props, showColumnSetting = _a.showColumnSetting, columnSettingOverlayClass = _a.columnSettingOverlayClass, needEmptyColumn = _a.needEmptyColumn;
410
410
  if (!showColumnSetting) {
411
- return this.transfromColumns(this.columns);
411
+ return this.transfromColumns(this.columns, needEmptyColumn);
412
412
  }
413
413
  // 获取到列设置的options
414
414
  var columnsSettingOptions = this.columnsSettingOptions;
415
415
  var allCols = this.getSortedColumns();
416
- this.transfromColumns(allCols);
416
+ this.transfromColumns(allCols, needEmptyColumn);
417
417
  var length = allCols.length;
418
418
  if (length > 0) {
419
419
  var title = (React.createElement("span", { className: SDK_PREFIX + "-last-column-title" },
@@ -545,6 +545,7 @@ var Table = /** @class */ (function (_super) {
545
545
  return noneSelected || disabled;
546
546
  };
547
547
  Table.prototype.handleResize = function (col, size, oldColumn) {
548
+ console.log('handleResize', col, size);
548
549
  var newColumns = __spread(oldColumn);
549
550
  newColumns.forEach(function (item) {
550
551
  if (get(item, 'dataIndex') === col.dataIndex) {
@@ -554,11 +555,18 @@ var Table = /** @class */ (function (_super) {
554
555
  var sizeMap = {};
555
556
  var setttingFields = this.settingFields;
556
557
  newColumns.forEach(function (element) {
557
- if (element.dataIndex && isNumber(element.width)) {
558
+ if (element.dataIndex &&
559
+ isNumber(element.width) &&
560
+ !isNaN(element.width)) {
558
561
  sizeMap[element.dataIndex] = element.width;
559
562
  }
560
563
  });
561
564
  if (this.props.onSettingChange) {
565
+ setttingFields.forEach(function (field) {
566
+ if (sizeMap[field.field]) {
567
+ field.width = sizeMap[field.field];
568
+ }
569
+ });
562
570
  this.props.onSettingChange(setttingFields);
563
571
  }
564
572
  else if (this.resizable && this.props.saveSettingKey) {
@@ -582,18 +590,22 @@ var Table = /** @class */ (function (_super) {
582
590
  return isNumber(width) ? __assign(__assign({}, col), { width: width }) : col;
583
591
  });
584
592
  }
585
- var transformColumns = columns === null || columns === void 0 ? void 0 : columns.map(function (it) {
593
+ var transformColumns = columns === null || columns === void 0 ? void 0 : columns.map(function (it, index) {
586
594
  if (get(it, 'resizable') && _this.resizable) {
587
595
  return __assign(__assign({}, it), { ellipsis: {
588
596
  showTitle: true
589
- }, onHeaderCell: function (col) { return ({
590
- width: col.width,
591
- // !传入newColumn,而不传入column是因为需要拿到有onHeaderCell的值,外面collumn的变化内部监听不到
592
- onResize: function (_, _a) {
593
- var size = _a.size;
594
- _this.handleResize(col, size, transformColumns);
595
- }
596
- }); } });
597
+ }, onHeaderCell: function (col) {
598
+ var _a;
599
+ return ({
600
+ width: col.width,
601
+ // !传入newColumn,而不传入column是因为需要拿到有onHeaderCell的值,外面collumn的变化内部监听不到
602
+ onResize: function (_, _a) {
603
+ var size = _a.size;
604
+ _this.handleResize(col, size, transformColumns);
605
+ },
606
+ isLastColumn: index === ((_a = (columns || [])) === null || _a === void 0 ? void 0 : _a.length) - 1
607
+ });
608
+ } });
597
609
  }
598
610
  return it;
599
611
  });
@@ -750,7 +762,7 @@ var Table = /** @class */ (function (_super) {
750
762
  __decorate([
751
763
  bind,
752
764
  __metadata("design:type", Function),
753
- __metadata("design:paramtypes", [Array]),
765
+ __metadata("design:paramtypes", [Array, Boolean]),
754
766
  __metadata("design:returntype", void 0)
755
767
  ], Table.prototype, "transfromColumns", null);
756
768
  __decorate([