@kdcloudjs/table 1.1.4 → 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 (89) hide show
  1. package/dist/@kdcloudjs/table.css +1 -1
  2. package/dist/@kdcloudjs/table.js +905 -346
  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 +10 -9
  6. package/dist/@kdcloudjs/table.min.js.map +1 -1
  7. package/es/table/base/html-table.js +1 -1
  8. package/es/table/base/styles.d.ts +11 -2
  9. package/es/table/base/styles.js +19 -8
  10. package/es/table/base/table.d.ts +3 -1
  11. package/es/table/base/table.js +35 -56
  12. package/es/table/base/utils.d.ts +7 -0
  13. package/es/table/base/utils.js +36 -2
  14. package/es/table/common-views.js +1 -1
  15. package/es/table/pipeline/features/colGroupExtendable.d.ts +8 -0
  16. package/es/table/pipeline/features/colGroupExtendable.js +105 -0
  17. package/es/table/pipeline/features/columnDrag.js +5 -4
  18. package/es/table/pipeline/features/columnFilter.d.ts +8 -2
  19. package/es/table/pipeline/features/columnFilter.js +43 -19
  20. package/es/table/pipeline/features/columnResizeWidth.js +1 -1
  21. package/es/table/pipeline/features/contextMenu.d.ts +5 -1
  22. package/es/table/pipeline/features/contextMenu.js +18 -28
  23. package/es/table/pipeline/features/filter/DefaultFilterContent.js +27 -7
  24. package/es/table/pipeline/features/filter/DefaultFilterIcon.d.ts +5 -0
  25. package/es/table/pipeline/features/filter/DefaultFilterIcon.js +20 -0
  26. package/es/table/pipeline/features/filter/Filter.d.ts +5 -2
  27. package/es/table/pipeline/features/filter/Filter.js +65 -37
  28. package/es/table/pipeline/features/filter/FilterPanel.d.ts +2 -1
  29. package/es/table/pipeline/features/filter/FilterPanel.js +40 -21
  30. package/es/table/pipeline/features/filter/util.js +4 -4
  31. package/es/table/pipeline/features/footerDataSource.d.ts +9 -0
  32. package/es/table/pipeline/features/footerDataSource.js +25 -0
  33. package/es/table/pipeline/features/index.d.ts +2 -0
  34. package/es/table/pipeline/features/index.js +3 -1
  35. package/es/table/pipeline/features/multiSelect.js +7 -2
  36. package/es/table/pipeline/features/rangeSelection.d.ts +1 -1
  37. package/es/table/pipeline/features/rangeSelection.js +180 -30
  38. package/es/table/pipeline/features/singleSelect.js +4 -0
  39. package/es/table/pipeline/features/treeMode.d.ts +2 -0
  40. package/es/table/pipeline/features/treeMode.js +20 -21
  41. package/es/table/pipeline/pipeline.d.ts +1 -1
  42. package/es/table/pipeline/pipeline.js +4 -9
  43. package/es/table/utils/element.d.ts +1 -0
  44. package/es/table/utils/element.js +4 -0
  45. package/es/table/utils/keyCode.d.ts +5 -0
  46. package/es/table/utils/keyCode.js +5 -0
  47. package/es/table/utils/mergeCellProps.js +2 -6
  48. package/lib/table/base/html-table.js +1 -1
  49. package/lib/table/base/styles.d.ts +11 -2
  50. package/lib/table/base/styles.js +19 -8
  51. package/lib/table/base/table.d.ts +3 -1
  52. package/lib/table/base/table.js +35 -56
  53. package/lib/table/base/utils.d.ts +7 -0
  54. package/lib/table/base/utils.js +43 -2
  55. package/lib/table/common-views.js +1 -1
  56. package/lib/table/pipeline/features/colGroupExtendable.d.ts +8 -0
  57. package/lib/table/pipeline/features/colGroupExtendable.js +126 -0
  58. package/lib/table/pipeline/features/columnDrag.js +5 -4
  59. package/lib/table/pipeline/features/columnFilter.d.ts +8 -2
  60. package/lib/table/pipeline/features/columnFilter.js +41 -19
  61. package/lib/table/pipeline/features/columnResizeWidth.js +1 -1
  62. package/lib/table/pipeline/features/contextMenu.d.ts +5 -1
  63. package/lib/table/pipeline/features/contextMenu.js +17 -28
  64. package/lib/table/pipeline/features/filter/DefaultFilterContent.js +28 -6
  65. package/lib/table/pipeline/features/filter/DefaultFilterIcon.d.ts +5 -0
  66. package/lib/table/pipeline/features/filter/DefaultFilterIcon.js +30 -0
  67. package/lib/table/pipeline/features/filter/Filter.d.ts +5 -2
  68. package/lib/table/pipeline/features/filter/Filter.js +68 -37
  69. package/lib/table/pipeline/features/filter/FilterPanel.d.ts +2 -1
  70. package/lib/table/pipeline/features/filter/FilterPanel.js +42 -20
  71. package/lib/table/pipeline/features/filter/util.js +4 -4
  72. package/lib/table/pipeline/features/footerDataSource.d.ts +9 -0
  73. package/lib/table/pipeline/features/footerDataSource.js +41 -0
  74. package/lib/table/pipeline/features/index.d.ts +2 -0
  75. package/lib/table/pipeline/features/index.js +23 -1
  76. package/lib/table/pipeline/features/multiSelect.js +6 -1
  77. package/lib/table/pipeline/features/rangeSelection.d.ts +1 -1
  78. package/lib/table/pipeline/features/rangeSelection.js +183 -32
  79. package/lib/table/pipeline/features/singleSelect.js +4 -0
  80. package/lib/table/pipeline/features/treeMode.d.ts +2 -0
  81. package/lib/table/pipeline/features/treeMode.js +21 -23
  82. package/lib/table/pipeline/pipeline.d.ts +1 -1
  83. package/lib/table/pipeline/pipeline.js +4 -9
  84. package/lib/table/utils/element.d.ts +1 -0
  85. package/lib/table/utils/element.js +6 -0
  86. package/lib/table/utils/keyCode.d.ts +5 -0
  87. package/lib/table/utils/keyCode.js +12 -0
  88. package/lib/table/utils/mergeCellProps.js +2 -6
  89. package/package.json +3 -3
@@ -23,6 +23,7 @@ Object.defineProperty(exports, "__esModule", {
23
23
  });
24
24
  exports.addResizeObserver = exports.STYLED_VERSION = exports.STYLED_REF_PROP = exports.OVERSCAN_SIZE = exports.AUTO_VIRTUAL_THRESHOLD = void 0;
25
25
  exports.composeRowPropsGetter = composeRowPropsGetter;
26
+ exports.cssPolifill = void 0;
26
27
  exports.getScrollbarSize = getScrollbarSize;
27
28
  exports.getTableScrollFooterDOM = getTableScrollFooterDOM;
28
29
  exports.getTableScrollHeaderDOM = getTableScrollHeaderDOM;
@@ -49,10 +50,16 @@ var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-po
49
50
 
50
51
  var styledComponents = _interopRequireWildcard(require("styled-components"));
51
52
 
53
+ var _cssVarsPonyfill = _interopRequireDefault(require("css-vars-ponyfill"));
54
+
52
55
  var _mergeCellProps = _interopRequireDefault(require("../utils/mergeCellProps"));
53
56
 
54
57
  var _utils = require("../utils");
55
58
 
59
+ var _styles = require("./styles");
60
+
61
+ var _element = require("../utils/element");
62
+
56
63
  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); }
57
64
 
58
65
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(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; }
@@ -190,7 +197,12 @@ function syncScrollLeft(elements, callback) {
190
197
  return;
191
198
  }
192
199
 
193
- var scrollLeft = ele.scrollLeft;
200
+ var scrollLeft = ele.scrollLeft; // 某一元素当滚动条消失时会触发scroll事件(scrolLeft重置为0),不同步其他其他元素的scrollLeft
201
+
202
+ if (scrollLeft === 0 && !(0, _element.hasScroll)(ele)) {
203
+ return;
204
+ }
205
+
194
206
  publishScrollLeft(ele, scrollLeft);
195
207
  callback(scrollLeft);
196
208
  };
@@ -268,4 +280,33 @@ function getTableScrollHeaderDOM(domHelper) {
268
280
 
269
281
  function getTableScrollFooterDOM(domHelper) {
270
282
  return _utils.browserType.isIE ? domHelper.tableFooterMain : domHelper.tableFooter;
271
- }
283
+ }
284
+
285
+ var cssPolifill = function cssPolifill(_ref) {
286
+ var variables = _ref.variables,
287
+ enableCSSVariables = _ref.enableCSSVariables,
288
+ bordered = _ref.bordered;
289
+
290
+ if (enableCSSVariables === false) {
291
+ return;
292
+ }
293
+
294
+ var conditionCSSVariables = {}; // 默认情况下存在td、th无左右边框,开启`bordered`属性后才开启,否则隐藏这两种属性
295
+
296
+ if (!bordered) {
297
+ conditionCSSVariables['--cell-border-vertical'] = 'none';
298
+ conditionCSSVariables['--header-cell-border-vertical'] = 'none';
299
+ }
300
+
301
+ (0, _cssVarsPonyfill.default)({
302
+ // exclude: 'link[href*="semantic-ui"]',
303
+ // onlyLegacy: false,
304
+ // rootElement: rootElement,
305
+ include: 'style[data-styled]',
306
+ variables: (0, _extends2.default)({}, _styles.defaultCSSVariables, variables, conditionCSSVariables),
307
+ watch: true,
308
+ silent: true
309
+ });
310
+ };
311
+
312
+ exports.cssPolifill = cssPolifill;
@@ -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;
@@ -0,0 +1,8 @@
1
+ import { TablePipeline } from "../pipeline";
2
+ import { ReactNode } from 'react';
3
+ export interface colGroupExtendOption {
4
+ onChangeExtendStatus?({}: any, {}: any): void;
5
+ extendStatus?: {};
6
+ extendIcon?: ReactNode | ((extendStatus: boolean) => ReactNode);
7
+ }
8
+ export declare const colGroupExtendable: (opts?: colGroupExtendOption) => (pipeline: TablePipeline) => TablePipeline;
@@ -0,0 +1,126 @@
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
+ var curColState = curState[col.code];
81
+ var displaycolExtendIcon = typeof opts.extendIcon === 'function' ? opts.extendIcon(curColState) : opts.extendIcon;
82
+
83
+ var addIconNode = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, _internals.internals.safeRenderHeader((0, _extends2.default)({}, col)), /*#__PURE__*/_react.default.createElement(ExtendIconStyle, {
84
+ onClick: function onClick() {
85
+ toggle(col);
86
+ }
87
+ }, displaycolExtendIcon || /*#__PURE__*/_react.default.createElement(ExpandIcon, {
88
+ style: {
89
+ userSelect: 'none',
90
+ marginLeft: 2,
91
+ flexShrink: 0,
92
+ cursor: "pointer",
93
+ verticalAlign: 'middle'
94
+ },
95
+ className: (0, _classnames.default)((0, _defineProperty2.default)({}, _styles.Classes.tableExtendIcon, true)),
96
+ size: 14,
97
+ isExtend: curColState
98
+ })));
99
+
100
+ result.title = addIconNode;
101
+ return result;
102
+ };
103
+
104
+ return (0, _utils.makeRecursiveMapper)(function (col) {
105
+ var _a;
106
+
107
+ var _ref2 = (col === null || col === void 0 ? void 0 : col.features) || {},
108
+ showExtendIcon = _ref2.showExtendIcon;
109
+
110
+ if (showExtendIcon === true && ((_a = col.children) === null || _a === void 0 ? void 0 : _a.length) > 1) {
111
+ var _context;
112
+
113
+ col = addIcon(col);
114
+ curState[col.code] === false && (0, _splice.default)(_context = col.children).call(_context, 1, col.children.length);
115
+ }
116
+
117
+ return col;
118
+ })(columns);
119
+ };
120
+
121
+ pipeline.columns(processColumns(columns));
122
+ return pipeline;
123
+ };
124
+ };
125
+
126
+ exports.colGroupExtendable = colGroupExtendable;
@@ -79,7 +79,7 @@ function columnDrag() {
79
79
  },
80
80
  headerCellProps: (0, _utils.mergeCellProps)(col.headerCellProps, {
81
81
  onMouseDown: !isLeaf || path.length > 1 ? undefined : function (e) {
82
- if (e.button !== 0) {
82
+ if (e.button !== 0 || !e.currentTarget.contains(e.target)) {
83
83
  return;
84
84
  }
85
85
 
@@ -255,13 +255,14 @@ function columnDrag() {
255
255
  }
256
256
 
257
257
  function handleMouseUp(e) {
258
- e.stopPropagation();
259
258
  document.body.removeEventListener('mousemove', handleMouseMove);
260
259
  document.body.removeEventListener('mouseup', handleMouseUp);
261
- window.removeEventListener('selectstart', disableSelect); // 阻止列头点击事件,防止拖动后触发列头过滤事件
260
+ window.removeEventListener('selectstart', disableSelect);
262
261
 
263
262
  if (_isMoveWhenClicking(mouseDownClientX, mouseDownClientY, e.clientX, e.clientY)) {
264
- currentTarget.addEventListener('click', stopClickPropagation);
263
+ e.stopPropagation(); // 存在移动就阻止冒泡
264
+
265
+ currentTarget.addEventListener('click', stopClickPropagation); // 阻止列头点击事件,防止拖动后触发列头过滤事件
265
266
  }
266
267
 
267
268
  window.requestAnimationFrame(function () {
@@ -12,9 +12,15 @@ export interface FilterFeatureOptions {
12
12
  keepDataSource?: boolean;
13
13
  /** 过滤模式。单列过滤 single,多列过滤 multiple,默认为多选 */
14
14
  mode?: 'single' | 'multiple';
15
- /**过滤图标 */
16
- filterIcon?: ReactNode;
15
+ /** 过滤图标 */
16
+ filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);
17
17
  /** 是否对触发弹出过滤面板 的 click 事件调用 event.stopPropagation() */
18
18
  stopClickEventPropagation?: boolean;
19
+ /** 是否对按ESC键时关闭面板的 keydown 事件调用 event.stopPropagation() */
20
+ stopESCKeyDownEventPropagation?: boolean;
21
+ /** 是否隐藏过滤面板的header区域 */
22
+ hideFilterPopupHeader?: boolean;
23
+ /** 指定过滤面板渲染的父节点 */
24
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
19
25
  }
20
26
  export declare function filter(opts?: FilterFeatureOptions): (pipeline: TablePipeline) => TablePipeline;
@@ -54,7 +54,10 @@ function filter() {
54
54
  keepDataSource = opts.keepDataSource,
55
55
  mode = opts.mode,
56
56
  filterIcon = opts.filterIcon,
57
- stopClickEventPropagation = opts.stopClickEventPropagation;
57
+ stopClickEventPropagation = opts.stopClickEventPropagation,
58
+ stopESCKeyDownEventPropagation = opts.stopESCKeyDownEventPropagation,
59
+ hideFilterPopupHeader = opts.hideFilterPopupHeader,
60
+ getPopupParent = opts.getPopupParent;
58
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 : [];
59
62
  inputFilters = mode === 'single' ? (0, _slice.default)(inputFilters).call(inputFilters, 0, 1) : inputFilters;
60
63
  var inputFiltersMap = new _map.default((0, _map2.default)(inputFilters).call(inputFilters, function (filterItem) {
@@ -65,7 +68,7 @@ function filter() {
65
68
  return (0, _map2.default)(columns).call(columns, dfs);
66
69
 
67
70
  function dfs(col) {
68
- var _a, _b, _c, _d, _e;
71
+ var _a, _b, _c, _d, _e, _f, _g;
69
72
 
70
73
  var result = (0, _extends2.default)({}, col);
71
74
  var filterable = col.code && ((_a = col.features) === null || _a === void 0 ? void 0 : _a.filterable);
@@ -104,18 +107,20 @@ function filter() {
104
107
  };
105
108
 
106
109
  var filterPanel = (_d = col.features) === null || _d === void 0 ? void 0 : _d.filterPanel;
107
- result.title = (0, _concat.default)(_context = []).call(_context, (0, _toConsumableArray2.default)((0, _concat.default)(_context2 = []).call(_context2, (_e = result.title) !== null && _e !== void 0 ? _e : [_internals.internals.safeRenderHeader((0, _extends2.default)((0, _extends2.default)({}, col), {
108
- title: null
109
- }))])), [/*#__PURE__*/_react.default.createElement(_filter2.Filter, {
110
+ var colFilterIcon = (_f = (_e = col.features) === null || _e === void 0 ? void 0 : _e.filterIcon) !== null && _f !== void 0 ? _f : filterIcon;
111
+ 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, {
110
112
  key: "filter",
111
113
  FilterPanelContent: filterPanel,
112
- filterIcon: filterIcon,
114
+ filterIcon: colFilterIcon,
113
115
  filterModel: inputFiltersMap.get(col.code),
114
116
  setFilterModel: handleFilterChanged,
115
117
  setFilter: setFilter,
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
- stopClickEventPropagation: stopClickEventPropagation
120
+ stopClickEventPropagation: stopClickEventPropagation,
121
+ stopESCKeyDownEventPropagation: stopESCKeyDownEventPropagation,
122
+ hideFilterPopupHeader: hideFilterPopupHeader,
123
+ getPopupParent: getPopupParent
119
124
  })]); // result.headerCellProps = mergeCellProps(col.headerCellProps, {
120
125
  // style: {
121
126
  // paddingRight: '18px'
@@ -157,8 +162,8 @@ function filter() {
157
162
  return [item.key, (0, _extends2.default)({}, item)];
158
163
  }));
159
164
 
160
- function isMatchedFilterCondition(record, rowIndex) {
161
- return !filtersKeys.some(function (key) {
165
+ function isMatchedFilterCondition(record) {
166
+ return filtersKeys.every(function (key) {
162
167
  var _a, _b;
163
168
 
164
169
  var filterItem = inputFiltersMap.get(key);
@@ -172,24 +177,41 @@ function filter() {
172
177
  } else {
173
178
  console.warn("\u5217[".concat(key, "]\u672A\u914D\u7F6E\u7B5B\u9009\u51FD\u6570\uFF0C\u8BF7\u8BBE\u7F6E column.features.filterable \u6765\u4F5C\u4E3A\u8BE5\u5217\u7684\u7B5B\u9009\u51FD\u6570, \u76EE\u524D\u4F7F\u7528\u9ED8\u8BA4\u5305\u542B\u7B5B\u9009\u51FD\u6570"));
174
179
  comparisonFn = (0, _filter.default)(defaultFilterOptionsMap.get('contain'));
175
- } // 不符合过滤条件,退出循环
180
+ }
176
181
 
177
-
178
- return !comparisonFn((0, _filter.default)(filterItem), filterItem)(_internals.internals.safeGetValue(columnsMap.get(key), record, rowIndex), record);
182
+ return comparisonFn((0, _filter.default)(filterItem), filterItem)(_internals.internals.safeGetValue(columnsMap.get(key), record, -1), record);
179
183
  });
180
184
  }
181
185
 
182
- return dataSource.reduce(function (pre, record, rowIndex) {
183
- if (isMatchedFilterCondition(record, rowIndex)) {
184
- return (0, _concat.default)(pre).call(pre, [record]);
185
- }
186
-
187
- return pre;
188
- }, []);
186
+ return layeredFilter(dataSource, isMatchedFilterCondition);
189
187
  }
190
188
 
191
189
  pipeline.dataSource(processDataSource(dataSource));
192
190
  pipeline.columns(processColumns(columns));
193
191
  return pipeline;
194
192
  };
193
+ }
194
+
195
+ function layeredFilter(array, matchFn) {
196
+ return dfs(array);
197
+
198
+ function dfs(rows) {
199
+ var _context6;
200
+
201
+ var parentMatched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
202
+ return (0, _filter.default)(_context6 = (0, _map2.default)(rows).call(rows, function (row) {
203
+ var currentMatched = matchFn(row);
204
+
205
+ if ((0, _utils.isLeafNode)(row)) {
206
+ return (parentMatched || currentMatched) && (0, _extends2.default)({}, row);
207
+ }
208
+
209
+ var children = row.children;
210
+ var rowAfterFilterChildren = (0, _extends2.default)((0, _extends2.default)({}, row), {
211
+ children: dfs(children, parentMatched || currentMatched)
212
+ });
213
+ var matchedByChildren = !(0, _utils.isLeafNode)(rowAfterFilterChildren);
214
+ return (parentMatched || currentMatched || matchedByChildren) && rowAfterFilterChildren;
215
+ })).call(_context6, Boolean);
216
+ }
195
217
  }
@@ -41,7 +41,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
41
41
 
42
42
  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; }
43
43
 
44
- var TableHeaderCellResize = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n position: absolute;\n top: 0;\n right: -5px;\n height: 100%;\n width: 10px;\n cursor: ew-resize;\n display: flex;\n flex-direction: column;\n align-items: center;\n z-index:1;\n\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n left: calc(50% - 1px);\n width: 1px;\n height: calc(100% - 14px);\n top: 7px;\n background-color: var(--border-color);\n }\n"])));
44
+ var TableHeaderCellResize = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n position: absolute;\n top: 0;\n right: -5px;\n height: 100%;\n width: 10px;\n cursor: ew-resize;\n display: flex;\n flex-direction: column;\n align-items: center;\n z-index:1;\n\n &:after {\n content: \"\";\n position: absolute;\n display: block;\n left: calc(50% - 1px);\n width: 1px;\n height: calc(100% - 14px);\n top: 7px;\n }\n"])));
45
45
 
46
46
  var TableHeaderGroupCellResize = (0, _styledComponents.default)(TableHeaderCellResize)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n &:after {\n height: 100%;\n top: 0;\n }\n"])));
47
47
 
@@ -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
 
@@ -33,6 +33,8 @@ var _util = require("./util");
33
33
 
34
34
  var _styles = require("../../../base/styles");
35
35
 
36
+ var _keyCode = _interopRequireDefault(require("../../../utils/keyCode"));
37
+
36
38
  var _templateObject;
37
39
 
38
40
  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); }
@@ -53,11 +55,13 @@ function DefaultFilterContent(_ref) {
53
55
  selectedValue = _React$useState2[0],
54
56
  setSelectedValue = _React$useState2[1];
55
57
 
56
- 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)) || []),
57
59
  _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
58
60
  innerValue = _React$useState4[0],
59
61
  setInnerValue = _React$useState4[1];
60
62
 
63
+ var inputRef = (0, _react.useRef)();
64
+
61
65
  var handleClick = _react.default.useCallback(function (option) {
62
66
  setSelectedValue(option.key);
63
67
  }, []);
@@ -70,15 +74,31 @@ function DefaultFilterContent(_ref) {
70
74
  var confirm = function confirm() {
71
75
  hidePanel();
72
76
  setFilterModel({
73
- filter: [innerValue],
77
+ filter: innerValue,
74
78
  filterCondition: selectedValue
75
79
  });
76
80
  };
77
81
 
82
+ var handleKeyDown = function handleKeyDown(e) {
83
+ if (e.keyCode === _keyCode.default.ENTER) {
84
+ confirm();
85
+ }
86
+ };
87
+
78
88
  (0, _react.useEffect)(function () {
79
89
  setSelectedValue((filterModel === null || filterModel === void 0 ? void 0 : filterModel.filterCondition) || 'contain');
80
- 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)) || []);
81
91
  }, [filterModel]);
92
+ (0, _react.useEffect)(function () {
93
+ // 兼容设置焦点后发生滚动
94
+ setTimeout(function () {
95
+ var _a;
96
+
97
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus({
98
+ preventScroll: true
99
+ });
100
+ });
101
+ }, []);
82
102
  return /*#__PURE__*/_react.default.createElement(DefaultFilterContentStyle, null, /*#__PURE__*/_react.default.createElement("div", {
83
103
  className: 'filter-option-list'
84
104
  }, /*#__PURE__*/_react.default.createElement("ul", null, (0, _map.default)(_util.DEFAULT_FILTER_OPTIONS).call(_util.DEFAULT_FILTER_OPTIONS, function (option, index) {
@@ -97,10 +117,12 @@ function DefaultFilterContent(_ref) {
97
117
  className: 'filter-search'
98
118
  }, /*#__PURE__*/_react.default.createElement("input", {
99
119
  className: 'filter-search-inner',
100
- value: innerValue,
120
+ value: innerValue[0],
101
121
  onChange: function onChange(e) {
102
- setInnerValue(e.target.value);
103
- }
122
+ setInnerValue([e.target.value]);
123
+ },
124
+ onKeyDown: handleKeyDown,
125
+ ref: inputRef
104
126
  })), /*#__PURE__*/_react.default.createElement("div", {
105
127
  className: 'filter-footer'
106
128
  }, /*#__PURE__*/_react.default.createElement("button", {
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export default function DefaultFilterIcon({ width, height }: {
3
+ width: string | number;
4
+ height: string | number;
5
+ }): JSX.Element;
@@ -0,0 +1,30 @@
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.default = DefaultFilterIcon;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ function DefaultFilterIcon(_ref) {
13
+ var width = _ref.width,
14
+ height = _ref.height;
15
+ return /*#__PURE__*/_react.default.createElement("svg", {
16
+ width: width,
17
+ height: height,
18
+ style: {
19
+ verticalAlign: 'middle'
20
+ },
21
+ viewBox: "0 0 1024 1024",
22
+ focusable: "false",
23
+ "data-icon": "filter",
24
+ fill: "currentColor",
25
+ version: "1.1",
26
+ xmlns: "http://www.w3.org/2000/svg"
27
+ }, /*#__PURE__*/_react.default.createElement("path", {
28
+ d: "M891.448889 159.573333L626.460444 460.231111v443.221333c0 32.881778-25.429333 63.658667-55.864888 63.658667l-170.268445-172.942222V456.419556L132.266667 159.857778A59.619556 59.619556 0 0 1 173.511111 56.888889h676.977778c32.995556 0 59.733333 26.680889 59.733333 59.562667 0 17.066667-7.224889 32.312889-18.773333 43.121777z"
29
+ }));
30
+ }
@@ -6,12 +6,15 @@ interface FilterProps {
6
6
  size?: number;
7
7
  isFilterActive: boolean;
8
8
  FilterPanelContent?: FilterPanelType;
9
- filterIcon?: ReactNode;
9
+ filterIcon?: ReactNode | ((filtered: boolean) => ReactNode);
10
10
  setFilterModel: DefaultFilterPanelProps['setFilterModel'];
11
11
  filterModel: DefaultFilterPanelProps['filterModel'];
12
12
  setFilter: CustomeFilterPanelProps['setFilter'];
13
13
  onClick?: (e: React.MouseEvent) => any;
14
14
  stopClickEventPropagation?: boolean;
15
+ stopESCKeyDownEventPropagation?: boolean;
16
+ hideFilterPopupHeader?: boolean;
17
+ getPopupParent?: (triggerElement: HTMLElement) => HTMLElement;
15
18
  }
16
- declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation }: FilterProps): JSX.Element;
19
+ declare function Filter({ size, style, className, FilterPanelContent, filterIcon, setFilter, setFilterModel, filterModel, isFilterActive, stopClickEventPropagation, stopESCKeyDownEventPropagation, hideFilterPopupHeader, getPopupParent }: FilterProps): JSX.Element;
17
20
  export default Filter;