@kdcloudjs/table 1.1.5-canary.9 → 1.1.6-canary.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.
@@ -7,81 +7,165 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.tableWidthKey = exports.autoFillTableWidth = exports.FILL_COLUMN_CODE = void 0;
9
9
 
10
+ var _symbol = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/symbol"));
11
+
12
+ var _maxSafeInteger = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/number/max-safe-integer"));
13
+
10
14
  var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
11
15
 
12
16
  var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
13
17
 
14
18
  var _splice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/splice"));
15
19
 
20
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
21
+
16
22
  var _calculations = require("../../base/calculations");
17
23
 
18
24
  var _utils = require("../../utils");
19
25
 
20
26
  var _styles = require("../../base/styles");
21
27
 
28
+ var _columnResizeWidth = require("./columnResizeWidth");
29
+
22
30
  var FILL_COLUMN_CODE = '$_fill_column_&';
23
31
  exports.FILL_COLUMN_CODE = FILL_COLUMN_CODE;
24
32
  var tableWidthKey = 'tableWidth';
25
33
  exports.tableWidthKey = tableWidthKey;
26
- var fillColumnWidthKey = 'fillColumnWidth';
34
+ var FLEX_COLUMN_COUNT = (0, _symbol.default)('flexCount');
27
35
 
28
36
  var autoFillTableWidth = function autoFillTableWidth() {
29
37
  return function (pipeline) {
30
- var width = pipeline.getStateAtKey(fillColumnWidthKey, 0);
31
- var columns = pipeline.getColumns();
32
- var fillColumns = (0, _find.default)(columns).call(columns, function (col) {
33
- return col.code === FILL_COLUMN_CODE;
34
- });
35
-
36
- if (fillColumns) {
37
- fillColumns.width = width;
38
+ var flexColumnResult = findFlexColumns(pipeline);
39
+ var flexCount = flexColumnResult.get(FLEX_COLUMN_COUNT);
40
+
41
+ if (flexCount) {
42
+ // 设置了flex宽度,flex列平分剩余宽度
43
+ var remainingWidth = getTableRemainingWidth(pipeline) || 0;
44
+
45
+ if (remainingWidth > 0) {
46
+ // 保存剩余的flex总和和剩余宽度总和宽度
47
+ var residualFlexCount = flexCount;
48
+ var residualFlexWidth = remainingWidth;
49
+ var columnSize = pipeline.getFeatureOptions(_columnResizeWidth.COLUMN_SIZE_KEY) || {};
50
+ pipeline.mapColumns((0, _utils.makeRecursiveMapper)(function (col, recursiveFlatMapInfo) {
51
+ var isLeaf = recursiveFlatMapInfo.isLeaf;
52
+
53
+ if (isLeaf && isValidFlexColumn(col, pipeline)) {
54
+ var code = col.code,
55
+ _col$features = col.features,
56
+ features = _col$features === void 0 ? {} : _col$features;
57
+ var flex = features.flex,
58
+ _features$minWidth = features.minWidth,
59
+ minWidth = _features$minWidth === void 0 ? 0 : _features$minWidth,
60
+ _features$maxWidth = features.maxWidth,
61
+ maxWidth = _features$maxWidth === void 0 ? _maxSafeInteger.default : _features$maxWidth;
62
+ var usedRemainingWidth = Math.floor(remainingWidth * flex / flexCount);
63
+ var preColWidth = col.width; // 如果当前已经是最后一个flex列,将剩余的宽度添加到该列,其他计算相应的列
64
+
65
+ col.width = clamp(minWidth, preColWidth + (residualFlexCount === flex ? residualFlexWidth : usedRemainingWidth), maxWidth);
66
+ residualFlexCount -= flex;
67
+ residualFlexWidth -= col.width - preColWidth;
68
+ columnSize[code] = col.width;
69
+ }
70
+
71
+ return col;
72
+ }));
73
+ pipeline.setFeatureOptions(_columnResizeWidth.COLUMN_SIZE_KEY, columnSize);
74
+ }
38
75
  } else {
39
- var rightNestedLockCount = (0, _calculations.getLeftNestedLockCount)((0, _slice.default)(columns).call(columns).reverse());
40
- var spliceIndex = columns.length - rightNestedLockCount;
41
- var _fillColumns = {
42
- name: '',
43
- code: FILL_COLUMN_CODE,
44
- width: width,
45
- features: {
46
- resizeable: false
47
- },
48
- getCellProps: function getCellProps(value, record, rowIndex) {
49
- return {
50
- className: _styles.Classes.emptyColCell
51
- };
52
- }
53
- };
54
- (0, _splice.default)(columns).call(columns, spliceIndex || columns.length, 0, _fillColumns);
76
+ // 未设置了flex宽度,创建占位列
77
+ var columns = pipeline.getColumns();
78
+ var fillColumns = (0, _find.default)(columns).call(columns, function (col) {
79
+ return col.code === FILL_COLUMN_CODE;
80
+ });
81
+ var width = getTableRemainingWidth(pipeline) || 0;
82
+
83
+ if (fillColumns) {
84
+ fillColumns.width = width;
85
+ } else {
86
+ var rightNestedLockCount = (0, _calculations.getLeftNestedLockCount)((0, _slice.default)(columns).call(columns).reverse());
87
+ var spliceIndex = columns.length - rightNestedLockCount;
88
+ var _fillColumns = {
89
+ name: '',
90
+ code: FILL_COLUMN_CODE,
91
+ width: width,
92
+ features: {
93
+ resizeable: false
94
+ },
95
+ getCellProps: function getCellProps(value, record, rowIndex) {
96
+ return {
97
+ className: _styles.Classes.emptyColCell
98
+ };
99
+ }
100
+ };
101
+ (0, _splice.default)(columns).call(columns, spliceIndex || columns.length, 0, _fillColumns);
102
+ }
103
+
104
+ pipeline.columns(columns);
55
105
  }
56
106
 
57
- pipeline.columns(columns);
58
- setAutoFillWidth(pipeline);
59
107
  return pipeline;
108
+
109
+ function findFlexColumns(pipeline) {
110
+ var result = new _map.default([[FLEX_COLUMN_COUNT, 0]]);
111
+ dfs(pipeline.getColumns(), result);
112
+ return result;
113
+
114
+ function dfs(columns, result) {
115
+ columns.forEach(function (col) {
116
+ if ((0, _utils.isLeafNode)(col)) {
117
+ if (isValidFlexColumn(col, pipeline)) {
118
+ result.set(FLEX_COLUMN_COUNT, result.get(FLEX_COLUMN_COUNT) + col.features.flex);
119
+ }
120
+ } else {
121
+ dfs(col.children, result);
122
+ }
123
+ });
124
+ }
125
+ }
60
126
  };
61
127
  };
62
128
 
63
129
  exports.autoFillTableWidth = autoFillTableWidth;
64
130
 
65
- var setAutoFillWidth = function setAutoFillWidth(pipeline) {
131
+ function getColumnWidthSum(pipeline) {
132
+ return dfs(pipeline.getColumns());
133
+
134
+ function dfs(columns) {
135
+ return columns.reduce(function (acc, col) {
136
+ var width = col.width,
137
+ code = col.code;
138
+
139
+ if ((0, _utils.isLeafNode)(col) && code !== FILL_COLUMN_CODE) {
140
+ var resizeColumn = pipeline.getFeatureOptions(_columnResizeWidth.COLUMN_SIZE_KEY);
141
+ return acc + (resizeColumn && resizeColumn[code]) || width;
142
+ } else {
143
+ return acc + dfs(col.children);
144
+ }
145
+ }, 0);
146
+ }
147
+ }
148
+
149
+ function getTableRemainingWidth(pipeline) {
66
150
  var tableWidth = pipeline.getStateAtKey(tableWidthKey);
67
151
  if (!tableWidth) return;
68
- var columnWidthSum = 0;
69
- pipeline.mapColumns((0, _utils.makeRecursiveMapper)(function (col) {
70
- var width = col.width,
71
- code = col.code;
72
-
73
- if ((0, _utils.isLeafNode)(col) && code !== FILL_COLUMN_CODE) {
74
- var resizeColumn = pipeline.getStateAtKey('columnResize');
75
- columnWidthSum += resizeColumn && resizeColumn[code] || width;
76
- }
152
+ var remainingWidth = Math.floor(tableWidth - getColumnWidthSum(pipeline));
153
+ return remainingWidth > 0 ? remainingWidth : 0;
154
+ }
77
155
 
78
- return col;
79
- }));
80
- var fillColumnWidth = Math.floor(tableWidth - columnWidthSum);
81
- fillColumnWidth = fillColumnWidth > 0 ? fillColumnWidth : 0;
82
- var preWidth = pipeline.getStateAtKey(fillColumnWidthKey, 0);
156
+ function isValidFlexColumn(col, pipeline) {
157
+ var _a;
83
158
 
84
- if (preWidth !== fillColumnWidth) {
85
- pipeline.setStateAtKey('fillColumnWidth', fillColumnWidth);
159
+ var resizeColumn = pipeline.getFeatureOptions(_columnResizeWidth.RESIZED_COLUMN_KEY); // 拖拽列自动禁止flex
160
+
161
+ if (resizeColumn === null || resizeColumn === void 0 ? void 0 : resizeColumn.has(col.code)) {
162
+ return false;
86
163
  }
87
- };
164
+
165
+ var flex = (_a = col.features) === null || _a === void 0 ? void 0 : _a.flex;
166
+ return typeof flex === 'number' && flex > 0;
167
+ }
168
+
169
+ function clamp(min, x, max) {
170
+ return Math.max(min, Math.min(max, x));
171
+ }
@@ -20,5 +20,7 @@ export interface ColumnResizeOptions {
20
20
  onChangeSize?(nextSize: ColumnSize): void;
21
21
  afterChangeSize?(nextSize: ColumnSize, changedColumnSize: ChangedColumnSize[]): void;
22
22
  }
23
+ export declare const COLUMN_SIZE_KEY = "columnResize";
24
+ export declare const RESIZED_COLUMN_KEY = "resizedColumn";
23
25
  export declare function columnResize(opts?: ColumnResizeOptions): (pipeline: TablePipeline) => TablePipeline;
24
26
  export {};
@@ -11,12 +11,15 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
11
11
  Object.defineProperty(exports, "__esModule", {
12
12
  value: true
13
13
  });
14
+ exports.RESIZED_COLUMN_KEY = exports.COLUMN_SIZE_KEY = void 0;
14
15
  exports.columnResize = columnResize;
15
16
 
16
- var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
17
+ var _set = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set"));
17
18
 
18
19
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
19
20
 
21
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
22
+
20
23
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
21
24
 
22
25
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/taggedTemplateLiteral"));
@@ -53,17 +56,22 @@ function disableSelect(event) {
53
56
  event.preventDefault();
54
57
  }
55
58
 
59
+ var stateKey = 'columnResize';
60
+ var COLUMN_SIZE_KEY = 'columnResize';
61
+ exports.COLUMN_SIZE_KEY = COLUMN_SIZE_KEY;
62
+ var RESIZED_COLUMN_KEY = 'resizedColumn';
63
+ exports.RESIZED_COLUMN_KEY = RESIZED_COLUMN_KEY;
64
+
56
65
  function columnResize() {
57
66
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
58
67
 
59
68
  var _a, _b, _c;
60
69
 
61
- var stateKey = 'columnResize';
62
70
  var minSize = (_a = opts.minSize) !== null && _a !== void 0 ? _a : 60;
63
71
  var fallbackSize = (_b = opts.fallbackSize) !== null && _b !== void 0 ? _b : 150;
64
72
  var maxSize = (_c = opts.maxSize) !== null && _c !== void 0 ? _c : 1000;
65
73
  return function columnResizeFeature(pipeline) {
66
- var _a, _b, _c;
74
+ var _a, _b;
67
75
 
68
76
  var columnSize = (_b = (_a = opts.columnSize) !== null && _a !== void 0 ? _a : pipeline.getStateAtKey(stateKey)) !== null && _b !== void 0 ? _b : {};
69
77
  var leafColumns = (0, _utils.collectNodes)(pipeline.getColumns(), 'leaf-only');
@@ -78,15 +86,10 @@ function columnResize() {
78
86
  columnSize[code] = fallbackSize;
79
87
  }
80
88
  }
81
- }); // 初始化 || opts.columnSize发生变化(为了autofill时能取到最新值)
82
-
83
- if (!pipeline.getStateAtKey(stateKey) || ((_c = pipeline.ref) === null || _c === void 0 ? void 0 : _c.current.lastOptColumnSize) !== opts.columnSize) {
84
- pipeline.setStateAtKey(stateKey, columnSize);
85
- }
89
+ }); // 实时存储一份最新的columnSize,与autoFill共用一份数据
90
+ // 存在state里可能存到取不到最新的
86
91
 
87
- if (pipeline.ref) {
88
- pipeline.ref.current.lastOptColumnSize = opts.columnSize;
89
- }
92
+ pipeline.setFeatureOptions(COLUMN_SIZE_KEY, columnSize);
90
93
 
91
94
  var onChangeSize = function onChangeSize(nextColumnSize) {
92
95
  window.requestAnimationFrame(function () {
@@ -94,17 +97,13 @@ function columnResize() {
94
97
 
95
98
  pipeline.setStateAtKey(stateKey, nextColumnSize);
96
99
  (_a = opts === null || opts === void 0 ? void 0 : opts.onChangeSize) === null || _a === void 0 ? void 0 : _a.call(opts, nextColumnSize);
97
-
98
- if (opts.columnSize) {
99
- if (pipeline.ref) {
100
- pipeline.ref.current.lastOptColumnSize = nextColumnSize; // 这里记录由列宽拖拽导致的opts.columnSize变化,避免重复渲染
101
- }
102
- }
103
100
  });
104
101
  };
105
102
 
106
103
  var handleDoubleClick = function handleDoubleClick(e, col) {
107
- opts === null || opts === void 0 ? void 0 : opts.doubleClickCallback(e, col);
104
+ var _a;
105
+
106
+ (_a = opts.doubleClickCallback) === null || _a === void 0 ? void 0 : _a.call(opts, e, col);
108
107
  };
109
108
 
110
109
  var handleMouseDown = function handleMouseDown(e, col) {
@@ -112,7 +111,14 @@ function columnResize() {
112
111
  var changedColumnSize = {};
113
112
  var startX = e.clientX;
114
113
  var children = col.children,
115
- code = col.code;
114
+ code = col.code,
115
+ _col$features = col.features,
116
+ features = _col$features === void 0 ? {} : _col$features;
117
+ var minWidth = features.minWidth,
118
+ maxWidth = features.maxWidth;
119
+ var realMinSize = typeof minWidth === 'number' ? minWidth : minSize;
120
+ var realMaxSize = typeof maxWidth === 'number' ? maxWidth : maxSize;
121
+ var columnSize = pipeline.getFeatureOptions(COLUMN_SIZE_KEY);
116
122
  var recordColumnSize = columnSize;
117
123
  e.stopPropagation();
118
124
  var nextSize$ = (0, _rxjs.fromEvent)(window, 'mousemove').pipe(op.takeUntil((0, _rxjs.fromEvent)(window, 'mouseup')), op.map(function (e) {
@@ -133,17 +139,17 @@ function columnResize() {
133
139
  var currentDeltaWidth = Math.round(deltaSum * startSize / childrenWidthSum);
134
140
 
135
141
  if (index < leafChildColumns.length - 1) {
136
- nextColumnSize[code] = clamp(minSize, startSize + currentDeltaWidth, maxSize);
142
+ nextColumnSize[code] = clamp(realMinSize, startSize + currentDeltaWidth, realMaxSize);
137
143
  changedColumnSize[code] = nextColumnSize[code];
138
144
  deltaRemaining -= currentDeltaWidth;
139
145
  } else {
140
- nextColumnSize[code] = clamp(minSize, startSize + deltaRemaining, maxSize);
146
+ nextColumnSize[code] = clamp(realMinSize, startSize + deltaRemaining, realMaxSize);
141
147
  changedColumnSize[code] = nextColumnSize[code];
142
148
  }
143
149
  });
144
150
  } else {
145
151
  var startSize = columnSize[code];
146
- nextColumnSize[code] = clamp(minSize, startSize + deltaSum, maxSize);
152
+ nextColumnSize[code] = clamp(realMinSize, startSize + deltaSum, realMaxSize);
147
153
  changedColumnSize[code] = nextColumnSize[code];
148
154
  }
149
155
 
@@ -151,7 +157,15 @@ function columnResize() {
151
157
  return nextColumnSize;
152
158
  }));
153
159
  nextSize$.subscribe({
154
- next: onChangeSize,
160
+ next: function next(nextColumnSize) {
161
+ onChangeSize(nextColumnSize); // 由于COLUMN_RESIZE_KEY记录的是全量的列宽,此处记录被改变过的列宽
162
+
163
+ var resizedColumnSet = pipeline.getFeatureOptions(RESIZED_COLUMN_KEY) || new _set.default();
164
+ (0, _keys.default)(changedColumnSize).forEach(function (code) {
165
+ resizedColumnSet.add(code, changedColumnSize[code]);
166
+ });
167
+ pipeline.setFeatureOptions(RESIZED_COLUMN_KEY, resizedColumnSet);
168
+ },
155
169
  complete: function complete() {
156
170
  var _context;
157
171
 
@@ -61,6 +61,10 @@ function multiSelect() {
61
61
  /** 所有有效的 keys(disable 状态为 false) */
62
62
 
63
63
  var allKeys = [];
64
+ var set = new _set.default(value);
65
+ var isAllChecked = set.size !== 0; // 当前不存在选中则默认为false
66
+
67
+ var isAnyChecked = false;
64
68
  var flatDataSource = (0, _utils.collectNodes)(dataSource);
65
69
  flatDataSource.forEach(function (row, rowIndex) {
66
70
  var rowKey = _internals.internals.safeGetRowKey(primaryKey, row, rowIndex);
@@ -68,23 +72,24 @@ function multiSelect() {
68
72
  fullKeySet.add(rowKey); // 在 allKeys 中排除被禁用的 key
69
73
 
70
74
  if (!isDisabled(row, rowIndex)) {
71
- allKeys.push(rowKey);
75
+ allKeys.push(rowKey); // 存在一个非选中,则不再进行判断
76
+
77
+ if (isAllChecked) {
78
+ isAllChecked = set.has(rowKey);
79
+ } // 存在一个选中,则不再进行判断
80
+
81
+
82
+ if (!isAnyChecked) {
83
+ isAnyChecked = set.has(rowKey);
84
+ }
72
85
  }
73
- });
74
- var set = new _set.default(value); // todo: 暂使用hidden隐藏选择列 后续增加配置
86
+ }); // todo: 暂使用hidden隐藏选择列 后续增加配置
75
87
 
76
88
  var hiddenSelectColumn = opts.checkboxColumn && opts.checkboxColumn.hidden === true;
77
89
 
78
90
  if (!hiddenSelectColumn) {
79
91
  var _context;
80
92
 
81
- var isAllChecked = allKeys.length > 0 && allKeys.every(function (key) {
82
- return set.has(key);
83
- });
84
- var isAnyChecked = allKeys.some(function (key) {
85
- return set.has(key);
86
- });
87
-
88
93
  var defaultCheckboxColumnTitle = /*#__PURE__*/_react.default.createElement(Checkbox, {
89
94
  checked: isAllChecked,
90
95
  indeterminate: !isAllChecked && isAnyChecked,
@@ -93,16 +93,16 @@ function rangeSelection(opts) {
93
93
 
94
94
  if (clickCell) {
95
95
  if (event.shiftKey) {
96
- var _lastClickCell = pipeline.getStateAtKey(lastClickCellKey);
96
+ var _lastClickCell = pipeline.getFeatureOptions(lastClickCellKey);
97
97
 
98
98
  if (_lastClickCell) {
99
99
  setRangeSelection(_lastClickCell, clickCell);
100
100
  } else {
101
101
  // 第一次进来就按住shift键,这时候要记住点击的单元格
102
- pipeline.setStateAtKey(lastClickCellKey, clickCell);
102
+ pipeline.setFeatureOptions(lastClickCellKey, clickCell);
103
103
  }
104
104
  } else {
105
- pipeline.setStateAtKey(lastClickCellKey, clickCell);
105
+ pipeline.setFeatureOptions(lastClickCellKey, clickCell);
106
106
  setRangeSelection(clickCell, clickCell);
107
107
  }
108
108
  }
@@ -198,6 +198,10 @@ function sort() {
198
198
  return dataSource;
199
199
  }
200
200
 
201
+ if (sortMap.size === 0) {
202
+ return dataSource;
203
+ }
204
+
201
205
  var sortColumnsMap = new _map.default((0, _map2.default)(_context = (0, _filter.default)(_context2 = (0, _utils.collectNodes)(columns, 'leaf-only')).call(_context2, function (col) {
202
206
  var _a, _b;
203
207
 
@@ -318,8 +318,9 @@ function useTablePipeline(ctx) {
318
318
  state = _useState2[0],
319
319
  setState = _useState2[1];
320
320
 
321
- var ref = (0, _react.useRef)({});
322
- ref.current.featureOptions = {};
321
+ var ref = (0, _react.useRef)({
322
+ featureOptions: {}
323
+ });
323
324
  return new TablePipeline({
324
325
  state: state,
325
326
  setState: setState,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kdcloudjs/table",
3
- "version": "1.1.5-canary.9",
3
+ "version": "1.1.6-canary.1",
4
4
  "description": "金蝶 react table 组件",
5
5
  "title": "table",
6
6
  "keywords": [