@kdcloudjs/table 1.1.5-canary.1 → 1.1.5-canary.10

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 (39) hide show
  1. package/dist/@kdcloudjs/table.css +1 -1
  2. package/dist/@kdcloudjs/table.js +74 -65
  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 +7 -7
  6. package/dist/@kdcloudjs/table.min.js.map +1 -1
  7. package/es/table/base/styles.js +2 -2
  8. package/es/table/base/table.d.ts +1 -1
  9. package/es/table/base/table.js +3 -2
  10. package/es/table/common-views.js +1 -1
  11. package/es/table/pipeline/features/colGroupExtendable.d.ts +2 -0
  12. package/es/table/pipeline/features/colGroupExtendable.js +5 -3
  13. package/es/table/pipeline/features/columnFilter.d.ts +5 -1
  14. package/es/table/pipeline/features/columnFilter.js +6 -2
  15. package/es/table/pipeline/features/contextMenu.d.ts +5 -1
  16. package/es/table/pipeline/features/contextMenu.js +18 -28
  17. package/es/table/pipeline/features/filter/DefaultFilterContent.js +5 -5
  18. package/es/table/pipeline/features/filter/Filter.d.ts +3 -1
  19. package/es/table/pipeline/features/filter/Filter.js +21 -12
  20. package/es/table/pipeline/features/rangeSelection.js +10 -0
  21. package/es/table/pipeline/pipeline.d.ts +0 -4
  22. package/es/table/pipeline/pipeline.js +4 -10
  23. package/lib/table/base/styles.js +2 -2
  24. package/lib/table/base/table.d.ts +1 -1
  25. package/lib/table/base/table.js +3 -2
  26. package/lib/table/common-views.js +1 -1
  27. package/lib/table/pipeline/features/colGroupExtendable.d.ts +2 -0
  28. package/lib/table/pipeline/features/colGroupExtendable.js +5 -3
  29. package/lib/table/pipeline/features/columnFilter.d.ts +5 -1
  30. package/lib/table/pipeline/features/columnFilter.js +6 -2
  31. package/lib/table/pipeline/features/contextMenu.d.ts +5 -1
  32. package/lib/table/pipeline/features/contextMenu.js +17 -28
  33. package/lib/table/pipeline/features/filter/DefaultFilterContent.js +5 -5
  34. package/lib/table/pipeline/features/filter/Filter.d.ts +3 -1
  35. package/lib/table/pipeline/features/filter/Filter.js +21 -12
  36. package/lib/table/pipeline/features/rangeSelection.js +10 -0
  37. package/lib/table/pipeline/pipeline.d.ts +0 -4
  38. package/lib/table/pipeline/pipeline.js +4 -11
  39. package/package.json +1 -1
@@ -81,7 +81,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
81
81
 
82
82
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
83
83
 
84
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
84
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
85
85
 
86
86
  function _unsupportedIterableToArray(o, minLen) { var _context2; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty2(_context2 = Object.prototype.toString.call(o)).call(_context2, 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); }
87
87
 
@@ -543,7 +543,7 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
543
543
  }, {
544
544
  key: "componentDidMount",
545
545
  value: function componentDidMount() {
546
- var _a, _b, _c, _d; // console.log('did mount start')
546
+ var _a, _b, _c, _d, _e, _f; // console.log('did mount start')
547
547
  // console.log('update dom helper start')
548
548
 
549
549
 
@@ -564,6 +564,7 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
564
564
  });
565
565
  (_b = (_a = this.props).setTableWidth) === null || _b === void 0 ? void 0 : _b.call(_a, this.domHelper.tableBody.clientWidth);
566
566
  (_d = (_c = this.props).setTableDomHelper) === null || _d === void 0 ? void 0 : _d.call(_c, this.domHelper);
567
+ (_f = (_e = this.props).setRowHeightManager) === null || _f === void 0 ? void 0 : _f.call(_e, this.rowHeightManager);
567
568
  }
568
569
  }, {
569
570
  key: "componentDidUpdate",
@@ -85,6 +85,6 @@ var icons = {
85
85
  };
86
86
  exports.icons = icons;
87
87
 
88
- var ContextMenuStyleWrap = _styledComponents.default.div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n &.", "{\n border: 1px solid #e9ecf1;\n border-radius: 2px;\n background-color: #Fff;\n box-shadow: 0px 0px 5px 0px rgb(154 154 154 / 50%);\n cursor: default;\n font-size: 13px;\n position:absolute;\n z-index: 1050;\n width:120px;\n }\n\n .", "{\n width:100%;\n display: table;\n }\n\n .", " .", "{\n display: table-row;\n color: #666666;\n }\n\n .", " .", "{\n background-color: #f5f5f5;\n }\n\n .", " .", " .", "{\n display: table-cell;\n padding: 5px 8px;\n }\n .", " .", ".", "{\n opacity: .5;\n }\n\n"])), _styles.MenuClasses.menu, _styles.MenuClasses.menuList, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOption, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOptionActive, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOption, _styles.MenuClasses.menuOptionText, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOption, _styles.MenuClasses.menuOptionDisable);
88
+ var ContextMenuStyleWrap = _styledComponents.default.div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n &.", "{\n border: 1px solid #e9ecf1;\n border-radius: 2px;\n background-color: #Fff;\n box-shadow: 0px 0px 5px 0px rgb(154 154 154 / 50%);\n cursor: default;\n font-size: 12px;\n position:absolute;\n z-index: 1050;\n max-width: 600px;\n padding: 8px 0;\n }\n\n .", "{\n width:100%;\n display: table;\n }\n\n .", " .", "{\n display: table-row;\n color: #212121;\n }\n\n .", " .", "{\n background-color: var(--hover-bgcolor);\n }\n\n .", " .", " .", "{\n display: table-cell;\n padding: 8px 12px;\n max-width: 576px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n line-height: 16px;\n }\n .", " .", ".", "{\n opacity: .5;\n }\n\n"])), _styles.MenuClasses.menu, _styles.MenuClasses.menuList, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOption, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOptionActive, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOption, _styles.MenuClasses.menuOptionText, _styles.MenuClasses.menuList, _styles.MenuClasses.menuOption, _styles.MenuClasses.menuOptionDisable);
89
89
 
90
90
  exports.ContextMenuStyleWrap = ContextMenuStyleWrap;
@@ -1,6 +1,8 @@
1
1
  import { TablePipeline } from "../pipeline";
2
+ import { ReactNode } from 'react';
2
3
  export interface colGroupExtendOption {
3
4
  onChangeExtendStatus?({}: any, {}: any): void;
4
5
  extendStatus?: {};
6
+ extendIcon?: ReactNode | ((extendStatus: boolean) => ReactNode);
5
7
  }
6
8
  export declare const colGroupExtendable: (opts?: colGroupExtendOption) => (pipeline: TablePipeline) => TablePipeline;
@@ -77,12 +77,14 @@ var colGroupExtendable = function colGroupExtendable() {
77
77
 
78
78
  var addIcon = function addIcon(col) {
79
79
  var result = (0, _extends2.default)({}, col);
80
+ var curColState = curState[col.code];
81
+ var displaycolExtendIcon = typeof opts.extendIcon === 'function' ? opts.extendIcon(curColState) : opts.extendIcon;
80
82
 
81
83
  var addIconNode = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, _internals.internals.safeRenderHeader((0, _extends2.default)({}, col)), /*#__PURE__*/_react.default.createElement(ExtendIconStyle, {
82
84
  onClick: function onClick() {
83
85
  toggle(col);
84
86
  }
85
- }, /*#__PURE__*/_react.default.createElement(ExpandIcon, {
87
+ }, displaycolExtendIcon || /*#__PURE__*/_react.default.createElement(ExpandIcon, {
86
88
  style: {
87
89
  userSelect: 'none',
88
90
  marginLeft: 2,
@@ -91,8 +93,8 @@ var colGroupExtendable = function colGroupExtendable() {
91
93
  verticalAlign: 'middle'
92
94
  },
93
95
  className: (0, _classnames.default)((0, _defineProperty2.default)({}, _styles.Classes.tableExtendIcon, true)),
94
- size: 16,
95
- isExtend: curState[col.code]
96
+ size: 14,
97
+ isExtend: curColState
96
98
  })));
97
99
 
98
100
  result.title = addIconNode;
@@ -16,7 +16,11 @@ export interface FilterFeatureOptions {
16
16
  filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);
17
17
  /** 是否对触发弹出过滤面板 的 click 事件调用 event.stopPropagation() */
18
18
  stopClickEventPropagation?: boolean;
19
- /** 是否隐藏过滤弹出菜单header区域 */
19
+ /** 是否对按ESC键时关闭面板的 keydown 事件调用 event.stopPropagation() */
20
+ stopESCKeyDownEventPropagation?: boolean;
21
+ /** 是否隐藏过滤面板的header区域 */
20
22
  hideFilterPopupHeader?: boolean;
23
+ /** 指定过滤面板渲染的父节点 */
24
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
21
25
  }
22
26
  export declare function filter(opts?: FilterFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
@@ -55,7 +55,9 @@ function filter() {
55
55
  mode = opts.mode,
56
56
  filterIcon = opts.filterIcon,
57
57
  stopClickEventPropagation = opts.stopClickEventPropagation,
58
- hideFilterPopupHeader = opts.hideFilterPopupHeader;
58
+ stopESCKeyDownEventPropagation = opts.stopESCKeyDownEventPropagation,
59
+ hideFilterPopupHeader = opts.hideFilterPopupHeader,
60
+ getPopupParent = opts.getPopupParent;
59
61
  var inputFilters = (_b = (_a = filters !== null && filters !== void 0 ? filters : pipeline.getStateAtKey(stateKey)) !== null && _a !== void 0 ? _a : defaultFilters) !== null && _b !== void 0 ? _b : [];
60
62
  inputFilters = mode === 'single' ? (0, _slice.default)(inputFilters).call(inputFilters, 0, 1) : inputFilters;
61
63
  var inputFiltersMap = new _map.default((0, _map2.default)(inputFilters).call(inputFilters, function (filterItem) {
@@ -116,7 +118,9 @@ function filter() {
116
118
  isFilterActive: filterActive,
117
119
  className: (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, _styles.Classes.tableFilterTrigger, true), (0, _defineProperty2.default)(_cx, "active", filterActive), _cx)),
118
120
  stopClickEventPropagation: stopClickEventPropagation,
119
- hideFilterPopupHeader: hideFilterPopupHeader
121
+ stopESCKeyDownEventPropagation: stopESCKeyDownEventPropagation,
122
+ hideFilterPopupHeader: hideFilterPopupHeader,
123
+ getPopupParent: getPopupParent
120
124
  })]); // result.headerCellProps = mergeCellProps(col.headerCellProps, {
121
125
  // style: {
122
126
  // paddingRight: '18px'
@@ -1,14 +1,18 @@
1
1
  import { TablePipeline } from '../pipeline';
2
2
  interface ContextMenuItem {
3
+ key?: string;
3
4
  name: string;
4
- action: () => {};
5
+ action: () => void;
5
6
  disabled?: boolean;
7
+ className?: string;
6
8
  }
7
9
  export interface ContextMenuFeatureOptions {
8
10
  /** 获得自定义菜单 */
9
11
  getContextMenuItems?: (params: any) => ContextMenuItem[];
10
12
  /** 弹出框的父容器 */
11
13
  popupParent?: HTMLElement;
14
+ /** 右键菜单className */
15
+ menuClassName?: string;
12
16
  }
13
17
  export declare function contextMenu(opts?: ContextMenuFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
14
18
  export {};
@@ -43,12 +43,11 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
43
43
 
44
44
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
45
 
46
- var stateKey = 'contextMenu';
47
-
48
46
  function contextMenu() {
49
47
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
50
48
  return function step(pipeline) {
51
49
  var popupParent = opts.popupParent || document.body;
50
+ var menuClassName = opts.menuClassName;
52
51
  var menuHelper = new MenuHelper();
53
52
 
54
53
  var addPopup = function addPopup(menu) {
@@ -82,13 +81,11 @@ function contextMenu() {
82
81
  };
83
82
 
84
83
  var onContextMenu = function onContextMenu(e) {
85
- if (suppressShowContextMenu(e)) {
86
- return;
84
+ if (canShowContextMenu(e, pipeline)) {
85
+ e.preventDefault();
86
+ e.stopPropagation();
87
+ showContextMenu(e);
87
88
  }
88
-
89
- e.preventDefault();
90
- e.stopPropagation();
91
- showContextMenu(e);
92
89
  };
93
90
 
94
91
  pipeline.addTableProps({
@@ -162,7 +159,8 @@ function contextMenu() {
162
159
  options: options,
163
160
  hideContextMenu: hideContextMenu,
164
161
  position: position,
165
- getPopupParent: getPopupParent
162
+ getPopupParent: getPopupParent,
163
+ className: menuClassName
166
164
  });
167
165
 
168
166
  var _hidePopup = addPopup(menu);
@@ -195,7 +193,8 @@ function getMenuItemKey(_ref) {
195
193
  }
196
194
 
197
195
  function Menu(props) {
198
- var _props$options = props.options,
196
+ var className = props.className,
197
+ _props$options = props.options,
199
198
  options = _props$options === void 0 ? [] : _props$options,
200
199
  hideContextMenu = props.hideContextMenu,
201
200
  position = props.position,
@@ -216,7 +215,7 @@ function Menu(props) {
216
215
  }
217
216
  }, [position]);
218
217
  return /*#__PURE__*/_react.default.createElement(_commonViews.ContextMenuStyleWrap, {
219
- className: _styles.MenuClasses.menu,
218
+ className: (0, _classnames.default)(_styles.MenuClasses.menu, className),
220
219
  ref: menuRef,
221
220
  style: {
222
221
  left: position.x,
@@ -232,6 +231,7 @@ function Menu(props) {
232
231
  }),
233
232
  name: item.name,
234
233
  action: item.action,
234
+ className: item.className,
235
235
  disabled: item.disabled,
236
236
  hideContextMenu: hideContextMenu
237
237
  });
@@ -241,6 +241,7 @@ function Menu(props) {
241
241
  function MenuItem(props) {
242
242
  var name = props.name,
243
243
  action = props.action,
244
+ className = props.className,
244
245
  disabled = props.disabled,
245
246
  hideContextMenu = props.hideContextMenu;
246
247
  var itemRef = (0, _react.useRef)();
@@ -281,7 +282,7 @@ function MenuItem(props) {
281
282
  };
282
283
 
283
284
  return /*#__PURE__*/_react.default.createElement("div", {
284
- className: (0, _classnames.default)(_styles.MenuClasses.menuOption, (0, _defineProperty2.default)({}, _styles.MenuClasses.menuOptionDisable, disabled)),
285
+ className: (0, _classnames.default)(_styles.MenuClasses.menuOption, className, (0, _defineProperty2.default)({}, _styles.MenuClasses.menuOptionDisable, disabled)),
285
286
  ref: itemRef,
286
287
  onClick: handleClick,
287
288
  onMouseEnter: handleMouseEnter,
@@ -424,24 +425,12 @@ function isElementInsideTheFooter(ele) {
424
425
  }
425
426
 
426
427
  return false;
427
- } // 禁止弹出右键菜单
428
-
429
-
430
- function suppressShowContextMenu(e) {
431
- var path = (0, _utils.getEventPath)(e.nativeEvent);
432
- var pointIndex = 0;
433
-
434
- while (pointIndex < path.length) {
435
- var ele = path[pointIndex];
436
-
437
- if (ele.classList.contains(_styles.Classes.tableBody) || ele.classList.contains(_styles.Classes.tableFooter)) {
438
- return false;
439
- }
428
+ }
440
429
 
441
- pointIndex++;
442
- }
430
+ function canShowContextMenu(e, pipeline) {
431
+ var _a, _b;
443
432
 
444
- return true;
433
+ return ((_a = pipeline.ref.current.domHelper) === null || _a === void 0 ? void 0 : _a.tableBody.contains(e.target)) || ((_b = pipeline.ref.current.domHelper) === null || _b === void 0 ? void 0 : _b.tableFooter.contains(e.target));
445
434
  } // 默认选项
446
435
 
447
436
 
@@ -55,7 +55,7 @@ function DefaultFilterContent(_ref) {
55
55
  selectedValue = _React$useState2[0],
56
56
  setSelectedValue = _React$useState2[1];
57
57
 
58
- var _React$useState3 = _react.default.useState((filterModel === null || filterModel === void 0 ? void 0 : (0, _filter.default)(filterModel)) || ''),
58
+ var _React$useState3 = _react.default.useState((filterModel === null || filterModel === void 0 ? void 0 : (0, _filter.default)(filterModel)) || []),
59
59
  _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
60
60
  innerValue = _React$useState4[0],
61
61
  setInnerValue = _React$useState4[1];
@@ -74,7 +74,7 @@ function DefaultFilterContent(_ref) {
74
74
  var confirm = function confirm() {
75
75
  hidePanel();
76
76
  setFilterModel({
77
- filter: [innerValue],
77
+ filter: innerValue,
78
78
  filterCondition: selectedValue
79
79
  });
80
80
  };
@@ -87,7 +87,7 @@ function DefaultFilterContent(_ref) {
87
87
 
88
88
  (0, _react.useEffect)(function () {
89
89
  setSelectedValue((filterModel === null || filterModel === void 0 ? void 0 : filterModel.filterCondition) || 'contain');
90
- setInnerValue((filterModel === null || filterModel === void 0 ? void 0 : (0, _filter.default)(filterModel)) || '');
90
+ setInnerValue((filterModel === null || filterModel === void 0 ? void 0 : (0, _filter.default)(filterModel)) || []);
91
91
  }, [filterModel]);
92
92
  (0, _react.useEffect)(function () {
93
93
  // 兼容设置焦点后发生滚动
@@ -117,9 +117,9 @@ function DefaultFilterContent(_ref) {
117
117
  className: 'filter-search'
118
118
  }, /*#__PURE__*/_react.default.createElement("input", {
119
119
  className: 'filter-search-inner',
120
- value: innerValue,
120
+ value: innerValue[0],
121
121
  onChange: function onChange(e) {
122
- setInnerValue(e.target.value);
122
+ setInnerValue([e.target.value]);
123
123
  },
124
124
  onKeyDown: handleKeyDown,
125
125
  ref: inputRef
@@ -12,7 +12,9 @@ interface FilterProps {
12
12
  setFilter: CustomeFilterPanelProps['setFilter'];
13
13
  onClick?: (e: React.MouseEvent) => any;
14
14
  stopClickEventPropagation?: boolean;
15
+ stopESCKeyDownEventPropagation?: boolean;
15
16
  hideFilterPopupHeader?: boolean;
17
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
16
18
  }
17
- declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, hideFilterPopupHeader }: FilterProps): JSX.Element;
19
+ declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, stopESCKeyDownEventPropagation, hideFilterPopupHeader, getPopupParent }: FilterProps): JSX.Element;
18
20
  export default Filter;
@@ -58,11 +58,12 @@ function Panel(_ref) {
58
58
  filterIcon = _ref.filterIcon,
59
59
  hidePanel = _ref.hidePanel,
60
60
  renderPanelContent = _ref.renderPanelContent,
61
- hideFilterPopupHeader = _ref.hideFilterPopupHeader;
61
+ hideFilterPopupHeader = _ref.hideFilterPopupHeader,
62
+ popupParent = _ref.popupParent;
62
63
 
63
64
  var filterPanelRef = _react.default.useRef(null);
64
65
 
65
- var _React$useState = _react.default.useState((0, _utils.calculatePopupRelative)(ele, document.body, _getPanelOffset(ele, hideFilterPopupHeader))),
66
+ var _React$useState = _react.default.useState((0, _utils.calculatePopupRelative)(ele, popupParent, _getPanelOffset(ele, hideFilterPopupHeader))),
66
67
  _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
67
68
  position = _React$useState2[0],
68
69
  setPosition = _React$useState2[1];
@@ -73,7 +74,7 @@ function Panel(_ref) {
73
74
  };
74
75
 
75
76
  var handleFilterPanelResize = function handleFilterPanelResize(resize) {
76
- setPosition((0, _utils.calculatePopupRelative)(ele, document.body, _getPanelOffset(ele, hideFilterPopupHeader)));
77
+ setPosition((0, _utils.calculatePopupRelative)(ele, popupParent, _getPanelOffset(ele, hideFilterPopupHeader)));
77
78
  };
78
79
 
79
80
  (0, _react.useEffect)(function () {
@@ -107,7 +108,9 @@ function Filter(_ref2) {
107
108
  filterModel = _ref2.filterModel,
108
109
  isFilterActive = _ref2.isFilterActive,
109
110
  stopClickEventPropagation = _ref2.stopClickEventPropagation,
110
- hideFilterPopupHeader = _ref2.hideFilterPopupHeader;
111
+ stopESCKeyDownEventPropagation = _ref2.stopESCKeyDownEventPropagation,
112
+ hideFilterPopupHeader = _ref2.hideFilterPopupHeader,
113
+ getPopupParent = _ref2.getPopupParent;
111
114
 
112
115
  var _React$useState3 = _react.default.useState(false),
113
116
  _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
@@ -143,25 +146,30 @@ function Filter(_ref2) {
143
146
  var handleIconClick = function handleIconClick(e) {
144
147
  // 只有当icon区域点击会触发面板展开
145
148
  // 防止 createPortal 区域的点击触发该事件
146
- if (!e.currentTarget.contains(e.target)) {
147
- return;
149
+ if (e.currentTarget.contains(e.target)) {
150
+ setShowPanel(true);
148
151
  }
149
152
 
150
153
  if (stopClickEventPropagation) {
151
154
  e.stopPropagation();
152
155
  }
153
-
154
- setShowPanel(true);
155
156
  };
156
157
 
157
158
  var handleKeyDown = function handleKeyDown(e) {
158
- if (e.currentTarget.contains(e.target) && e.keyCode === _keyCode.default.ESC) {
159
- setShowPanel(false);
159
+ if (e.keyCode === _keyCode.default.ESC) {
160
+ if (e.currentTarget.contains(e.target)) {
161
+ setShowPanel(false);
162
+ }
163
+
164
+ if (stopESCKeyDownEventPropagation) {
165
+ e.stopPropagation();
166
+ }
160
167
  }
161
168
  };
162
169
 
163
170
  var iconClassName = (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, className, true), (0, _defineProperty2.default)(_cx, 'filter-panel-open', showPanel), _cx));
164
171
  var displayFilterIcon = typeof filterIcon === 'function' ? filterIcon(isFilterActive) : filterIcon;
172
+ var popupParent = (getPopupParent === null || getPopupParent === void 0 ? void 0 : getPopupParent(iconWrapRef.current)) || document.body;
165
173
  return /*#__PURE__*/_react.default.createElement(FilterIconSpanStyle, {
166
174
  style: style,
167
175
  className: iconClassName,
@@ -180,8 +188,9 @@ function Filter(_ref2) {
180
188
  filterIcon: displayFilterIcon,
181
189
  hidePanel: hidePanel,
182
190
  renderPanelContent: renderPanelContent,
183
- hideFilterPopupHeader: hideFilterPopupHeader
184
- }), document.body));
191
+ hideFilterPopupHeader: hideFilterPopupHeader,
192
+ popupParent: popupParent
193
+ }), popupParent));
185
194
  }
186
195
 
187
196
  function _getPanelOffset(ele, hideFilterPopupHeader) {
@@ -45,6 +45,7 @@ function rangeSelection(opts) {
45
45
  var SCROLL_SIZE = 30;
46
46
  var tableBody = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.tableBody;
47
47
  var tableFooter = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.tableFooter;
48
+ var artTable = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.artTable;
48
49
 
49
50
  if (!tableBody) {
50
51
  return pipeline;
@@ -76,6 +77,13 @@ function rangeSelection(opts) {
76
77
  startColumn: startDragCell.column,
77
78
  footerRowRange: footerRowRange
78
79
  };
80
+
81
+ if (isCellRangeSingleCell(rangeSelection)) {
82
+ artTable.classList.remove((0, _classnames.default)(_styles.Classes.rangeSelection));
83
+ } else {
84
+ artTable.classList.add((0, _classnames.default)(_styles.Classes.rangeSelection));
85
+ }
86
+
79
87
  rangeSelectedChange(rangeSelection);
80
88
  };
81
89
 
@@ -105,6 +113,7 @@ function rangeSelection(opts) {
105
113
  // shift + 点击选中
106
114
 
107
115
  shiftKeySelect(mouseDownEvent);
116
+ if (mouseDownEvent.shiftKey) return;
108
117
  var target = mouseDownEvent.target;
109
118
  var startDragCell = getTargetCell(target, columns);
110
119
  var mousemove$ = (0, _rxjs.fromEvent)(window, 'mousemove');
@@ -165,6 +174,7 @@ function rangeSelection(opts) {
165
174
 
166
175
  if (columns.length && rowLen && !getElementEditable(e.target)) {
167
176
  opts.preventkDefaultOfKeyDownEvent !== false && e.preventDefault();
177
+ artTable.classList.add((0, _classnames.default)(_styles.Classes.rangeSelection));
168
178
  rangeSelectedChange({
169
179
  startRow: 0,
170
180
  endRow: rowLen - 1,
@@ -88,10 +88,6 @@ export declare class TablePipeline {
88
88
  setFeatureOptions(optionKey: string, value: any): void;
89
89
  /** 获取 BaseTable 的 props,结果中包含 dataSource/columns/primaryKey/getRowProps 四个字段 */
90
90
  getProps(this: TablePipeline): TableProps;
91
- /**
92
- * 清除范围选中内容
93
- */
94
- clearRangeSelection(): void;
95
91
  }
96
92
  export declare function useTablePipeline(ctx?: Partial<TablePipelineCtx>): TablePipeline;
97
93
  export {};
@@ -28,8 +28,6 @@ var _utils = require("../utils");
28
28
 
29
29
  var _autoFill = require("./features/autoFill");
30
30
 
31
- var _rangeSelection = require("./features/rangeSelection");
32
-
33
31
  /**
34
32
  * 表格数据处理流水线。TablePipeline 提供了表格数据处理过程中的一些上下方与工具方法,包括……
35
33
  *
@@ -296,16 +294,11 @@ var TablePipeline = /*#__PURE__*/function () {
296
294
  _this2.ref.current.domHelper = domHelper;
297
295
  };
298
296
 
299
- return result;
300
- }
301
- /**
302
- * 清除范围选中内容
303
- */
297
+ result.setRowHeightManager = function (rowHeightManager) {
298
+ _this2.ref.current.rowHeightManager = rowHeightManager;
299
+ };
304
300
 
305
- }, {
306
- key: "clearRangeSelection",
307
- value: function clearRangeSelection() {
308
- this.setStateAtKey(_rangeSelection.rangeSelectionKey, null);
301
+ return result;
309
302
  }
310
303
  }]);
311
304
  return TablePipeline;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kdcloudjs/table",
3
- "version": "1.1.5-canary.1",
3
+ "version": "1.1.5-canary.10",
4
4
  "description": "金蝶 react table 组件",
5
5
  "title": "table",
6
6
  "keywords": [