@kdcloudjs/table 1.1.3-canary.1 → 1.1.3-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 (71) hide show
  1. package/dist/@kdcloudjs/table.css +1 -1
  2. package/dist/@kdcloudjs/table.js +602 -205
  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/helpers/TableDOMUtils.d.ts +2 -0
  8. package/es/table/base/helpers/TableDOMUtils.js +48 -12
  9. package/es/table/base/helpers/getRichVisibleRectsStream.js +1 -1
  10. package/es/table/base/html-table.js +1 -1
  11. package/es/table/base/styles.d.ts +2 -0
  12. package/es/table/base/styles.js +4 -2
  13. package/es/table/base/table.d.ts +0 -1
  14. package/es/table/base/table.js +13 -27
  15. package/es/table/pipeline/features/columnDrag.js +27 -16
  16. package/es/table/pipeline/features/columnFilter.d.ts +2 -2
  17. package/es/table/pipeline/features/columnFilter.js +33 -12
  18. package/es/table/pipeline/features/contextMenu.js +1 -0
  19. package/es/table/pipeline/features/filter/DefaultFilterIcon.d.ts +5 -0
  20. package/es/table/pipeline/features/filter/DefaultFilterIcon.js +20 -0
  21. package/es/table/pipeline/features/filter/Filter.d.ts +1 -1
  22. package/es/table/pipeline/features/filter/Filter.js +16 -20
  23. package/es/table/pipeline/features/filter/FilterPanel.js +25 -16
  24. package/es/table/pipeline/features/filter/util.js +4 -4
  25. package/es/table/pipeline/features/footerDataSource.d.ts +9 -0
  26. package/es/table/pipeline/features/footerDataSource.js +25 -0
  27. package/es/table/pipeline/features/index.d.ts +2 -0
  28. package/es/table/pipeline/features/index.js +3 -1
  29. package/es/table/pipeline/features/mergeCellHover.d.ts +2 -0
  30. package/es/table/pipeline/features/mergeCellHover.js +32 -0
  31. package/es/table/pipeline/features/multiSelect.js +7 -2
  32. package/es/table/pipeline/features/rangeSelection.d.ts +1 -1
  33. package/es/table/pipeline/features/rangeSelection.js +156 -28
  34. package/es/table/pipeline/features/singleSelect.js +4 -0
  35. package/es/table/pipeline/features/treeMode.d.ts +2 -0
  36. package/es/table/pipeline/features/treeMode.js +18 -20
  37. package/es/table/pipeline/pipeline.d.ts +5 -1
  38. package/es/table/pipeline/pipeline.js +11 -10
  39. package/lib/table/base/helpers/TableDOMUtils.d.ts +2 -0
  40. package/lib/table/base/helpers/TableDOMUtils.js +51 -12
  41. package/lib/table/base/helpers/getRichVisibleRectsStream.js +1 -1
  42. package/lib/table/base/html-table.js +1 -1
  43. package/lib/table/base/styles.d.ts +2 -0
  44. package/lib/table/base/styles.js +4 -2
  45. package/lib/table/base/table.d.ts +0 -1
  46. package/lib/table/base/table.js +13 -27
  47. package/lib/table/pipeline/features/columnDrag.js +27 -16
  48. package/lib/table/pipeline/features/columnFilter.d.ts +2 -2
  49. package/lib/table/pipeline/features/columnFilter.js +31 -12
  50. package/lib/table/pipeline/features/contextMenu.js +1 -0
  51. package/lib/table/pipeline/features/filter/DefaultFilterIcon.d.ts +5 -0
  52. package/lib/table/pipeline/features/filter/DefaultFilterIcon.js +30 -0
  53. package/lib/table/pipeline/features/filter/Filter.d.ts +1 -1
  54. package/lib/table/pipeline/features/filter/Filter.js +17 -20
  55. package/lib/table/pipeline/features/filter/FilterPanel.js +25 -15
  56. package/lib/table/pipeline/features/filter/util.js +4 -4
  57. package/lib/table/pipeline/features/footerDataSource.d.ts +9 -0
  58. package/lib/table/pipeline/features/footerDataSource.js +41 -0
  59. package/lib/table/pipeline/features/index.d.ts +2 -0
  60. package/lib/table/pipeline/features/index.js +23 -1
  61. package/lib/table/pipeline/features/mergeCellHover.d.ts +2 -0
  62. package/lib/table/pipeline/features/mergeCellHover.js +43 -0
  63. package/lib/table/pipeline/features/multiSelect.js +6 -1
  64. package/lib/table/pipeline/features/rangeSelection.d.ts +1 -1
  65. package/lib/table/pipeline/features/rangeSelection.js +158 -30
  66. package/lib/table/pipeline/features/singleSelect.js +4 -0
  67. package/lib/table/pipeline/features/treeMode.d.ts +2 -0
  68. package/lib/table/pipeline/features/treeMode.js +19 -22
  69. package/lib/table/pipeline/pipeline.d.ts +5 -1
  70. package/lib/table/pipeline/pipeline.js +12 -10
  71. package/package.json +1 -1
@@ -36,7 +36,7 @@ export declare class TablePipeline {
36
36
  private _tableProps;
37
37
  private _dataSource;
38
38
  private _columns;
39
- private _footerDataSource;
39
+ private _footerDataSource?;
40
40
  static defaultIndents: TablePipelineIndentsConfig;
41
41
  readonly ctx: TablePipelineCtx;
42
42
  private readonly state;
@@ -88,6 +88,10 @@ 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;
91
95
  }
92
96
  export declare function useTablePipeline(ctx?: Partial<TablePipelineCtx>): TablePipeline;
93
97
  export {};
@@ -8,6 +8,7 @@ import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instan
8
8
  import { useState, useRef } from 'react';
9
9
  import { mergeCellProps } from '../utils';
10
10
  import { autoFillTableWidth, tableWidthKey } from './features/autoFill';
11
+ import { rangeSelectionKey } from './features/rangeSelection';
11
12
  /**
12
13
  * 表格数据处理流水线。TablePipeline 提供了表格数据处理过程中的一些上下方与工具方法,包括……
13
14
  *
@@ -276,19 +277,19 @@ export var TablePipeline = /*#__PURE__*/function () {
276
277
 
277
278
  result.setTableDomHelper = function (domHelper) {
278
279
  _this2.ref.current.domHelper = domHelper;
279
- }; // if (this.getFeatureOptions(rangeSelectionKey)) {
280
- // result.clearRangeSelectionStatus = () => {
281
- // const { rangeSelectedChange } = this.getFeatureOptions(rangeSelectionKey)
282
- // const rangeSelection = this.getStateAtKey(rangeSelectionKey)
283
- // if (rangeSelection) {
284
- // rangeSelectedChange?.(null)
285
- // }
286
- // }
287
- // }
288
-
280
+ };
289
281
 
290
282
  return result;
291
283
  }
284
+ /**
285
+ * 清除范围选中内容
286
+ */
287
+
288
+ }, {
289
+ key: "clearRangeSelection",
290
+ value: function clearRangeSelection() {
291
+ this.setStateAtKey(rangeSelectionKey, null);
292
+ }
292
293
  }]);
293
294
 
294
295
  return TablePipeline;
@@ -18,4 +18,6 @@ export declare class TableDOMHelper {
18
18
  getRightLockShadow(): HTMLDivElement;
19
19
  getLoadingIndicator(): HTMLDivElement;
20
20
  getRowTop(rowIndex: number): number;
21
+ getRowNodeListByEvent: (e: React.MouseEvent<HTMLTableRowElement, MouseEvent>) => HTMLElement[];
22
+ getInRangeRowByCellEvent: (e: React.MouseEvent<HTMLTableCellElement, MouseEvent>) => unknown[];
21
23
  }
@@ -7,6 +7,10 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.TableDOMHelper = void 0;
9
9
 
10
+ var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
11
+
12
+ var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
13
+
10
14
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
11
15
 
12
16
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
@@ -54,9 +58,44 @@ var _styles = require("../styles");
54
58
  // 表格 DOM 结构辅助工具
55
59
  var TableDOMHelper = /*#__PURE__*/function () {
56
60
  function TableDOMHelper(artTableWrapper) {
57
- var _context;
61
+ var _this = this,
62
+ _context2;
58
63
 
59
64
  (0, _classCallCheck2.default)(this, TableDOMHelper);
65
+
66
+ this.getRowNodeListByEvent = function (e) {
67
+ var nodeList = null;
68
+ var rowIndex = e.currentTarget.dataset.rowindex;
69
+
70
+ if (rowIndex !== undefined) {
71
+ var targetParent = _this.tableBody.contains(e.currentTarget) ? _this.tableBody : _this.tableFooter;
72
+ nodeList = targetParent.querySelectorAll("tr[data-rowindex=\"".concat(rowIndex, "\"]"));
73
+ }
74
+
75
+ return nodeList;
76
+ };
77
+
78
+ this.getInRangeRowByCellEvent = function (e) {
79
+ var _context;
80
+
81
+ var _a;
82
+
83
+ var getParentNode = function getParentNode(ele, target) {
84
+ if (ele.parentNode.nodeName === target) {
85
+ return ele.parentNode;
86
+ }
87
+
88
+ return getParentNode(ele.parentNode, target);
89
+ };
90
+
91
+ e = e instanceof Array ? e[0] : e;
92
+ var curCell = e === null || e === void 0 ? void 0 : e.currentTarget;
93
+ var curRow = getParentNode(curCell, 'TR');
94
+ var curRowSpan = parseInt(e.currentTarget.getAttribute('rowspan')) || 1;
95
+ var rows = (_a = getParentNode(curCell, 'TABLE')) === null || _a === void 0 ? void 0 : _a.rows;
96
+ return (0, _slice.default)(_context = (0, _from.default)(rows)).call(_context, curRow.rowIndex, curRow.rowIndex + curRowSpan);
97
+ };
98
+
60
99
  this.artTableWrapper = artTableWrapper;
61
100
  this.artTable = artTableWrapper.querySelector(".".concat(_styles.Classes.artTable));
62
101
  this.tableHeader = this.artTable.querySelector(".".concat(_styles.Classes.tableHeader));
@@ -66,7 +105,7 @@ var TableDOMHelper = /*#__PURE__*/function () {
66
105
  this.tableElement = this.artTable.querySelector(".".concat(_styles.Classes.tableBody, " table"));
67
106
  this.tableFooter = this.artTable.querySelector(".".concat(_styles.Classes.tableFooter));
68
107
  this.tableFooterMain = this.artTable.querySelector(".".concat(_styles.Classes.tableFooterMain));
69
- var stickyScrollSelector = (0, _concat.default)(_context = ".".concat(_styles.Classes.artTable, " + .")).call(_context, _styles.Classes.stickyScroll);
108
+ var stickyScrollSelector = (0, _concat.default)(_context2 = ".".concat(_styles.Classes.artTable, " + .")).call(_context2, _styles.Classes.stickyScroll);
70
109
  this.stickyScroll = artTableWrapper.querySelector(stickyScrollSelector);
71
110
  this.stickyScrollItem = this.stickyScroll.querySelector(".".concat(_styles.Classes.stickyScrollItem));
72
111
  }
@@ -79,32 +118,32 @@ var TableDOMHelper = /*#__PURE__*/function () {
79
118
  }, {
80
119
  key: "getTableRows",
81
120
  value: function getTableRows() {
82
- var _context2;
121
+ var _context3;
83
122
 
84
- var tbody = this.artTable.querySelector((0, _concat.default)(_context2 = ".".concat(_styles.Classes.tableBody, " .")).call(_context2, _styles.Classes.virtual, " table tbody"));
123
+ var tbody = this.artTable.querySelector((0, _concat.default)(_context3 = ".".concat(_styles.Classes.tableBody, " .")).call(_context3, _styles.Classes.virtual, " table tbody"));
85
124
  return tbody.childNodes;
86
125
  }
87
126
  }, {
88
127
  key: "getTableBodyHtmlTable",
89
128
  value: function getTableBodyHtmlTable() {
90
- var _context3;
129
+ var _context4;
91
130
 
92
- return this.artTable.querySelector((0, _concat.default)(_context3 = ".".concat(_styles.Classes.tableBody, " .")).call(_context3, _styles.Classes.virtual, " table"));
131
+ return this.artTable.querySelector((0, _concat.default)(_context4 = ".".concat(_styles.Classes.tableBody, " .")).call(_context4, _styles.Classes.virtual, " table"));
93
132
  }
94
133
  }, {
95
134
  key: "getLeftLockShadow",
96
135
  value: function getLeftLockShadow() {
97
- var _context4;
136
+ var _context5;
98
137
 
99
- var selector = (0, _concat.default)(_context4 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context4, _styles.Classes.leftLockShadow);
138
+ var selector = (0, _concat.default)(_context5 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context5, _styles.Classes.leftLockShadow);
100
139
  return this.artTable.querySelector(selector);
101
140
  }
102
141
  }, {
103
142
  key: "getRightLockShadow",
104
143
  value: function getRightLockShadow() {
105
- var _context5;
144
+ var _context6;
106
145
 
107
- var selector = (0, _concat.default)(_context5 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context5, _styles.Classes.rightLockShadow);
146
+ var selector = (0, _concat.default)(_context6 = ".".concat(_styles.Classes.lockShadowMask, " .")).call(_context6, _styles.Classes.rightLockShadow);
108
147
  return this.artTable.querySelector(selector);
109
148
  }
110
149
  }, {
@@ -115,10 +154,10 @@ var TableDOMHelper = /*#__PURE__*/function () {
115
154
  }, {
116
155
  key: "getRowTop",
117
156
  value: function getRowTop(rowIndex) {
118
- var _context6, _context7;
157
+ var _context7, _context8;
119
158
 
120
159
  if (rowIndex === 0) return 0;
121
- var selector = (0, _concat.default)(_context6 = (0, _concat.default)(_context7 = ".".concat(_styles.Classes.tableBody, " .")).call(_context7, _styles.Classes.tableRow, "[data-rowindex=\"")).call(_context6, rowIndex, "\"]");
160
+ var selector = (0, _concat.default)(_context7 = (0, _concat.default)(_context8 = ".".concat(_styles.Classes.tableBody, " .")).call(_context8, _styles.Classes.tableRow, "[data-rowindex=\"")).call(_context7, rowIndex, "\"]");
122
161
  var row = this.artTable.querySelector(selector);
123
162
  var rowOffsetTop = row && row.offsetTop || 0;
124
163
  var tableOffsetTop = this.tableElement.offsetTop || 0;
@@ -42,7 +42,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
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
44
  function isWindow(arg) {
45
- return arg.toString() === '[object Window]';
45
+ return arg.toString() === '[object Window]' || arg.toString() === '[object global]';
46
46
  }
47
47
 
48
48
  function isBody(arg) {
@@ -141,7 +141,7 @@ function HtmlTable(_ref) {
141
141
  positionStyle.left = hozInfo.stickyLeftMap.get(colIndex);
142
142
  } else if (colIndex >= fullFlatCount - rightFlatCount) {
143
143
  positionStyle.position = 'sticky';
144
- positionStyle.right = hozInfo.stickyRightMap.get(colIndex) - stickyRightOffset;
144
+ positionStyle.right = hozInfo.stickyRightMap.get(colIndex) - (typeof stickyRightOffset === 'number' ? stickyRightOffset : 0);
145
145
  }
146
146
 
147
147
  return /*#__PURE__*/_react.default.createElement('td', (0, _extends2.default)((0, _extends2.default)((0, _extends2.default)((0, _extends2.default)({
@@ -40,6 +40,8 @@ export declare const Classes: {
40
40
  readonly button: string;
41
41
  readonly buttonPrimary: string;
42
42
  readonly filterIcon: string;
43
+ readonly rangeSelection: string;
44
+ readonly tableCellRangeSingleCell: string;
43
45
  readonly tableCellRangeSelected: string;
44
46
  readonly tableCellRangeTop: string;
45
47
  readonly tableCellRangeLeft: string;
@@ -76,6 +76,8 @@ var Classes = {
76
76
  button: "".concat(prefix, "btn"),
77
77
  buttonPrimary: "".concat(prefix, "btn-primary"),
78
78
  filterIcon: "".concat(prefix, "filter-icon"),
79
+ rangeSelection: "".concat(prefix, "range-selection"),
80
+ tableCellRangeSingleCell: "".concat(prefix, "table-cell-range-single-cell"),
79
81
  tableCellRangeSelected: "".concat(prefix, "table-cell-range-selected"),
80
82
  tableCellRangeTop: "".concat(prefix, "table-cell-range-top"),
81
83
  tableCellRangeLeft: "".concat(prefix, "table-cell-range-left"),
@@ -126,7 +128,7 @@ var defaultCSSVariables = {
126
128
  '--primary-color': '#5582F3',
127
129
  '--primary-color-level1': 'rgb(242, 248, 255)',
128
130
  '--primary-color-level2': 'rgb(135, 173, 255)',
129
- '--icon-color': '#bfbfbf',
131
+ '--icon-color': '#666666',
130
132
  '--strong-border-color': '#d9d9d9',
131
133
  '--header-row-height': '32px',
132
134
  '--header-color': '#333',
@@ -148,7 +150,7 @@ exports.defaultCSSVariables = defaultCSSVariables;
148
150
  var variableConst = getCssVariableText(defaultCSSVariables);
149
151
  exports.variableConst = variableConst;
150
152
 
151
- var StyledArtTableWrapper = _styledComponents.default.div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n user-select:none;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.", " {\n border-right: none;\n border-bottom: none;\n }\n\n tr.", " th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.", " {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.", " {\n border-left: var(--cell-border-vertical);\n }\n tr.", " td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tbody tr.", " td {\n border-bottom: none;\n }\n\n .", ",\n .", " {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: auto;\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n \n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.leaf, Classes.first, Classes.first, Classes.first, Classes.first, Classes.first, Classes.last, Classes.lockLeft, Classes.lockRight, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder);
153
+ var StyledArtTableWrapper = _styledComponents.default.div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n :root {\n ", "\n }\n ", "\n\n box-sizing: border-box;\n * {\n box-sizing: border-box;\n }\n cursor: default;\n color: var(--color);\n font-size: var(--font-size);\n line-height: var(--line-height);\n position: relative;\n\n // \u8868\u683C\u5916\u8FB9\u6846\u7531 art-table-wrapper \u63D0\u4F9B\uFF0C\u800C\u4E0D\u662F\u7531\u5355\u5143\u683C\u63D0\u4F9B\n &.use-outer-border {\n ", ";\n }\n\n .no-scrollbar {\n ::-webkit-scrollbar {\n display: none;\n }\n }\n\n .", " {\n overflow: auto;\n flex-shrink: 1;\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n }\n\n .", " {\n overflow: hidden;\n background: var(--header-bgcolor);\n display: flex;\n flex-shrink: 0;\n border-bottom: var(--header-cell-border-horizontal);\n }\n\n .", " {\n display: flex;\n // justify-content: flex-start;\n align-items: center;\n height: inherit;\n }\n\n .", " {\n overflow-x:auto;\n flex-shrink: 0;\n flex-grow: 0;\n scrollbar-width: none; // \u517C\u5BB9\u706B\u72D0\n & {\n ::-webkit-scrollbar {\n display:none;\n }\n }\n }\n\n .", " {\n display: flex;\n flex: none;\n }\n .", ", .", " {\n background: var(--bgcolor);\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n position:relative;\n &.empty {\n position: relative;\n }\n }\n\n .", " {\n position: relative;\n }\n .", ", .", " {\n .", "{\n background-color: #e6effb !important;\n }\n .", "{\n border-top: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-left: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-bottom: 1px solid #0E5FD8 !important;\n }\n .", "{\n border-right: 1px solid #0E5FD8 !important;\n }\n }\n \n .", " {\n user-select:none;\n }\n\n\n &.sticky-header .", " {\n position: sticky;\n top: 0;\n z-index: ", ";\n }\n\n &.sticky-footer .", " {\n position: sticky;\n bottom: 0;\n z-index: ", ";\n }\n\n table {\n width: 0;\n table-layout: fixed;\n border-collapse: separate;\n border-spacing: 0;\n display: table;\n margin: 0;\n padding: 0;\n flex-shrink: 0;\n flex-grow: 0;\n position:relative;\n }\n\n // \u5728 tr \u4E0A\u8BBE\u7F6E .no-hover \u53EF\u4EE5\u7981\u7528\u9F20\u6807\u60AC\u505C\u6548\u679C\n tr:not(.no-hover):hover > td {\n background: var(--hover-bgcolor);\n }\n // \u4F7F\u7528 js \u6DFB\u52A0\u60AC\u6D6E\u6548\u679C\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n // \u5728 tr \u8BBE\u7F6E highlight \u53EF\u4EE5\u4E3A\u5E95\u4E0B\u7684 td \u8BBE\u7F6E\u4E3A\u9AD8\u4EAE\u8272\n // \u800C\u8BBE\u7F6E .no-highlight \u7684\u8BDD\u5219\u53EF\u4EE5\u7981\u7528\u9AD8\u4EAE\u6548\u679C\uFF1B\n tr:not(.no-highlight).highlight > td {\n background: var(--highlight-bgcolor);\n }\n\n th {\n font-weight: normal;\n text-align: left;\n padding: var(--cell-padding);\n height: var(--header-row-height);\n color: var(--header-color);\n background: var(--header-bgcolor);\n border:1px solid transparent;\n border-right: var(--header-cell-border-vertical);\n border-bottom: var(--header-cell-border-horizontal);\n position: relative;\n }\n\n th.resizeable{\n border-right:none\n }\n\n th.", " {\n border-right: none;\n border-bottom: none;\n }\n\n tr.", " th {\n border-top: var(--header-cell-border-horizontal);\n }\n th.", " {\n border-left: var(--header-cell-border-vertical);\n }\n\n td {\n padding: var(--cell-padding);\n background: var(--bgcolor);\n height: var(--row-height);\n border:1px solid transparent;\n border-right: var(--cell-border-vertical);\n border-bottom: var(--cell-border-horizontal);\n word-break: break-all;\n }\n td.", " {\n border-left: var(--cell-border-vertical);\n }\n tr.", " td {\n border-top: var(--cell-border-horizontal);\n }\n &.has-header tbody tr.", " td {\n border-top: none;\n }\n &.has-footer tbody tr.", " td {\n border-bottom: none;\n }\n\n .", ",\n .", " {\n z-index: ", ";\n }\n\n //#region \u9501\u5217\u9634\u5F71\n .", " {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: ", ";\n pointer-events: none;\n overflow: hidden;\n\n .", " {\n height: 100%;\n }\n\n .", " {\n margin-right: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-right: var(--cell-border-vertical);\n }\n }\n\n .", " {\n margin-left: ", "px;\n box-shadow: none;\n\n &.show-shadow {\n box-shadow: var(--lock-shadow);\n border-left: var(--cell-border-vertical);\n }\n }\n }\n //#endregion\n\n //#region \u7A7A\u8868\u683C\u5C55\u73B0\n .", " {\n pointer-events: none;\n color: #99a3b3;\n font-size: 12px;\n text-align: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n\n .empty-image {\n width: 50px;\n height: 50px;\n }\n\n .empty-tips {\n margin-top: 16px;\n line-height: 1.5;\n }\n }\n //#endregion\n\n //#region IE\u517C\u5BB9\n &.ie-polyfill-wrapper {\n //\u9501\u5B9A\u5217\u517C\u5BB9 \u4EC5\u5728\u9501\u5B9A\u5217\u7684\u60C5\u51B5\u4E0B\u751F\u6548\n .", " {\n overflow-x: hidden;\n }\n .", ", .", " {\n position:relative;\n }\n .", " {\n overflow: hidden;\n }\n .", " {\n position: relative;\n }\n\n .", " {\n overflow: auto;\n overflow-x: hidden;\n overflow-anchor: none;\n }\n\n .", ", .", "{\n position: absolute;\n z-index: ", ";\n top: 0;\n }\n .", "{\n left:0;\n }\n .", "{\n right:0;\n }\n\n .", "{\n .", "{\n position: absolute;\n top: 0;\n width: 100%;\n z-index: ", ";\n }\n }\n\n tr:not(.no-hover).row-hover > td {\n background: var(--hover-bgcolor);\n }\n }\n //#endregion\n\n //#region \u7C98\u6027\u6EDA\u52A8\u6761\n .", " {\n overflow-y: hidden;\n overflow-x: auto;\n z-index: ", ";\n flex-shrink: 0;\n flex-grow: 0;\n border-top: 1px solid var(--border-color);\n background: var(--bgcolor);\n }\n\n .", " {\n // \u5FC5\u987B\u6709\u9AD8\u5EA6\u624D\u80FD\u51FA\u73B0\u6EDA\u52A8\u6761\n height: 1px;\n visibility: hidden;\n }\n //#endregion\n\n //#region \u52A0\u8F7D\u6837\u5F0F\n .", " {\n position: relative;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n .", " {\n filter: none;\n width: 100%;\n height: 100%;\n overflow: hidden;//\u5217\u5168\u90E8\u56FA\u5B9A\u65F6\uFF0C\u5B58\u5728\u53CC\u6A2A\u5411\u6EDA\u52A8\u6761\n display: flex;\n position: relative;\n flex-direction: column;\n }\n\n .", " {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .", " {\n position: sticky;\n z-index: ", ";\n transform: translateY(-50%);\n }\n }\n //#endregion\n\n //#region \u8868\u683C\u8FC7\u6EE4\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n padding: 6px 4px;\n &:hover{\n background-color: #e5e5e5;\n }\n }\n .", " {\n display: flex\n }\n //#endregion\n\n //#region \u8868\u683C\u6392\u5E8F\n .", " {\n color:var(--icon-color);\n &.active{\n color:var(--primary-color);\n }\n }\n //#endregion\n\n //#region \u6EDA\u52A8\u6761\u5360\u4F4D\n .", " {\n visibility: hidden;\n flex-shrink: 0;\n }\n .", " .", " {\n border-top: var(--cell-border-horizontal);\n }\n //#endregion\n "])), variableConst, variableConst, outerBorderStyleMixin, Classes.artTable, Classes.tableHeader, Classes.tableHeaderCellContent, Classes.virtual, Classes.tableFooter, Classes.tableBody, Classes.tableFooter, Classes.tableRow, Classes.tableBody, Classes.tableFooter, Classes.tableCellRangeSelected, Classes.tableCellRangeTop, Classes.tableCellRangeLeft, Classes.tableCellRangeBottom, Classes.tableCellRangeRight, Classes.rangeSelection, Classes.tableHeader, Z.header, Classes.tableFooter, Z.footer, Classes.leaf, Classes.first, Classes.first, Classes.first, Classes.first, Classes.first, Classes.last, Classes.lockLeft, Classes.lockRight, Z.lock, Classes.lockShadowMask, Z.lockShadow, Classes.lockShadow, Classes.leftLockShadow, LOCK_SHADOW_PADDING, Classes.rightLockShadow, LOCK_SHADOW_PADDING, Classes.emptyWrapper, Classes.virtual, Classes.tableBody, Classes.tableFooter, Classes.tableHeaderMain, Classes.tableHeader, Classes.tableFooterMain, Classes.fixedLeft, Classes.fixedRight, Z.lock, Classes.fixedLeft, Classes.fixedRight, Classes.rowDetailContainer, Classes.rowDetailItem, Z.rowDetail, Classes.stickyScroll, Z.scrollItem, Classes.stickyScrollItem, Classes.loadingWrapper, Classes.loadingContentWrapper, Classes.loadingIndicatorWrapper, Classes.loadingIndicator, Z.loadingIndicator, Classes.tableFilterTrigger, Classes.filterIcon, Classes.tableSortIcon, Classes.verticalScrollPlaceholder, Classes.tableFooter, Classes.verticalScrollPlaceholder);
152
154
 
153
155
  exports.StyledArtTableWrapper = StyledArtTableWrapper;
154
156
  var ButtonCSS = (0, _styledComponents.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n //#region \u6309\u94AE\n .", "{\n color: var(--color);\n background:#ffffff;\n border:1px solid var(--strong-border-color);\n border-radius: 2px;\n cursor: pointer;\n &:hover{\n color: var(--primary-color);\n border:1px solid var(--primary-color);\n }\n }\n .", " {\n color:#ffffff;\n background-color: var(--primary-color);\n border:none;\n &:hover{\n color:#ffffff;\n background-color: var(--primary-color-level2);\n border:none;\n }\n }\n//#endregion\n"])), variableConst, Classes.button, Classes.buttonPrimary);
@@ -145,7 +145,6 @@ export declare class BaseTable extends React.Component<BaseTableProps, BaseTable
145
145
  /** 同步横向滚动偏移量 */
146
146
  private syncHorizontalScroll;
147
147
  getVerticalRenderRange(useVirtual: ResolvedUseVirtual): VerticalRenderRange;
148
- private getRowNodeListByEvent;
149
148
  private handleRowMouseEnter;
150
149
  private handleRowMouseLeave;
151
150
  private renderTableBody;
@@ -145,23 +145,8 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
145
145
  _this.resizeSubject = new _rxjs.Subject();
146
146
  _this.offsetY = 0;
147
147
 
148
- _this.getRowNodeListByEvent = function (e) {
149
- var nodeList = null;
150
- var rowIndex = e.currentTarget.dataset.rowindex;
151
-
152
- if (rowIndex !== undefined) {
153
- var _this$domHelper = _this.domHelper,
154
- tableBody = _this$domHelper.tableBody,
155
- tableFooter = _this$domHelper.tableFooter;
156
- var targetParent = tableBody.contains(e.currentTarget) ? tableBody : tableFooter;
157
- nodeList = targetParent.querySelectorAll("tr[data-rowindex=\"".concat(rowIndex, "\"]"));
158
- }
159
-
160
- return nodeList;
161
- };
162
-
163
148
  _this.handleRowMouseEnter = function (e) {
164
- var nodeList = _this.getRowNodeListByEvent(e);
149
+ var nodeList = _this.domHelper.getRowNodeListByEvent(e);
165
150
 
166
151
  nodeList && nodeList.forEach(function (node) {
167
152
  node.classList.add('row-hover');
@@ -169,7 +154,7 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
169
154
  };
170
155
 
171
156
  _this.handleRowMouseLeave = function (e) {
172
- var nodeList = _this.getRowNodeListByEvent(e);
157
+ var nodeList = _this.domHelper.getRowNodeListByEvent(e);
173
158
 
174
159
  nodeList && nodeList.forEach(function (node) {
175
160
  node.classList.remove('row-hover');
@@ -302,10 +287,10 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
302
287
  value: function updateStickyScroll() {
303
288
  var _a, _b;
304
289
 
305
- var _this$domHelper2 = this.domHelper,
306
- stickyScroll = _this$domHelper2.stickyScroll,
307
- artTable = _this$domHelper2.artTable,
308
- stickyScrollItem = _this$domHelper2.stickyScrollItem;
290
+ var _this$domHelper = this.domHelper,
291
+ stickyScroll = _this$domHelper.stickyScroll,
292
+ artTable = _this$domHelper.artTable,
293
+ stickyScrollItem = _this$domHelper.stickyScrollItem;
309
294
  var _lastHasScrollY = this.hasScrollY;
310
295
 
311
296
  if (!artTable) {
@@ -571,13 +556,14 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
571
556
  className: artTableWrapperClassName,
572
557
  style: style
573
558
  }, _utils.STYLED_REF_PROP, this.artTableWrapperRef);
559
+ var tableProps = getTableProps() || {};
574
560
  return /*#__PURE__*/_react.default.createElement(_styles.StyledArtTableWrapper, (0, _extends2.default)({}, artTableWrapperProps), /*#__PURE__*/_react.default.createElement(_loading.default, {
575
561
  visible: isLoading,
576
562
  LoadingIcon: components.LoadingIcon,
577
563
  LoadingContentWrapper: components.LoadingContentWrapper
578
- }, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
579
- className: _styles.Classes.artTable
580
- }, getTableProps()), this.renderTableHeader(info), this.renderTableBody(info), this.renderTableFooter(info), this.renderLockShadows(info)), this.renderStickyScroll(info)));
564
+ }, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, tableProps, {
565
+ className: (0, _classnames.default)(_styles.Classes.artTable, tableProps.className)
566
+ }), this.renderTableHeader(info), this.renderTableBody(info), this.renderTableFooter(info), this.renderLockShadows(info)), this.renderStickyScroll(info)));
581
567
  }
582
568
  }, {
583
569
  key: "componentDidMount",
@@ -642,9 +628,9 @@ var BaseTable = /*#__PURE__*/function (_React$Component) {
642
628
  value: function initSubscriptions() {
643
629
  var _this2 = this;
644
630
 
645
- var _this$domHelper3 = this.domHelper,
646
- virtual = _this$domHelper3.virtual,
647
- stickyScroll = _this$domHelper3.stickyScroll;
631
+ var _this$domHelper2 = this.domHelper,
632
+ virtual = _this$domHelper2.virtual,
633
+ stickyScroll = _this$domHelper2.stickyScroll;
648
634
  this.rootSubscription.add(_utils.throttledWindowResize$.subscribe(function () {
649
635
  _this2.updateStickyScroll();
650
636
 
@@ -22,6 +22,10 @@ var _autoFill = require("./autoFill");
22
22
  var stateKey = 'columnDrag';
23
23
  var SCROLL_SIZE = 30;
24
24
 
25
+ function disableSelect(event) {
26
+ event.preventDefault();
27
+ }
28
+
25
29
  function sortColumns(columns, sort) {
26
30
  var res = new Array(columns.length);
27
31
  var lastColumns = (0, _toConsumableArray2.default)(columns);
@@ -75,9 +79,11 @@ function columnDrag() {
75
79
  },
76
80
  headerCellProps: (0, _utils.mergeCellProps)(col.headerCellProps, {
77
81
  onMouseDown: !isLeaf || path.length > 1 ? undefined : function (e) {
78
- if (e.button !== 0) {
82
+ if (e.button !== 0 || !e.currentTarget.contains(e.target)) {
79
83
  return;
80
- } // const cx = e.clientX
84
+ }
85
+
86
+ window.addEventListener('selectstart', disableSelect); // const cx = e.clientX
81
87
  // const width = col.width
82
88
  // const a = startIndex
83
89
  // const b = endIndex
@@ -86,7 +92,6 @@ function columnDrag() {
86
92
  // let newStartIndex = startIndex
87
93
  // let endIdx = endIndex
88
94
 
89
-
90
95
  var columnMoved = false;
91
96
  var columns = pipeline.getColumns();
92
97
 
@@ -100,6 +105,8 @@ function columnDrag() {
100
105
  var currentTarget = e.currentTarget;
101
106
  var rect = e.currentTarget.parentElement.getClientRects()[0];
102
107
  var startX = rect.left;
108
+ var mouseDownClientX = e.clientX;
109
+ var mouseDownClientY = e.clientY;
103
110
  var moveData = [];
104
111
  var allColumns = (0, _utils.collectNodes)(columns);
105
112
  var tableBodyClientRect = tableBody.getBoundingClientRect();
@@ -119,8 +126,6 @@ function columnDrag() {
119
126
  }
120
127
  };
121
128
 
122
- var stopClickPropagationFlag = false;
123
-
124
129
  function handleMouseMove(e) {
125
130
  var client = {
126
131
  clientX: e.clientX,
@@ -134,12 +139,6 @@ function columnDrag() {
134
139
  if (e.clientX - leftPosition < 20) {
135
140
  return;
136
141
  } else {
137
- // 阻止列头点击事件,防止拖动后触发列头过滤事件
138
- if (stopClickPropagationFlag === false) {
139
- stopClickPropagationFlag = true;
140
- currentTarget.addEventListener('click', stopClickPropagation);
141
- }
142
-
143
142
  e.stopPropagation();
144
143
  }
145
144
 
@@ -259,10 +258,15 @@ function columnDrag() {
259
258
  e.stopPropagation();
260
259
  document.body.removeEventListener('mousemove', handleMouseMove);
261
260
  document.body.removeEventListener('mouseup', handleMouseUp);
261
+ window.removeEventListener('selectstart', disableSelect); // 阻止列头点击事件,防止拖动后触发列头过滤事件
262
+
263
+ if (_isMoveWhenClicking(mouseDownClientX, mouseDownClientY, e.clientX, e.clientY)) {
264
+ currentTarget.addEventListener('click', stopClickPropagation);
265
+ }
266
+
262
267
  window.requestAnimationFrame(function () {
263
268
  // 取消阻止列头点击事件
264
269
  currentTarget.removeEventListener('click', stopClickPropagation);
265
- stopClickPropagationFlag = false;
266
270
  currentTarget = null;
267
271
 
268
272
  var _moveData = moveData,
@@ -343,10 +347,6 @@ function columnDrag() {
343
347
 
344
348
  document.body.addEventListener('mousemove', handleMouseMove);
345
349
  document.body.addEventListener('mouseup', handleMouseUp);
346
-
347
- document.body.onselectstart = function () {
348
- return false;
349
- };
350
350
  },
351
351
  style: style
352
352
  })
@@ -384,4 +384,15 @@ function moveAllChildren(cols, cloumnsTranslateData, width, isMinus) {
384
384
  moveAllChildren(children, cloumnsTranslateData, width);
385
385
  }
386
386
  });
387
+ }
388
+
389
+ function _isMoveWhenClicking(mouseDownClientX, mouseDownClientY, mouseUpClientX, mouseUpClientY) {
390
+ var xDiff = mouseUpClientX - mouseDownClientX;
391
+ var yDiff = mouseUpClientY - mouseDownClientY; // 鼠标点按和松开的偏移量大于5px,认为存在移动
392
+
393
+ if (Math.sqrt(xDiff * xDiff + yDiff * yDiff) > 5) {
394
+ return true;
395
+ }
396
+
397
+ return false;
387
398
  }
@@ -12,8 +12,8 @@ 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
19
  }
@@ -65,7 +65,7 @@ function filter() {
65
65
  return (0, _map2.default)(columns).call(columns, dfs);
66
66
 
67
67
  function dfs(col) {
68
- var _a, _b, _c, _d, _e;
68
+ var _a, _b, _c, _d, _e, _f, _g;
69
69
 
70
70
  var result = (0, _extends2.default)({}, col);
71
71
  var filterable = col.code && ((_a = col.features) === null || _a === void 0 ? void 0 : _a.filterable);
@@ -104,12 +104,13 @@ function filter() {
104
104
  };
105
105
 
106
106
  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), {
107
+ var colFilterIcon = (_f = (_e = col.features) === null || _e === void 0 ? void 0 : _e.filterIcon) !== null && _f !== void 0 ? _f : filterIcon;
108
+ 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), {
108
109
  title: null
109
110
  }))])), [/*#__PURE__*/_react.default.createElement(_filter2.Filter, {
110
111
  key: "filter",
111
112
  FilterPanelContent: filterPanel,
112
- filterIcon: filterIcon,
113
+ filterIcon: colFilterIcon,
113
114
  filterModel: inputFiltersMap.get(col.code),
114
115
  setFilterModel: handleFilterChanged,
115
116
  setFilter: setFilter,
@@ -158,7 +159,7 @@ function filter() {
158
159
  }));
159
160
 
160
161
  function isMatchedFilterCondition(record) {
161
- return !filtersKeys.some(function (key) {
162
+ return filtersKeys.every(function (key) {
162
163
  var _a, _b;
163
164
 
164
165
  var filterItem = inputFiltersMap.get(key);
@@ -174,21 +175,39 @@ function filter() {
174
175
  comparisonFn = (0, _filter.default)(defaultFilterOptionsMap.get('contain'));
175
176
  }
176
177
 
177
- return !comparisonFn((0, _filter.default)(filterItem))(record[key]); //不符合过滤条件,退出循环
178
+ return comparisonFn((0, _filter.default)(filterItem), filterItem)(_internals.internals.safeGetValue(columnsMap.get(key), record, -1), record);
178
179
  });
179
180
  }
180
181
 
181
- return dataSource.reduce(function (pre, record) {
182
- if (isMatchedFilterCondition(record)) {
183
- return (0, _concat.default)(pre).call(pre, [record]);
184
- }
185
-
186
- return pre;
187
- }, []);
182
+ return layeredFilter(dataSource, isMatchedFilterCondition);
188
183
  }
189
184
 
190
185
  pipeline.dataSource(processDataSource(dataSource));
191
186
  pipeline.columns(processColumns(columns));
192
187
  return pipeline;
193
188
  };
189
+ }
190
+
191
+ function layeredFilter(array, matchFn) {
192
+ return dfs(array);
193
+
194
+ function dfs(rows) {
195
+ var _context6;
196
+
197
+ var parentMatched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
198
+ return (0, _filter.default)(_context6 = (0, _map2.default)(rows).call(rows, function (row) {
199
+ var currentMatched = matchFn(row);
200
+
201
+ if ((0, _utils.isLeafNode)(row)) {
202
+ return (parentMatched || currentMatched) && (0, _extends2.default)({}, row);
203
+ }
204
+
205
+ var children = row.children;
206
+ var rowAfterFilterChildren = (0, _extends2.default)((0, _extends2.default)({}, row), {
207
+ children: dfs(children, parentMatched || currentMatched)
208
+ });
209
+ var matchedByChildren = !(0, _utils.isLeafNode)(rowAfterFilterChildren);
210
+ return (parentMatched || currentMatched || matchedByChildren) && rowAfterFilterChildren;
211
+ })).call(_context6, Boolean);
212
+ }
194
213
  }
@@ -87,6 +87,7 @@ function contextMenu() {
87
87
  }
88
88
 
89
89
  e.preventDefault();
90
+ e.stopPropagation();
90
91
  showContextMenu(e);
91
92
  };
92
93
 
@@ -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,7 +6,7 @@ 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'];