@kdcloudjs/table 1.1.4-canary.2 → 1.1.5-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.
Files changed (41) hide show
  1. package/dist/@kdcloudjs/table.css +1 -1
  2. package/dist/@kdcloudjs/table.js +259 -54
  3. package/dist/@kdcloudjs/table.js.map +1 -1
  4. package/dist/@kdcloudjs/table.min.css +1 -1
  5. package/dist/@kdcloudjs/table.min.js +6 -6
  6. package/dist/@kdcloudjs/table.min.js.map +1 -1
  7. package/es/table/base/styles.d.ts +1 -0
  8. package/es/table/base/styles.js +2 -1
  9. package/es/table/base/table.js +1 -1
  10. package/es/table/base/utils.js +7 -1
  11. package/es/table/pipeline/features/colGroupExtendable.d.ts +6 -0
  12. package/es/table/pipeline/features/colGroupExtendable.js +103 -0
  13. package/es/table/pipeline/features/columnFilter.js +1 -3
  14. package/es/table/pipeline/features/filter/Filter.js +11 -2
  15. package/es/table/pipeline/features/filter/FilterPanel.js +11 -1
  16. package/es/table/pipeline/features/index.d.ts +1 -0
  17. package/es/table/pipeline/features/index.js +2 -1
  18. package/es/table/pipeline/features/rangeSelection.js +15 -3
  19. package/es/table/pipeline/features/treeMode.js +2 -1
  20. package/es/table/utils/element.d.ts +1 -0
  21. package/es/table/utils/element.js +4 -0
  22. package/es/table/utils/keyCode.d.ts +1 -0
  23. package/es/table/utils/keyCode.js +2 -1
  24. package/lib/table/base/styles.d.ts +1 -0
  25. package/lib/table/base/styles.js +2 -1
  26. package/lib/table/base/table.js +1 -1
  27. package/lib/table/base/utils.js +8 -1
  28. package/lib/table/pipeline/features/colGroupExtendable.d.ts +6 -0
  29. package/lib/table/pipeline/features/colGroupExtendable.js +124 -0
  30. package/lib/table/pipeline/features/columnFilter.js +1 -3
  31. package/lib/table/pipeline/features/filter/Filter.js +12 -2
  32. package/lib/table/pipeline/features/filter/FilterPanel.js +12 -1
  33. package/lib/table/pipeline/features/index.d.ts +1 -0
  34. package/lib/table/pipeline/features/index.js +9 -1
  35. package/lib/table/pipeline/features/rangeSelection.js +16 -3
  36. package/lib/table/pipeline/features/treeMode.js +2 -1
  37. package/lib/table/utils/element.d.ts +1 -0
  38. package/lib/table/utils/element.js +6 -0
  39. package/lib/table/utils/keyCode.d.ts +1 -0
  40. package/lib/table/utils/keyCode.js +2 -1
  41. package/package.json +1 -1
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.colGroupExtendable = void 0;
9
+
10
+ var _splice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/splice"));
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
15
+
16
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/taggedTemplateLiteral"));
17
+
18
+ var _react = _interopRequireDefault(require("react"));
19
+
20
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
21
+
22
+ var _internals = require("../../internals");
23
+
24
+ var _utils = require("../../utils");
25
+
26
+ var _classnames = _interopRequireDefault(require("classnames"));
27
+
28
+ var _styles = require("../../base/styles");
29
+
30
+ var _templateObject;
31
+
32
+ var ExtendIconStyle = _styledComponents.default.span(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n font-size:12px;\n margin-left:4px;\n"])));
33
+
34
+ var stateKey = 'colExtend';
35
+
36
+ var ExpandIcon = function ExpandIcon(_ref) {
37
+ var style = _ref.style,
38
+ className = _ref.className,
39
+ size = _ref.size,
40
+ isExtend = _ref.isExtend;
41
+ return isExtend ? /*#__PURE__*/_react.default.createElement("svg", {
42
+ className: className,
43
+ width: size,
44
+ height: size,
45
+ style: style,
46
+ viewBox: "96 96 896 896"
47
+ }, /*#__PURE__*/_react.default.createElement("path", {
48
+ d: "M678.347087 178.347087C690.550972 166.143203 690.550972 146.356797 678.347087 134.152913C666.143203 121.949029 646.356797 121.949029 634.152913 134.152913L290.402913 477.902913C278.199029 490.106797 278.199029 509.893203 290.402913 522.097087L634.152913 865.847087C646.356797 878.050972 666.143203 878.050972 678.347087 865.847087C690.550972 853.643203 690.550972 833.856797 678.347087 821.652913L356.694175 500L678.347087 178.347087z"
49
+ })) : /*#__PURE__*/_react.default.createElement("svg", {
50
+ className: className,
51
+ width: size,
52
+ height: size,
53
+ style: style,
54
+ viewBox: "96 96 896 896"
55
+ }, /*#__PURE__*/_react.default.createElement("path", {
56
+ d: "M321.652913 178.347087C309.449029 166.143203 309.449029 146.356797 321.652913 134.152913C333.856797 121.949029 353.643203 121.949029 365.847088 134.152913L709.597087 477.902913C721.800972 490.106797 721.800972 509.893203 709.597087 522.097087L365.847088 865.847087C353.643203 878.050972 333.856797 878.050972 321.652913 865.847087C309.449029 853.643203 309.449029 833.856797 321.652913 821.652913L643.305825 500L321.652913 178.347087z"
57
+ }));
58
+ };
59
+
60
+ var colGroupExtendable = function colGroupExtendable() {
61
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
62
+ return function (pipeline) {
63
+ var _a, _b;
64
+
65
+ var columns = pipeline.getColumns();
66
+ var curState = (_b = (_a = opts.extendStatus) !== null && _a !== void 0 ? _a : pipeline.getStateAtKey(stateKey)) !== null && _b !== void 0 ? _b : {};
67
+
68
+ var processColumns = function processColumns(columns) {
69
+ // 当组合列可伸缩,且处于收缩状态时,只渲染一个子列,其他不渲染
70
+ var toggle = function toggle(col) {
71
+ // 对应的 col 进行状态切换
72
+ var changedValue = (0, _defineProperty2.default)({}, col.code, !curState[col.code]);
73
+ curState[col.code] = !curState[col.code];
74
+ pipeline.setStateAtKey(stateKey, (0, _extends2.default)({}, curState));
75
+ (opts === null || opts === void 0 ? void 0 : opts.onChangeExtendStatus) && opts.onChangeExtendStatus(curState, changedValue);
76
+ };
77
+
78
+ var addIcon = function addIcon(col) {
79
+ var result = (0, _extends2.default)({}, col);
80
+
81
+ var addIconNode = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, _internals.internals.safeRenderHeader((0, _extends2.default)({}, col)), /*#__PURE__*/_react.default.createElement(ExtendIconStyle, {
82
+ onClick: function onClick() {
83
+ toggle(col);
84
+ }
85
+ }, /*#__PURE__*/_react.default.createElement(ExpandIcon, {
86
+ style: {
87
+ userSelect: 'none',
88
+ marginLeft: 2,
89
+ flexShrink: 0,
90
+ cursor: "pointer",
91
+ verticalAlign: 'middle'
92
+ },
93
+ className: (0, _classnames.default)((0, _defineProperty2.default)({}, _styles.Classes.tableExtendIcon, true)),
94
+ size: 16,
95
+ isExtend: curState[col.code]
96
+ })));
97
+
98
+ result.title = addIconNode;
99
+ return result;
100
+ };
101
+
102
+ return (0, _utils.makeRecursiveMapper)(function (col) {
103
+ var _a;
104
+
105
+ var _ref2 = (col === null || col === void 0 ? void 0 : col.features) || {},
106
+ showExtendIcon = _ref2.showExtendIcon;
107
+
108
+ if (showExtendIcon === true && ((_a = col.children) === null || _a === void 0 ? void 0 : _a.length) > 1) {
109
+ var _context;
110
+
111
+ col = addIcon(col);
112
+ curState[col.code] === false && (0, _splice.default)(_context = col.children).call(_context, 1, col.children.length);
113
+ }
114
+
115
+ return col;
116
+ })(columns);
117
+ };
118
+
119
+ pipeline.columns(processColumns(columns));
120
+ return pipeline;
121
+ };
122
+ };
123
+
124
+ exports.colGroupExtendable = colGroupExtendable;
@@ -106,9 +106,7 @@ function filter() {
106
106
 
107
107
  var filterPanel = (_d = col.features) === null || _d === void 0 ? void 0 : _d.filterPanel;
108
108
  var colFilterIcon = (_f = (_e = col.features) === null || _e === void 0 ? void 0 : _e.filterIcon) !== null && _f !== void 0 ? _f : filterIcon;
109
- result.title = (0, _concat.default)(_context = []).call(_context, (0, _toConsumableArray2.default)((0, _concat.default)(_context2 = []).call(_context2, (_g = result.title) !== null && _g !== void 0 ? _g : [_internals.internals.safeRenderHeader((0, _extends2.default)((0, _extends2.default)({}, col), {
110
- title: null
111
- }))])), [/*#__PURE__*/_react.default.createElement(_filter2.Filter, {
109
+ result.title = (0, _concat.default)(_context = []).call(_context, (0, _toConsumableArray2.default)((0, _concat.default)(_context2 = []).call(_context2, (_g = result.title) !== null && _g !== void 0 ? _g : [_internals.internals.safeRenderHeader((0, _extends2.default)({}, col))])), [/*#__PURE__*/_react.default.createElement(_filter2.Filter, {
112
110
  key: "filter",
113
111
  FilterPanelContent: filterPanel,
114
112
  filterIcon: colFilterIcon,
@@ -25,6 +25,8 @@ var _reactDom = require("react-dom");
25
25
 
26
26
  var _styledComponents = _interopRequireDefault(require("styled-components"));
27
27
 
28
+ var _classnames = _interopRequireDefault(require("classnames"));
29
+
28
30
  var _styles = require("../../../base/styles");
29
31
 
30
32
  var _FilterPanel = _interopRequireDefault(require("./FilterPanel"));
@@ -37,7 +39,7 @@ var _utils = require("../../../utils");
37
39
 
38
40
  var _utils2 = require("../../../base/utils");
39
41
 
40
- var _classnames = _interopRequireDefault(require("classnames"));
42
+ var _keyCode = _interopRequireDefault(require("../../../utils/keyCode"));
41
43
 
42
44
  var _templateObject;
43
45
 
@@ -152,13 +154,21 @@ function Filter(_ref2) {
152
154
  setShowPanel(true);
153
155
  };
154
156
 
157
+ var handleKeyDown = function handleKeyDown(e) {
158
+ if (e.currentTarget.contains(e.target) && e.keyCode === _keyCode.default.ESC) {
159
+ setShowPanel(false);
160
+ }
161
+ };
162
+
155
163
  var iconClassName = (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, className, true), (0, _defineProperty2.default)(_cx, 'filter-panel-open', showPanel), _cx));
156
164
  var displayFilterIcon = typeof filterIcon === 'function' ? filterIcon(isFilterActive) : filterIcon;
157
165
  return /*#__PURE__*/_react.default.createElement(FilterIconSpanStyle, {
158
166
  style: style,
159
167
  className: iconClassName,
160
168
  onClick: handleIconClick,
161
- ref: iconWrapRef
169
+ onKeyDown: handleKeyDown,
170
+ ref: iconWrapRef,
171
+ tabIndex: -1
162
172
  }, /*#__PURE__*/_react.default.createElement("span", {
163
173
  ref: iconRef,
164
174
  className: _styles.Classes.filterIcon
@@ -29,6 +29,8 @@ var _DefaultFilterIcon = _interopRequireDefault(require("./DefaultFilterIcon"));
29
29
 
30
30
  var _styles = require("../../../base/styles");
31
31
 
32
+ var _keyCode = _interopRequireDefault(require("../../../utils/keyCode"));
33
+
32
34
  var _templateObject;
33
35
 
34
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -91,6 +93,13 @@ function FilterPanel(_ref) {
91
93
  !isContainPanel(e) && !hasPopupMouseEvent.current && onClose();
92
94
  hasPopupMouseEvent.current = false;
93
95
  }, ['click']);
96
+
97
+ var handleKeyDown = function handleKeyDown(e) {
98
+ if (e.currentTarget.contains(e.target) && e.keyCode === _keyCode.default.ESC) {
99
+ onClose();
100
+ }
101
+ };
102
+
94
103
  return /*#__PURE__*/_react.default.createElement(FilterPanelStyle, {
95
104
  className: _styles.Classes.popup,
96
105
  style: (0, _extends2.default)((0, _extends2.default)({}, style), {
@@ -100,7 +109,9 @@ function FilterPanel(_ref) {
100
109
  }),
101
110
  onMouseDown: handleMouseEvent,
102
111
  onMouseUp: handleMouseEvent,
103
- ref: ref
112
+ onKeyDown: handleKeyDown,
113
+ ref: ref,
114
+ tabIndex: -1
104
115
  }, !hideFilterPopupHeader ? /*#__PURE__*/_react.default.createElement("div", {
105
116
  className: _styles.Classes.popupHeader
106
117
  }, /*#__PURE__*/_react.default.createElement("span", {
@@ -17,3 +17,4 @@ export { filter, FilterFeatureOptions } from './columnFilter';
17
17
  export { rangeSelection, RangeSelectionFeatureOptions } from './rangeSelection';
18
18
  export { mergeCellHover } from './mergeCellHover';
19
19
  export { footerDataSource, FooterDataSourceFeatureOptions, footerRowMetaSymbol } from './footerDataSource';
20
+ export { colGroupExtendable, colGroupExtendOption } from './colGroupExtendable';
@@ -19,6 +19,12 @@ Object.defineProperty(exports, "buildTree", {
19
19
  return _buildTree.buildTree;
20
20
  }
21
21
  });
22
+ Object.defineProperty(exports, "colGroupExtendable", {
23
+ enumerable: true,
24
+ get: function get() {
25
+ return _colGroupExtendable.colGroupExtendable;
26
+ }
27
+ });
22
28
  Object.defineProperty(exports, "columnDrag", {
23
29
  enumerable: true,
24
30
  get: function get() {
@@ -170,4 +176,6 @@ var _rangeSelection = require("./rangeSelection");
170
176
 
171
177
  var _mergeCellHover = require("./mergeCellHover");
172
178
 
173
- var _footerDataSource = require("./footerDataSource");
179
+ var _footerDataSource = require("./footerDataSource");
180
+
181
+ var _colGroupExtendable = require("./colGroupExtendable");
@@ -21,6 +21,8 @@ var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-
21
21
 
22
22
  var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
23
23
 
24
+ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
25
+
24
26
  var _utils = require("../../utils");
25
27
 
26
28
  var _others = require("../../utils/others");
@@ -159,14 +161,14 @@ function rangeSelection(opts) {
159
161
 
160
162
  if ((e.ctrlKey || e.metaKey) && e.key === 'a') {
161
163
  var rowLen = pipeline.getDataSource().length;
162
- var footerDataSource = pipeline.getFooterDataSource() || [];
164
+ var footerDataSource = pipeline.getFooterDataSource() || []; // 焦点位于可编辑的单元格内不做全选
163
165
 
164
- if (columns.length && rowLen) {
166
+ if (columns.length && rowLen && !getElementEditable(e.target)) {
165
167
  opts.preventkDefaultOfKeyDownEvent !== false && e.preventDefault();
166
168
  rangeSelectedChange({
167
169
  startRow: 0,
168
170
  endRow: rowLen - 1,
169
- columns: columns,
171
+ columns: (0, _utils.collectNodes)(columns, 'leaf-only'),
170
172
  startColumn: columns[0],
171
173
  footerRowRange: footerDataSource.length > 0 ? {
172
174
  startRow: 0,
@@ -383,4 +385,15 @@ function getFooterRowIndex(footerRowRange) {
383
385
  startRowIndex: -1,
384
386
  endRowIndex: -1
385
387
  };
388
+ }
389
+
390
+ function getElementEditable(target) {
391
+ var _context2;
392
+
393
+ if (!target) return;
394
+
395
+ if ((0, _includes.default)(_context2 = ['input', 'textarea']).call(_context2, target.tagName.toLowerCase())) {
396
+ if (target.type === 'checkbox') return;
397
+ return !target.disabled && !target.readOnly;
398
+ }
386
399
  }
@@ -251,7 +251,8 @@ function treeMode() {
251
251
  columns[expandColIndex] = (0, _extends3.default)((0, _extends3.default)({}, expandCol), {
252
252
  title: /*#__PURE__*/_react.default.createElement("span", {
253
253
  style: {
254
- marginLeft: iconIndent + iconWidth + iconGap
254
+ marginLeft: iconIndent + iconWidth + iconGap,
255
+ display: 'flex'
255
256
  }
256
257
  }, _internals.internals.safeRenderHeader(expandCol)),
257
258
  render: render,
@@ -39,4 +39,5 @@ export declare function keepWithinBounds(popupParent: HTMLElement, popup: HTMLEl
39
39
  x: number;
40
40
  y: number;
41
41
  };
42
+ export declare function hasScroll(ele: HTMLElement, isHorizontal?: boolean): boolean;
42
43
  export {};
@@ -7,6 +7,7 @@ exports.calculatePointerRelative = calculatePointerRelative;
7
7
  exports.calculatePopupRelative = calculatePopupRelative;
8
8
  exports.getEventPath = getEventPath;
9
9
  exports.getTargetEleInEventPath = getTargetEleInEventPath;
10
+ exports.hasScroll = hasScroll;
10
11
  exports.isElementInEventPath = isElementInEventPath;
11
12
  exports.keepWithinBounds = keepWithinBounds;
12
13
 
@@ -240,4 +241,9 @@ function keepWithinBounds(popupParent, popup, x, y, isPerfect) {
240
241
  x: x,
241
242
  y: y
242
243
  };
244
+ }
245
+
246
+ function hasScroll(ele) {
247
+ var isHorizontal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
248
+ return isHorizontal ? ele.scrollWidth > ele.clientWidth : ele.scrollHeight > ele.clientHeight;
243
249
  }
@@ -1,4 +1,5 @@
1
1
  declare const KeyCode: {
2
2
  ENTER: number;
3
+ ESC: number;
3
4
  };
4
5
  export default KeyCode;
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var KeyCode = {
8
- ENTER: 13
8
+ ENTER: 13,
9
+ ESC: 27
9
10
  };
10
11
  var _default = KeyCode;
11
12
  exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kdcloudjs/table",
3
- "version": "1.1.4-canary.2",
3
+ "version": "1.1.5-canary.1",
4
4
  "description": "金蝶 react table 组件",
5
5
  "title": "table",
6
6
  "keywords": [