@kdcloudjs/table 1.2.1-canary.6 → 1.2.2-canary.3

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 (288) hide show
  1. package/LICENSE +568 -568
  2. package/README.md +111 -111
  3. package/dist/@kdcloudjs/table.css +1 -1
  4. package/dist/@kdcloudjs/table.js +5480 -6087
  5. package/dist/@kdcloudjs/table.js.map +1 -1
  6. package/dist/@kdcloudjs/table.min.css +1 -1
  7. package/dist/@kdcloudjs/table.min.js +18 -16
  8. package/dist/@kdcloudjs/table.min.js.map +1 -1
  9. package/dist/kd-ui-complete.less +777 -777
  10. package/es/_utils/arrayUtil.js +0 -3
  11. package/es/_utils/devwarning.js +0 -1
  12. package/es/_utils/formatUtil.js +36 -101
  13. package/es/_utils/hooks.js +21 -45
  14. package/es/_utils/index.js +0 -2
  15. package/es/_utils/numberUtil.js +32 -55
  16. package/es/_utils/omit.js +0 -2
  17. package/es/_utils/type.js +0 -2
  18. package/es/_utils/usePopper.js +81 -144
  19. package/es/config-provider/compDefaultProps.js +0 -1
  20. package/es/config-provider/configProvider.js +2 -7
  21. package/es/config-provider/defaultConfig.js +0 -1
  22. package/es/index.js +0 -2
  23. package/es/locale/locale.js +11 -50
  24. package/es/style/color/colors.less +1 -1
  25. package/es/style/core/index.less +1 -1
  26. package/es/style/core/motion/other.less +27 -27
  27. package/es/style/core/motion/slide.less +53 -53
  28. package/es/style/core/motion.less +1 -1
  29. package/es/style/core/reset.less +185 -185
  30. package/es/style/index.less +1 -1
  31. package/es/style/mixins/index.less +18 -18
  32. package/es/style/mixins/overlay.less +21 -21
  33. package/es/style/mixins/reset.less +12 -12
  34. package/es/style/themes/default.less +445 -445
  35. package/es/table/base/calculations.js +25 -75
  36. package/es/table/base/colgroup.js +0 -1
  37. package/es/table/base/empty.js +6 -6
  38. package/es/table/base/globalStyleComponent.d.ts +4 -0
  39. package/es/table/base/globalStyleComponent.js +24 -0
  40. package/es/table/base/header.js +21 -76
  41. package/es/table/base/helpers/SpanManager.js +4 -11
  42. package/es/table/base/helpers/TableDOMUtils.js +9 -34
  43. package/es/table/base/helpers/__test__/SpanManager.test.js +2 -2
  44. package/es/table/base/helpers/__test__/TableDOMUtils.test.js +0 -1
  45. package/es/table/base/helpers/getRichVisibleRectsStream.js +13 -45
  46. package/es/table/base/helpers/rowHeightManager.js +0 -28
  47. package/es/table/base/html-table.js +17 -39
  48. package/es/table/base/loading.js +8 -10
  49. package/es/table/base/renderTemplates.js +42 -60
  50. package/es/table/base/styles.d.ts +10 -0
  51. package/es/table/base/styles.js +17 -16
  52. package/es/table/base/table.js +113 -201
  53. package/es/table/base/utils.js +17 -57
  54. package/es/table/common-views.js +0 -7
  55. package/es/table/interfaces.d.ts +38 -0
  56. package/es/table/internals.js +0 -13
  57. package/es/table/pipeline/const.d.ts +3 -0
  58. package/es/table/pipeline/const.js +3 -0
  59. package/es/table/pipeline/features/autoFill.js +11 -40
  60. package/es/table/pipeline/features/autoRowSpan.js +1 -14
  61. package/es/table/pipeline/features/colGroupExtendable.js +4 -19
  62. package/es/table/pipeline/features/columnDrag.js +41 -97
  63. package/es/table/pipeline/features/columnFilter.js +12 -51
  64. package/es/table/pipeline/features/columnHover.js +1 -7
  65. package/es/table/pipeline/features/columnRangeHover.js +1 -8
  66. package/es/table/pipeline/features/columnResizeWidth.js +13 -39
  67. package/es/table/pipeline/features/contextMenu.js +22 -95
  68. package/es/table/pipeline/features/featureApi/RowDragApi.d.ts +15 -0
  69. package/es/table/pipeline/features/featureApi/RowDragApi.js +66 -0
  70. package/es/table/pipeline/features/featureApi/utils.d.ts +2 -0
  71. package/es/table/pipeline/features/featureApi/utils.js +10 -0
  72. package/es/table/pipeline/features/filter/DefaultFilterContent.js +14 -30
  73. package/es/table/pipeline/features/filter/DefaultFilterIcon.js +1 -1
  74. package/es/table/pipeline/features/filter/Filter.js +27 -51
  75. package/es/table/pipeline/features/filter/FilterPanel.js +11 -25
  76. package/es/table/pipeline/features/filter/util.js +0 -4
  77. package/es/table/pipeline/features/footerDataSource.js +0 -3
  78. package/es/table/pipeline/features/mergeCellHover.js +0 -1
  79. package/es/table/pipeline/features/multiSelect.js +15 -57
  80. package/es/table/pipeline/features/rangeSelection.js +73 -152
  81. package/es/table/pipeline/features/rowDetail.js +4 -43
  82. package/es/table/pipeline/features/rowDrag.d.ts +10 -12
  83. package/es/table/pipeline/features/rowDrag.js +491 -236
  84. package/es/table/pipeline/features/rowGrouping.js +4 -37
  85. package/es/table/pipeline/features/singleSelect.js +0 -24
  86. package/es/table/pipeline/features/sort.js +38 -96
  87. package/es/table/pipeline/features/tips.js +4 -10
  88. package/es/table/pipeline/features/treeMode.d.ts +1 -0
  89. package/es/table/pipeline/features/treeMode.js +38 -57
  90. package/es/table/pipeline/features/treeSelect.js +2 -28
  91. package/es/table/pipeline/pipeline.d.ts +3 -0
  92. package/es/table/pipeline/pipeline.js +35 -54
  93. package/es/table/pivot/cross-table/buildCrossTable.js +21 -72
  94. package/es/table/pivot/cross-table/cross-table.js +23 -31
  95. package/es/table/pivot/cross-tree-table/buildCrossTreeTable.js +22 -57
  96. package/es/table/pivot/cross-tree-table/cross-tree-table.js +36 -61
  97. package/es/table/pivot/pivot-utils/buildDrillTree.js +10 -23
  98. package/es/table/pivot/pivot-utils/builders.js +34 -74
  99. package/es/table/pivot/pivot-utils/convert-utils.js +16 -42
  100. package/es/table/pivot/pivot-utils/simpleEncode.js +0 -1
  101. package/es/table/style/index.less +1 -1
  102. package/es/table/transforms/autoRowSpan.js +1 -15
  103. package/es/table/transforms/autoWidth.js +13 -35
  104. package/es/table/transforms/buildTree.js +1 -2
  105. package/es/table/transforms/columnHover.js +9 -15
  106. package/es/table/transforms/columnRangeHover.js +12 -19
  107. package/es/table/transforms/columnResize.js +18 -42
  108. package/es/table/transforms/flatten.js +0 -3
  109. package/es/table/transforms/orderField.js +0 -3
  110. package/es/table/transforms/sort.js +42 -101
  111. package/es/table/transforms/tips.js +5 -10
  112. package/es/table/transforms/treeMode.js +36 -77
  113. package/es/table/transforms/visible.js +0 -2
  114. package/es/table/use/useResizeObserver.js +1 -4
  115. package/es/table/utils/applyTransforms.js +0 -1
  116. package/es/table/utils/browserType.js +12 -19
  117. package/es/table/utils/buildTree.js +7 -22
  118. package/es/table/utils/collectNodes.js +4 -13
  119. package/es/table/utils/console.js +0 -14
  120. package/es/table/utils/copyToClipboard.js +0 -4
  121. package/es/table/utils/element.js +14 -41
  122. package/es/table/utils/exportTableAsExcel.js +7 -43
  123. package/es/table/utils/getTreeDepth.js +4 -12
  124. package/es/table/utils/groupBy.js +4 -13
  125. package/es/table/utils/layeredFilter.js +0 -4
  126. package/es/table/utils/layeredSort.js +0 -5
  127. package/es/table/utils/makeRecursiveMapper.js +4 -15
  128. package/es/table/utils/mergeCellProps.js +6 -14
  129. package/es/table/utils/others.js +6 -19
  130. package/es/table/utils/proto.js +2 -30
  131. package/es/table/utils/smartCompare.js +4 -12
  132. package/es/table/utils/traverseColumn.js +5 -18
  133. package/es/table/utils/tree-data-helpers/StrictTreeDataHelper.js +8 -30
  134. package/es/table/utils/tree-data-helpers/TreeDataHelper.js +19 -74
  135. package/es/table/utils/uiDegrade.js +0 -5
  136. package/lib/_utils/arrayUtil.js +2 -8
  137. package/lib/_utils/devwarning.js +0 -5
  138. package/lib/_utils/formatUtil.js +36 -105
  139. package/lib/_utils/hooks.js +21 -56
  140. package/lib/_utils/index.js +2 -9
  141. package/lib/_utils/numberUtil.js +32 -63
  142. package/lib/_utils/omit.js +0 -5
  143. package/lib/_utils/react-children.js +0 -5
  144. package/lib/_utils/type.js +3 -11
  145. package/lib/_utils/usePopper.js +86 -173
  146. package/lib/config-provider/ConfigContext.js +2 -6
  147. package/lib/config-provider/compDefaultProps.js +1 -3
  148. package/lib/config-provider/configProvider.js +6 -22
  149. package/lib/config-provider/defaultConfig.js +1 -7
  150. package/lib/config-provider/index.js +1 -8
  151. package/lib/index.js +2 -8
  152. package/lib/locale/index.js +3 -11
  153. package/lib/locale/locale.js +15 -71
  154. package/lib/locale/zh-CN.js +1 -2
  155. package/lib/style/color/colors.less +1 -1
  156. package/lib/style/components.less +1 -1
  157. package/lib/style/core/index.less +1 -1
  158. package/lib/style/core/motion/other.less +27 -27
  159. package/lib/style/core/motion/slide.less +53 -53
  160. package/lib/style/core/motion.less +1 -1
  161. package/lib/style/core/reset.less +185 -185
  162. package/lib/style/index.less +1 -1
  163. package/lib/style/mixins/index.less +18 -18
  164. package/lib/style/mixins/overlay.less +21 -21
  165. package/lib/style/mixins/reset.less +12 -12
  166. package/lib/style/themes/default.less +445 -445
  167. package/lib/table/base/calculations.js +25 -86
  168. package/lib/table/base/colgroup.js +0 -5
  169. package/lib/table/base/empty.js +8 -20
  170. package/lib/table/base/globalStyleComponent.d.ts +4 -0
  171. package/lib/table/base/globalStyleComponent.js +35 -0
  172. package/lib/table/base/header.js +21 -86
  173. package/lib/table/base/helpers/SpanManager.js +6 -16
  174. package/lib/table/base/helpers/TableDOMUtils.js +9 -37
  175. package/lib/table/base/helpers/__test__/SpanManager.test.js +2 -4
  176. package/lib/table/base/helpers/__test__/TableDOMUtils.test.js +0 -5
  177. package/lib/table/base/helpers/__test__/rowHeightManager.test.js +0 -1
  178. package/lib/table/base/helpers/getRichVisibleRectsStream.js +15 -65
  179. package/lib/table/base/helpers/rowHeightManager.js +0 -33
  180. package/lib/table/base/html-table.js +17 -49
  181. package/lib/table/base/index.js +0 -2
  182. package/lib/table/base/loading.js +8 -14
  183. package/lib/table/base/renderTemplates.js +45 -76
  184. package/lib/table/base/styles.d.ts +10 -0
  185. package/lib/table/base/styles.js +24 -42
  186. package/lib/table/base/table.js +125 -245
  187. package/lib/table/base/utils.js +27 -109
  188. package/lib/table/common-views.js +4 -24
  189. package/lib/table/index.js +0 -13
  190. package/lib/table/interfaces.d.ts +38 -0
  191. package/lib/table/internals.js +2 -17
  192. package/lib/table/pipeline/const.d.ts +3 -0
  193. package/lib/table/pipeline/const.js +9 -0
  194. package/lib/table/pipeline/features/autoFill.js +14 -53
  195. package/lib/table/pipeline/features/autoRowSpan.js +1 -19
  196. package/lib/table/pipeline/features/buildTree.js +0 -2
  197. package/lib/table/pipeline/features/colGroupExtendable.js +6 -35
  198. package/lib/table/pipeline/features/columnDrag.js +41 -103
  199. package/lib/table/pipeline/features/columnFilter.js +12 -65
  200. package/lib/table/pipeline/features/columnHover.js +1 -11
  201. package/lib/table/pipeline/features/columnRangeHover.js +1 -13
  202. package/lib/table/pipeline/features/columnResizeWidth.js +18 -63
  203. package/lib/table/pipeline/features/contextMenu.js +24 -121
  204. package/lib/table/pipeline/features/featureApi/RowDragApi.d.ts +15 -0
  205. package/lib/table/pipeline/features/featureApi/RowDragApi.js +72 -0
  206. package/lib/table/pipeline/features/featureApi/utils.d.ts +2 -0
  207. package/lib/table/pipeline/features/featureApi/utils.js +17 -0
  208. package/lib/table/pipeline/features/filter/DefaultFilterContent.js +17 -52
  209. package/lib/table/pipeline/features/filter/DefaultFilterIcon.js +1 -4
  210. package/lib/table/pipeline/features/filter/Filter.js +30 -77
  211. package/lib/table/pipeline/features/filter/FilterPanel.js +14 -44
  212. package/lib/table/pipeline/features/filter/index.js +0 -5
  213. package/lib/table/pipeline/features/filter/util.js +2 -10
  214. package/lib/table/pipeline/features/footerDataSource.js +1 -12
  215. package/lib/table/pipeline/features/index.js +0 -23
  216. package/lib/table/pipeline/features/mergeCellHover.js +0 -5
  217. package/lib/table/pipeline/features/multiSelect.js +15 -71
  218. package/lib/table/pipeline/features/rangeSelection.js +75 -173
  219. package/lib/table/pipeline/features/rowDetail.js +4 -67
  220. package/lib/table/pipeline/features/rowDrag.d.ts +10 -12
  221. package/lib/table/pipeline/features/rowDrag.js +494 -252
  222. package/lib/table/pipeline/features/rowGrouping.js +4 -57
  223. package/lib/table/pipeline/features/singleSelect.js +0 -34
  224. package/lib/table/pipeline/features/sort.js +37 -115
  225. package/lib/table/pipeline/features/tips.js +4 -19
  226. package/lib/table/pipeline/features/treeMode.d.ts +1 -0
  227. package/lib/table/pipeline/features/treeMode.js +40 -80
  228. package/lib/table/pipeline/features/treeSelect.js +2 -36
  229. package/lib/table/pipeline/index.js +2 -10
  230. package/lib/table/pipeline/pipeline.d.ts +3 -0
  231. package/lib/table/pipeline/pipeline.js +36 -65
  232. package/lib/table/pivot/cross-table/buildCrossTable.js +21 -83
  233. package/lib/table/pivot/cross-table/constants.js +1 -2
  234. package/lib/table/pivot/cross-table/cross-table.js +25 -42
  235. package/lib/table/pivot/cross-table/index.js +0 -4
  236. package/lib/table/pivot/cross-tree-table/buildCrossTreeTable.js +22 -70
  237. package/lib/table/pivot/cross-tree-table/cross-tree-table.js +37 -73
  238. package/lib/table/pivot/cross-tree-table/index.js +0 -3
  239. package/lib/table/pivot/pivot-utils/buildDrillTree.js +10 -29
  240. package/lib/table/pivot/pivot-utils/builders.js +34 -85
  241. package/lib/table/pivot/pivot-utils/convert-utils.js +16 -60
  242. package/lib/table/pivot/pivot-utils/index.js +0 -7
  243. package/lib/table/pivot/pivot-utils/simpleEncode.js +0 -2
  244. package/lib/table/style/css.js +0 -1
  245. package/lib/table/style/index.js +0 -1
  246. package/lib/table/style/index.less +1 -1
  247. package/lib/table/transforms/autoRowSpan.js +1 -21
  248. package/lib/table/transforms/autoWidth.js +15 -58
  249. package/lib/table/transforms/buildTree.js +1 -4
  250. package/lib/table/transforms/columnHover.js +9 -22
  251. package/lib/table/transforms/columnRangeHover.js +12 -27
  252. package/lib/table/transforms/columnResize.js +20 -63
  253. package/lib/table/transforms/flatten.js +0 -5
  254. package/lib/table/transforms/index.js +0 -12
  255. package/lib/table/transforms/orderField.js +0 -7
  256. package/lib/table/transforms/sort.js +44 -127
  257. package/lib/table/transforms/tips.js +5 -20
  258. package/lib/table/transforms/treeMode.js +38 -106
  259. package/lib/table/transforms/visible.js +0 -7
  260. package/lib/table/transforms/warnTransformsDeprecated.js +0 -4
  261. package/lib/table/use/useResizeObserver.js +2 -10
  262. package/lib/table/utils/applyTransforms.js +0 -2
  263. package/lib/table/utils/browserType.js +14 -23
  264. package/lib/table/utils/buildTree.js +7 -33
  265. package/lib/table/utils/collectNodes.js +4 -18
  266. package/lib/table/utils/console.js +2 -19
  267. package/lib/table/utils/copyToClipboard.js +1 -8
  268. package/lib/table/utils/element.js +14 -46
  269. package/lib/table/utils/exportTableAsExcel.js +7 -52
  270. package/lib/table/utils/getTreeDepth.js +4 -17
  271. package/lib/table/utils/groupBy.js +4 -17
  272. package/lib/table/utils/index.js +0 -22
  273. package/lib/table/utils/isGroupColumn.js +0 -3
  274. package/lib/table/utils/isLeafNode.js +0 -1
  275. package/lib/table/utils/keyCode.js +1 -2
  276. package/lib/table/utils/layeredFilter.js +0 -10
  277. package/lib/table/utils/layeredSort.js +0 -10
  278. package/lib/table/utils/makeRecursiveMapper.js +4 -24
  279. package/lib/table/utils/mergeCellProps.js +6 -18
  280. package/lib/table/utils/others.js +7 -36
  281. package/lib/table/utils/proto.js +3 -35
  282. package/lib/table/utils/selectColumn.js +2 -5
  283. package/lib/table/utils/smartCompare.js +4 -13
  284. package/lib/table/utils/traverseColumn.js +5 -25
  285. package/lib/table/utils/tree-data-helpers/StrictTreeDataHelper.js +10 -41
  286. package/lib/table/utils/tree-data-helpers/TreeDataHelper.js +21 -90
  287. package/lib/table/utils/uiDegrade.js +1 -8
  288. package/package.json +218 -218
@@ -1,39 +1,31 @@
1
1
  "use strict";
2
2
 
3
3
  var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
4
-
5
4
  var _mapInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/map");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
8
-
9
6
  Object.defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
9
  exports.ROW_DRAG_COLUMN_CODE = void 0;
13
10
  exports.rowDrag = rowDrag;
14
- exports.rowDragKey = void 0;
15
-
11
+ exports.rowDragOptionsKey = exports.rowDragKey = void 0;
16
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
17
-
18
- var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
19
-
20
13
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
21
-
14
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
15
+ var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
16
+ var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find-index"));
22
17
  var _react = _interopRequireDefault(require("react"));
23
-
24
18
  var _rxjs = require("rxjs");
25
-
26
19
  var _operators = require("rxjs/operators");
27
-
28
20
  var _classnames = _interopRequireDefault(require("classnames"));
29
-
30
21
  var _styles = require("../../base/styles");
31
-
32
- var ROW_DRAG_COLUMN_CODE = '$_row_drag_column_&';
33
- exports.ROW_DRAG_COLUMN_CODE = ROW_DRAG_COLUMN_CODE;
34
- var rowDragKey = 'rowDragKey';
35
- exports.rowDragKey = rowDragKey;
22
+ var _const = require("../const");
23
+ var _internals = require("../../internals");
24
+ var ROW_DRAG_COLUMN_CODE = exports.ROW_DRAG_COLUMN_CODE = '$_row_drag_column_&';
25
+ var rowDragKey = exports.rowDragKey = 'rowDragKey';
26
+ var rowDragOptionsKey = exports.rowDragOptionsKey = 'rowDragOptions';
36
27
  var SCROLL_OFFSET = 30;
28
+ var SCROLL_START_OFFSET = 20;
37
29
  var defaultRowDragColumn = {
38
30
  name: '拖拽列',
39
31
  code: ROW_DRAG_COLUMN_CODE,
@@ -60,189 +52,255 @@ var defaultRowDragColumn = {
60
52
  }));
61
53
  }
62
54
  };
63
-
64
55
  function rowDrag(opt) {
65
56
  return function rowDragStep(pipeline) {
66
57
  var _context;
67
-
68
58
  var tableBody = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.tableBody;
69
59
  var artTable = pipeline.ref.current.domHelper && pipeline.ref.current.domHelper.artTable;
60
+ var rowDragApi = pipeline.addFeatureApi(_const.FeatureName.rowDrag);
61
+ pipeline.setFeatureOptions(rowDragOptionsKey, opt);
70
62
  if (!tableBody) return pipeline;
71
63
  var dataSource = pipeline.getDataSource();
72
- var rowHeight = (opt === null || opt === void 0 ? void 0 : opt.rowHeight) || 48;
73
-
74
- var handleDragStrat = function handleDragStrat(event) {
75
- var _a; // 开始拖拽
76
-
77
-
78
- artTable.classList.add((0, _classnames.default)(_styles.Classes.rowDragging));
79
- (_a = opt === null || opt === void 0 ? void 0 : opt.onDragStart) === null || _a === void 0 ? void 0 : _a.call(opt, event);
64
+ var getRowDragEvent = function getRowDragEvent(dropTargetEvent, isFinished) {
65
+ var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'targetTable';
66
+ var dragItem = dropTargetEvent.dragItem,
67
+ x = dropTargetEvent.x,
68
+ y = dropTargetEvent.y,
69
+ dropZoneTarget = dropTargetEvent.dropZoneTarget,
70
+ startDropZoneTagret = dropTargetEvent.startDropZoneTagret,
71
+ event = dropTargetEvent.event,
72
+ dropZoneTableParams = dropTargetEvent.dropZoneTableParams;
73
+ var getDataSource = dropZoneTableParams.getDataSource,
74
+ getTreeModeOptions = dropZoneTableParams.getTreeModeOptions,
75
+ getRowDragOptions = dropZoneTableParams.getRowDragOptions;
76
+ var dataSource = getDataSource();
77
+ var treeModeOptions = getTreeModeOptions();
78
+ var rowDragOptions = getRowDragOptions();
79
+ var allowDragIntoRow = !!treeModeOptions && (rowDragOptions === null || rowDragOptions === void 0 ? void 0 : rowDragOptions.allowDragIntoRow);
80
+ var isLeave = !isMouseOnDropTarget(event, dropZoneTarget);
81
+ var overIndex = -1;
82
+ var direction = 'bottom';
83
+ if (!isLeave) {
84
+ var overDragItem = getDragRowItem(event.target, dropZoneTarget, dataSource);
85
+ if (overDragItem) {
86
+ var rowIndex = overDragItem.rowIndex,
87
+ cell = overDragItem.cell;
88
+ overIndex = rowIndex;
89
+ direction = getDirection(cell, event.clientY, allowDragIntoRow);
90
+ }
91
+ }
92
+ var overRow = overIndex >= 0 ? dataSource[overIndex] : null;
93
+ return {
94
+ startRowIndex: dragItem.rowIndex,
95
+ startRow: dragItem.row,
96
+ endRowIndex: overIndex,
97
+ endRow: overRow,
98
+ startDropZoneTagret: startDropZoneTagret,
99
+ dropZoneTarget: dropZoneTarget,
100
+ event: event,
101
+ dragPosition: direction,
102
+ isFinished: isFinished,
103
+ source: source,
104
+ x: x,
105
+ y: y
106
+ };
80
107
  };
81
-
82
- var handleDragMove = function handleDragMove(event) {
108
+ var onDragging = function onDragging(event) {
83
109
  var _a;
84
-
85
- (_a = opt === null || opt === void 0 ? void 0 : opt.onDragMove) === null || _a === void 0 ? void 0 : _a.call(opt, event);
86
- pipeline.setStateAtKey(rowDragKey, event);
110
+ var rowDragEvent = getRowDragEvent(event, false, 'targetTable');
111
+ (_a = opt === null || opt === void 0 ? void 0 : opt.onDragMove) === null || _a === void 0 ? void 0 : _a.call(opt, rowDragEvent);
112
+ pipeline.setStateAtKey(rowDragKey, rowDragEvent);
87
113
  };
88
-
89
- var handleDragEnd = function handleDragEnd(event, isValid) {
114
+ var onDragStop = function onDragStop(event, source) {
90
115
  var _a;
91
-
92
- artTable.classList.remove((0, _classnames.default)(_styles.Classes.rowDragging));
93
- pipeline.setStateAtKey(rowDragKey, event); // 超出拖拽范围不触发dragend事件
94
-
95
- if (isValid) {
96
- (_a = opt === null || opt === void 0 ? void 0 : opt.onDragEnd) === null || _a === void 0 ? void 0 : _a.call(opt, event);
97
- }
116
+ var rowDragEvent = getRowDragEvent(event, true, source);
117
+ pipeline.setStateAtKey(rowDragKey, rowDragEvent);
118
+ (_a = opt === null || opt === void 0 ? void 0 : opt.onDragEnd) === null || _a === void 0 ? void 0 : _a.call(opt, rowDragEvent);
98
119
  };
99
-
100
- var getDragEvent = function getDragEvent(startRowInfo, endRowInfo, _ref) {
101
- var isFinished = _ref.isFinished,
102
- _ref$dragPosition = _ref.dragPosition,
103
- dragPosition = _ref$dragPosition === void 0 ? 'bottom' : _ref$dragPosition;
104
- return {
105
- startRowIndex: startRowInfo.rowIndex,
106
- startRow: startRowInfo.row,
107
- endRowIndex: endRowInfo.rowIndex,
108
- endRow: endRowInfo.row,
109
- dragPosition: dragPosition,
110
- isFinished: isFinished
111
- };
120
+ var onDragStart = function onDragStart(event) {
121
+ var _a;
122
+ var rowDragEvent = getRowDragEvent(event, false);
123
+ (_a = opt === null || opt === void 0 ? void 0 : opt.onDragStart) === null || _a === void 0 ? void 0 : _a.call(opt, rowDragEvent);
112
124
  };
113
-
114
- var updateScrollPosition = function updateScrollPosition(mouseMoveEvent) {
115
- if (opt === null || opt === void 0 ? void 0 : opt.suppressScrollMove) return;
116
- var clientY = mouseMoveEvent.clientY;
117
- var tableBodyClientRect = tableBody.getBoundingClientRect();
118
- var top = tableBodyClientRect.top,
119
- height = tableBodyClientRect.height;
120
-
121
- if (clientY + SCROLL_OFFSET >= top + height) {
122
- pipeline.ref.current.domHelper.tableBody.scrollTop += SCROLL_OFFSET;
123
- }
124
-
125
- if (clientY + SCROLL_OFFSET <= top) {
126
- pipeline.ref.current.domHelper.tableBody.scrollTop -= SCROLL_OFFSET;
125
+ var onDragLeave = function onDragLeave(event) {
126
+ var _a;
127
+ var rowDragEvent = getRowDragEvent(event, false);
128
+ pipeline.setStateAtKey(rowDragKey, rowDragEvent);
129
+ (_a = opt === null || opt === void 0 ? void 0 : opt.onDragLeave) === null || _a === void 0 ? void 0 : _a.call(opt, rowDragEvent);
130
+ };
131
+ var onDragEnter = function onDragEnter(event) {
132
+ var _a;
133
+ var rowDragEvent = getRowDragEvent(event, false);
134
+ pipeline.setStateAtKey(rowDragKey, rowDragEvent);
135
+ (_a = opt === null || opt === void 0 ? void 0 : opt.onDragEnter) === null || _a === void 0 ? void 0 : _a.call(opt, rowDragEvent);
136
+ };
137
+ var currentDropZone = {
138
+ getContainer: function getContainer() {
139
+ var lastPipeline = pipeline.getLastPipeline();
140
+ return lastPipeline.ref.current.domHelper.tableBody;
141
+ },
142
+ onDragEnter: onDragEnter,
143
+ onDragLeave: onDragLeave,
144
+ onDragging: onDragging,
145
+ onDragStop: onDragStop,
146
+ isTable: true,
147
+ tableParams: {
148
+ getDataSource: function getDataSource() {
149
+ var lastPipeline = pipeline.getLastPipeline();
150
+ return lastPipeline.getDataSource();
151
+ },
152
+ getTreeModeOptions: function getTreeModeOptions() {
153
+ var lastPipeline = pipeline.getLastPipeline();
154
+ return lastPipeline.getFeatureOptions('treeModeOptions');
155
+ },
156
+ getRowDragOptions: function getRowDragOptions() {
157
+ var lastPipeline = pipeline.getLastPipeline();
158
+ return lastPipeline.getFeatureOptions('rowDragOptions');
159
+ }
127
160
  }
128
161
  };
129
-
130
- var onMouseDown = function onMouseDown(mouseDownEvent) {
162
+ var onMouseDown = function onMouseDown(event) {
131
163
  var _a;
132
-
133
- var startRowInfo = getTargetRowInfo(mouseDownEvent.target, tableBody, dataSource);
134
- var endRowInfo = startRowInfo;
135
- if (!startRowInfo || startRowInfo.code !== rowDragColumn.code) return;
136
- if ((_a = opt === null || opt === void 0 ? void 0 : opt.isDisabled) === null || _a === void 0 ? void 0 : _a.call(opt, startRowInfo.row, startRowInfo.rowIndex)) return; // 默认拖拽插入的位置是向下
137
-
138
- var dragPosition = 'bottom';
139
- var isOutOfRange = false;
164
+ var mouseDownEvent = event.nativeEvent;
165
+ var startDataItem = getDragRowItem(mouseDownEvent.target, tableBody, dataSource);
166
+ if (!startDataItem || startDataItem.code !== rowDragColumn.code) return;
167
+ if ((_a = opt === null || opt === void 0 ? void 0 : opt.isDisabled) === null || _a === void 0 ? void 0 : _a.call(opt, startDataItem.row, startDataItem.rowIndex)) return;
140
168
  var isValidDrag = false;
141
- var dragStartEvent = getDragEvent(startRowInfo, endRowInfo, {
142
- isFinished: false,
143
- dragPosition: 'bottom'
144
- });
145
- handleDragStrat(dragStartEvent);
146
- var tableWidth = tableBody.clientWidth;
147
- var startRowRects = startRowInfo.cell.getBoundingClientRect(); // 光标位置距离初始拖拽行的偏移量
148
-
149
- var mouseDownClientY = mouseDownEvent.clientY;
150
- var startOffset = mouseDownEvent.clientY - startRowRects.top;
151
- var dragElement = createDragElement(startRowRects, tableWidth, rowHeight); // 可拖拽的范围
152
-
153
- var dragRange = getDragRange(tableBody, {
154
- startOffset: startOffset,
155
- rowHeight: rowHeight
156
- });
157
- var mousePosition = {
158
- x: mouseDownEvent.clientX,
159
- y: mouseDownEvent.clientY
169
+ var isDragging = false;
170
+ var dragElement = null;
171
+ var dragLine = null;
172
+ var lastDropTarget = null;
173
+ var timeoutId = null;
174
+ var intervalId = null;
175
+ var updateScrollPosition = function updateScrollPosition(tableBody, mouseMoveEvent) {
176
+ if (opt === null || opt === void 0 ? void 0 : opt.suppressScrollMove) return;
177
+ if (timeoutId) {
178
+ clearTimeout(timeoutId);
179
+ }
180
+ if (intervalId) {
181
+ clearInterval(intervalId);
182
+ }
183
+ var moveOffset = getScrollMoveOffset(tableBody, mouseMoveEvent);
184
+ if (moveOffset === 0) {
185
+ return;
186
+ }
187
+ timeoutId = setTimeout(function () {
188
+ intervalId = setInterval(function () {
189
+ tableBody.scrollTop += moveOffset;
190
+ }, 100);
191
+ }, 500);
160
192
  };
161
- var mousemove$ = (0, _rxjs.fromEvent)(window, 'mousemove');
162
- var mouseup$ = (0, _rxjs.fromEvent)(window, 'mouseup');
163
-
164
- var scrollCallback = function scrollCallback(event) {
165
- // 在当前表格内滚动不处理
166
- if (event.target === tableBody) return;
167
- dragRange = getDragRange(tableBody, {
168
- startOffset: startOffset,
169
- rowHeight: rowHeight
193
+ var handleDragStart = function handleDragStart(mouseDownEvent) {
194
+ var _a;
195
+ dragElement = createDragElement(mouseDownEvent, tableBody); // 创建拖拽悬浮框
196
+ var isTreeTable = !!pipeline.getFeatureOptions('treeModeOptions');
197
+ dragLine = createDragLine(isTreeTable); // 创建拖拽插入指示线
198
+ var dragText = (opt === null || opt === void 0 ? void 0 : opt.rowDragText) ? (_a = opt === null || opt === void 0 ? void 0 : opt.rowDragText) === null || _a === void 0 ? void 0 : _a.call(opt, startDataItem.row, startDataItem.rowIndex) : "\u7B2C".concat(startDataItem.rowIndex, "\u884C\u5185\u5BB9");
199
+ setDragText(dragElement, dragText); // 设置悬浮框显示文本
200
+ artTable.classList.add((0, _classnames.default)(_styles.Classes.rowDragging));
201
+ rowDragApi.setDragStatus('start');
202
+ var dragEvent = createDropTargetEvent(currentDropZone, mouseDownEvent, startDataItem, tableBody);
203
+ onDragStart(dragEvent);
204
+ };
205
+ var handleDragMove = function handleDragMove(mouseMoveEvent) {
206
+ positionDragElemment(dragElement, mouseMoveEvent); // 更新拖拽悬浮框位置
207
+ rowDragApi.setDragStatus('dragging');
208
+ setDragElementIcon(dragElement, 'move');
209
+ var rowDropZones = rowDragApi.getRowDropZone();
210
+ var validDropZones = (0, _concat.default)(rowDropZones).call(rowDropZones, currentDropZone); // 可放置区域加上自身
211
+ var dropTarget = (0, _find.default)(validDropZones).call(validDropZones, function (zone) {
212
+ return isMouseOnDropTarget(mouseMoveEvent, zone.getContainer());
213
+ }) || null;
214
+ if (dropTarget !== lastDropTarget) {
215
+ // 拖拽离开表格
216
+ if (lastDropTarget !== null && dropTarget === null) {
217
+ if (lastDropTarget.onDragLeave) {
218
+ setDragElementIcon(dragElement, 'notAllowed');
219
+ hiddenDragLine(dragLine);
220
+ var dragEvent = createDropTargetEvent(lastDropTarget, mouseMoveEvent, startDataItem, tableBody);
221
+ lastDropTarget.onDragLeave(dragEvent);
222
+ }
223
+ }
224
+ // 拖拽进入表格
225
+ if (lastDropTarget === null && dropTarget !== null) {
226
+ if (dropTarget.onDragEnter) {
227
+ setDragElementIcon(dragElement, 'move');
228
+ if (dropTarget.isTable) {
229
+ showDragLine(dragLine);
230
+ }
231
+ var _dragEvent = createDropTargetEvent(dropTarget, mouseMoveEvent, startDataItem, tableBody);
232
+ dropTarget.onDragEnter(_dragEvent);
233
+ }
234
+ }
235
+ lastDropTarget = dropTarget;
236
+ }
237
+ if (dropTarget) {
238
+ // 拖拽区域在表格中,更新拖拽插入指示线位置
239
+ if (dropTarget.isTable) {
240
+ positionDragLine({
241
+ lineElement: dragLine,
242
+ dragZone: dropTarget,
243
+ event: mouseMoveEvent
244
+ });
245
+ updateScrollPosition(dropTarget.getContainer(), mouseMoveEvent); // 拖拽到底时让滚动条可以滚动
246
+ }
247
+ if (dropTarget.onDragging) {
248
+ var _dragEvent2 = createDropTargetEvent(dropTarget, mouseMoveEvent, startDataItem, tableBody);
249
+ dropTarget.onDragging(_dragEvent2);
250
+ }
251
+ }
252
+ };
253
+ var handleDragStop = function handleDragStop(mouseUpEvent) {
254
+ removeElement(dragElement);
255
+ removeElement(dragLine);
256
+ artTable.classList.remove((0, _classnames.default)(_styles.Classes.rowDragging));
257
+ rowDragApi.setDragStatus('finished');
258
+ clearTimeout(timeoutId);
259
+ clearInterval(intervalId);
260
+ var rowDropZones = rowDragApi.getRowDropZone();
261
+ var validDropZones = (0, _concat.default)(rowDropZones).call(rowDropZones, currentDropZone);
262
+ var dropTarget = (0, _find.default)(validDropZones).call(validDropZones, function (zone) {
263
+ return isMouseOnDropTarget(mouseUpEvent, zone.getContainer());
170
264
  });
171
- var isOutOfRange = isOutOfDragRange(mousePosition, dragRange);
172
- updateCurSorStyle(isOutOfRange);
265
+ if (dropTarget && dropTarget.onDragStop) {
266
+ var dragEvent = createDropTargetEvent(dropTarget, mouseUpEvent, startDataItem, tableBody);
267
+ dropTarget.onDragStop(dragEvent);
268
+ // 原表也触发onDragStop, 方便上层调用
269
+ if (dropTarget !== currentDropZone) {
270
+ currentDropZone.onDragStop(dragEvent, 'startTable');
271
+ }
272
+ }
173
273
  };
174
-
175
- document.addEventListener('scroll', scrollCallback, true);
176
- var rowDrag$ = mousemove$.pipe((0, _filterInstanceProperty(_operators))(function (mouseMoveEvent) {
177
- var mouseMoveClientY = mouseMoveEvent.clientY; // 上下移动偏移量大于5才是有效的拖拽
178
-
274
+ var mousemove$ = (0, _rxjs.fromEvent)(window, 'mousemove');
275
+ var mouseup$ = (0, _rxjs.fromEvent)(window, 'mouseup');
276
+ var rowDragMove$ = mousemove$.pipe((0, _filterInstanceProperty(_operators))(function (mouseMoveEvent) {
277
+ var mouseMoveClientY = mouseMoveEvent.clientY;
278
+ var mouseDownClientY = mouseDownEvent.clientY;
279
+ // 上下移动偏移量大于5才是有效的拖拽
179
280
  if (Math.abs(mouseMoveClientY - mouseDownClientY) > 5) {
180
281
  isValidDrag = true;
181
282
  }
182
-
183
283
  return isValidDrag;
184
284
  }), (0, _mapInstanceProperty(_operators))(function (mouseMoveEvent) {
185
- var clientX = mouseMoveEvent.clientX,
186
- clientY = mouseMoveEvent.clientY;
187
- var tagretRow = getTargetRowInfo(mouseMoveEvent.target, tableBody, dataSource);
188
-
189
- if (tagretRow) {
190
- endRowInfo = tagretRow;
285
+ if (!isDragging) {
286
+ isDragging = true;
287
+ handleDragStart(mouseDownEvent);
288
+ handleDragMove(mouseDownEvent);
191
289
  }
192
-
193
- var targetRowRects = endRowInfo.cell.getBoundingClientRect(); // 判断拖拽插入的位置,拖拽框上边框位于目标行之上则向上插入,否则向下插入
194
-
195
- var isMoveToTop = clientY - startOffset < targetRowRects.top;
196
- dragPosition = isMoveToTop ? 'top' : 'bottom';
197
- isOutOfRange = isOutOfDragRange({
198
- x: clientX,
199
- y: clientY
200
- }, dragRange);
201
- mousePosition = {
202
- x: clientX,
203
- y: clientY
204
- };
205
- updateScrollPosition(mouseMoveEvent); // 拖拽到底时让滚动条可以滚动
206
-
207
- updateDragElementPosition(dragElement, dragRange, {
208
- x: clientX,
209
- y: clientY,
210
- startOffset: startOffset
211
- });
212
- updateCurSorStyle(isOutOfRange);
213
- return {
214
- startRowInfo: startRowInfo,
215
- endRowInfo: endRowInfo,
216
- dragPosition: dragPosition
217
- };
290
+ handleDragMove(mouseMoveEvent);
218
291
  }), (0, _operators.takeUntil)(mouseup$));
219
- rowDrag$.subscribe({
220
- next: function next(_ref2) {
221
- var startRowInfo = _ref2.startRowInfo,
222
- endRowInfo = _ref2.endRowInfo,
223
- dragPosition = _ref2.dragPosition;
224
- var dragMoveEvent = getDragEvent(startRowInfo, endRowInfo, {
225
- isFinished: false,
226
- dragPosition: dragPosition
227
- });
228
- handleDragMove(dragMoveEvent);
229
- },
230
- complete: function complete() {
231
- var dragEndEvent = getDragEvent(startRowInfo, endRowInfo, {
232
- isFinished: true,
233
- dragPosition: dragPosition
234
- });
235
- var isValid = isValidDrag && !isOutOfRange;
236
- handleDragEnd(dragEndEvent, isValid);
237
- removeDragElement(dragElement);
238
- removeCurSorStyle();
239
- document.removeEventListener('scroll', scrollCallback, true);
292
+ rowDragMove$.subscribe();
293
+ var rowDragEnd$ = mouseup$.pipe((0, _mapInstanceProperty(_operators))(function (mouseUpEvent) {
294
+ handleDragStop(mouseUpEvent);
295
+ })).subscribe({
296
+ next: function next() {
297
+ rowDragEnd$.unsubscribe();
240
298
  }
241
299
  });
242
300
  };
243
-
244
301
  var rowDragColumn = (opt === null || opt === void 0 ? void 0 : opt.rowDragColumn) || defaultRowDragColumn;
245
302
  pipeline.setFeatureOptions('rowDragColumnKey', rowDragColumn.code);
303
+ rowDragApi.setRowDropZoneParams(currentDropZone);
246
304
  var nextColumns = (0, _slice.default)(_context = pipeline.getColumns()).call(_context);
247
305
  nextColumns.unshift(rowDragColumn);
248
306
  pipeline.columns(nextColumns);
@@ -250,16 +308,28 @@ function rowDrag(opt) {
250
308
  onMouseDown: onMouseDown
251
309
  });
252
310
  pipeline.appendRowPropsGetter(function (row, rowIndex) {
253
- var _cx;
254
-
255
311
  var rowDragEvent = pipeline.getStateAtKey(rowDragKey) || {};
312
+ var dragStatus = rowDragApi.getDragStatus();
256
313
  var startRowIndex = rowDragEvent.startRowIndex,
257
- endRowIndex = rowDragEvent.endRowIndex,
258
- isFinished = rowDragEvent.isFinished,
259
- dragPosition = rowDragEvent.dragPosition;
314
+ endRowIndex = rowDragEvent.endRowIndex,
315
+ endRow = rowDragEvent.endRow,
316
+ isFinished = rowDragEvent.isFinished,
317
+ dragPosition = rowDragEvent.dragPosition;
260
318
  var isFooterCell = row[pipeline.getFeatureOptions('footerRowMetaKey')];
261
- if (isFooterCell || isFinished || rowIndex !== startRowIndex && rowIndex !== endRowIndex) return;
262
- var className = (0, _classnames.default)((_cx = {}, (0, _defineProperty2.default)(_cx, _styles.Classes.rowDragStart, rowIndex === startRowIndex), (0, _defineProperty2.default)(_cx, _styles.Classes.rowDragEnd, rowIndex === endRowIndex), (0, _defineProperty2.default)(_cx, _styles.Classes.rowDragEndToTop, rowIndex === endRowIndex && dragPosition === 'top'), (0, _defineProperty2.default)(_cx, _styles.Classes.rowDragEndToBottom, rowIndex === endRowIndex && dragPosition === 'bottom'), _cx));
319
+ var treeModeOptions = pipeline.getFeatureOptions('treeModeOptions');
320
+ var isTreeTable = !!treeModeOptions;
321
+ if (isFooterCell || isFinished || !isTreeTable && rowIndex !== startRowIndex && rowIndex !== endRowIndex) return;
322
+ var parentRowKeyIndex = -1;
323
+ if (isTreeTable && endRow) {
324
+ var _context2;
325
+ var treeMetaKey = treeModeOptions.treeMetaKey;
326
+ var parentRowKey = endRow[treeMetaKey].parentRowKey;
327
+ var primaryKey = pipeline.ensurePrimaryKey('rowDrag');
328
+ parentRowKeyIndex = (0, _findIndex.default)(_context2 = pipeline.getDataSource()).call(_context2, function (row) {
329
+ return _internals.internals.safeGetRowKey(primaryKey, row, -1) === parentRowKey;
330
+ });
331
+ }
332
+ var className = (0, _classnames.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, _styles.Classes.rowDragStart, rowIndex === startRowIndex && dragStatus !== 'finished'), _styles.Classes.rowDragEnd, rowIndex === endRowIndex), _styles.Classes.rowDragEndParent, isTreeTable && rowIndex === parentRowKeyIndex), _styles.Classes.rowDragEndInto, rowIndex === endRowIndex && dragPosition === 'into'), _styles.Classes.rowDragEndToTop, rowIndex === endRowIndex && dragPosition === 'top'), _styles.Classes.rowDragEndToBottom, rowIndex === endRowIndex && dragPosition === 'bottom'));
263
333
  return {
264
334
  className: className
265
335
  };
@@ -267,8 +337,7 @@ function rowDrag(opt) {
267
337
  return pipeline;
268
338
  };
269
339
  }
270
-
271
- function getTargetRowInfo(target, tableBody, record) {
340
+ function getDragRowItem(target, tableBody, record) {
272
341
  while (target && tableBody.contains(target)) {
273
342
  if (target.getAttribute('data-role') === 'table-cell') {
274
343
  var code = target.getAttribute('data-code');
@@ -283,102 +352,275 @@ function getTargetRowInfo(target, tableBody, record) {
283
352
  cell: target
284
353
  };
285
354
  }
286
-
287
355
  target = target.parentElement;
288
356
  }
289
-
290
357
  return null;
291
358
  }
292
-
359
+ function findTargetRow(target, tableBody) {
360
+ while (target && tableBody.contains(target)) {
361
+ if (target.getAttribute('data-role') === 'table-row') {
362
+ return target;
363
+ }
364
+ target = target.parentElement;
365
+ }
366
+ return null;
367
+ }
293
368
  function isEleInFooter(target) {
294
369
  while (target && !target.classList.contains(_styles.Classes.artTable)) {
295
370
  if (target.classList.contains(_styles.Classes.tableFooter)) {
296
371
  return true;
297
372
  }
298
-
299
373
  target = target.parentElement;
300
374
  }
301
-
302
375
  return false;
303
376
  }
304
-
305
- function createDragElement(rects, tableWidth, rowHeight) {
306
- var _context2, _context3, _context4;
307
-
308
- var x = rects.x,
309
- y = rects.y;
310
- var dragMoveElement = document.createElement('div');
311
- dragMoveElement.className = (0, _classnames.default)(_styles.Classes.rowDragElement);
312
- dragMoveElement.style.cssText = (0, _concat.default)(_context2 = (0, _concat.default)(_context3 = (0, _concat.default)(_context4 = "position:fixed;z-index:9999;left:".concat(x, "px;top:")).call(_context4, y, "px;pointer-events:none;width:")).call(_context3, tableWidth, "px;height:")).call(_context2, rowHeight, "px;background:var(--primary-color);opacity: 0.1;");
313
- document.body.appendChild(dragMoveElement);
314
- return dragMoveElement;
315
- }
316
-
317
- function updateDragElementPosition(element, dragRange, _ref3) {
318
- var x = _ref3.x,
319
- y = _ref3.y,
320
- startOffset = _ref3.startOffset;
321
- var validPosition = getValidPosition({
322
- x: x,
323
- y: y
324
- }, dragRange);
325
- element.style.top = validPosition.y - startOffset + 'px';
326
- return element;
377
+ function createDragElement(mouseDownEvent, tableBody) {
378
+ var _context3, _context4;
379
+ var ELEMENT_TEMPLATE = (0, _concat.default)(_context3 = (0, _concat.default)(_context4 = "<div class='".concat(_styles.Classes.rowDragElement, "'>\n <span class='")).call(_context4, _styles.Classes.rowDragElementIcon, "'></span>\n <div class='")).call(_context3, _styles.Classes.rowDragElementLabel, "'></div>\n </div>");
380
+ var element = document.createElement('div');
381
+ element.innerHTML = ELEMENT_TEMPLATE;
382
+ var dragElement = element.firstChild;
383
+ var targetRow = findTargetRow(mouseDownEvent.target, tableBody);
384
+ if (targetRow) {
385
+ var rect = targetRow.getBoundingClientRect();
386
+ dragElement.style.height = rect.height + 'px';
387
+ }
388
+ var bodyRect = tableBody.getBoundingClientRect();
389
+ dragElement.style.maxWidth = bodyRect.width + 'px';
390
+ document.body.appendChild(dragElement);
391
+ return dragElement;
327
392
  }
328
-
329
- function removeDragElement(element) {
330
- document.body.removeChild(element);
393
+ function createDragLine(isTreeTable) {
394
+ var dragLine = document.createElement('div');
395
+ dragLine.classList.add(_styles.Classes.rowDragLine);
396
+ if (isTreeTable) {
397
+ dragLine.classList.add(_styles.Classes.treeTableRowDragLine);
398
+ }
399
+ document.body.appendChild(dragLine);
400
+ return dragLine;
331
401
  }
332
-
333
- function updateCurSorStyle(isOutOfRange) {
334
- if (isOutOfRange) {
335
- document.body.style.cursor = 'no-drop';
336
- } else {
337
- document.body.style.cursor = 'move';
402
+ function positionDragLine(_ref) {
403
+ var lineElement = _ref.lineElement,
404
+ dragZone = _ref.dragZone,
405
+ event = _ref.event;
406
+ var tableContainer = dragZone.getContainer();
407
+ var _dragZone$tableParams = dragZone.tableParams,
408
+ getDataSource = _dragZone$tableParams.getDataSource,
409
+ getTreeModeOptions = _dragZone$tableParams.getTreeModeOptions,
410
+ getRowDragOptions = _dragZone$tableParams.getRowDragOptions;
411
+ var dataSource = getDataSource();
412
+ var treeModeOptions = getTreeModeOptions();
413
+ var rowDragOptions = getRowDragOptions() || {};
414
+ var allowDragIntoRow = rowDragOptions.allowDragIntoRow;
415
+ // 鼠标悬停所在的拖拽行信息
416
+ var dragItem = getDragRowItem(event.target, tableContainer, dataSource);
417
+ if (!dragItem) return;
418
+ var cell = dragItem.cell,
419
+ rowIndex = dragItem.rowIndex,
420
+ row = dragItem.row;
421
+ var bodyRect = tableContainer.getBoundingClientRect();
422
+ var offsetParentSize = getElementRectWithOffset(document.body);
423
+ var isTreeTable = !!treeModeOptions;
424
+ var allowDragInto = isTreeTable && allowDragIntoRow;
425
+ var direction = getDirection(cell, event.clientY, allowDragInto);
426
+ if (isTreeTable) {
427
+ var _context5;
428
+ var iconWidth = treeModeOptions.iconWidth,
429
+ iconIndent = treeModeOptions.iconIndent,
430
+ iconGap = treeModeOptions.iconGap,
431
+ indentSize = treeModeOptions.indentSize,
432
+ treeMetaKey = treeModeOptions.treeMetaKey;
433
+ var expandCell = tableContainer.querySelector((0, _concat.default)(_context5 = "tr[data-rowindex=\"".concat(rowIndex, "\"] .")).call(_context5, _styles.Classes.tableExtendCell));
434
+ if (expandCell) {
435
+ var _getElementSize2 = _getElementSize(expandCell),
436
+ paddingLeft = _getElementSize2.paddingLeft;
437
+ var expandCellRect = expandCell.getBoundingClientRect();
438
+ var _row$treeMetaKey = row[treeMetaKey],
439
+ rowKey = _row$treeMetaKey.rowKey,
440
+ depth = _row$treeMetaKey.depth,
441
+ isLeaf = _row$treeMetaKey.isLeaf,
442
+ expanded = _row$treeMetaKey.expanded;
443
+ var addWidth = isLeaf ? iconWidth + iconGap : 0;
444
+ var indent = iconIndent + depth * indentSize + addWidth;
445
+ var x = expandCellRect.x,
446
+ _y = expandCellRect.y,
447
+ _height = expandCellRect.height;
448
+ var _top = direction === 'bottom' ? _y + _height - offsetParentSize.top : _y - offsetParentSize.top;
449
+ var offsetX = Math.max(x + paddingLeft + indent - bodyRect.x, 0);
450
+ var _left = bodyRect.x + offsetX - offsetParentSize.left;
451
+ lineElement.style.left = "".concat(_left, "px");
452
+ lineElement.style.top = "".concat(_top, "px");
453
+ lineElement.style.width = "".concat(bodyRect.width - offsetX, "px");
454
+ if (direction === 'into') {
455
+ lineElement.style.display = 'none';
456
+ } else {
457
+ lineElement.style.display = 'block';
458
+ }
459
+ return;
460
+ }
338
461
  }
462
+ // 根据鼠标悬停位置所在单元格和显示位置计算拖拽线的位置
463
+ var rect = cell.getBoundingClientRect();
464
+ var y = rect.y,
465
+ height = rect.height;
466
+ var top = direction === 'bottom' ? y + height - offsetParentSize.top : y - offsetParentSize.top;
467
+ var left = bodyRect.x - offsetParentSize.left;
468
+ lineElement.style.left = "".concat(left, "px");
469
+ lineElement.style.top = "".concat(top, "px");
470
+ lineElement.style.width = "".concat(bodyRect.width, "px");
339
471
  }
340
-
341
- function removeCurSorStyle() {
342
- document.body.style.cursor = 'default';
472
+ function showDragLine(lineElement) {
473
+ lineElement.style.display = 'block';
343
474
  }
344
-
345
- function getDragRange(tableBody, _ref4) {
346
- var startOffset = _ref4.startOffset,
347
- rowHeight = _ref4.rowHeight;
348
- var tableBodyClientRect = tableBody.getBoundingClientRect();
349
- var height = tableBodyClientRect.height,
350
- width = tableBodyClientRect.width,
351
- top = tableBodyClientRect.top,
352
- left = tableBodyClientRect.left;
475
+ function hiddenDragLine(lineElement) {
476
+ lineElement.style.display = 'none';
477
+ }
478
+ function positionDragElemment(element, event) {
479
+ var _a, _b, _c, _d, _e, _f;
480
+ if (!element) return;
481
+ var elementRect = element.getBoundingClientRect();
482
+ var eleHeight = elementRect.height;
483
+ var browserWidth = (_b = (_a = document.body) === null || _a === void 0 ? void 0 : _a.clientWidth) !== null && _b !== void 0 ? _b : window.innerHeight || ((_c = document.documentElement) === null || _c === void 0 ? void 0 : _c.clientWidth) || 0;
484
+ var browserHeight = (_e = (_d = document.body) === null || _d === void 0 ? void 0 : _d.clientHeight) !== null && _e !== void 0 ? _e : window.innerHeight || ((_f = document.documentElement) === null || _f === void 0 ? void 0 : _f.clientHeight) || 0;
485
+ var offsetParentSize = getElementRectWithOffset(element.offsetParent);
486
+ var clientX = event.clientX,
487
+ clientY = event.clientY;
488
+ var top = clientY - offsetParentSize.top - eleHeight / 2;
489
+ var left = clientX - offsetParentSize.left;
490
+ var windowScrollX = window.pageXOffset;
491
+ var windowScrollY = window.pageYOffset;
492
+ if (browserWidth > 0 && left + element.clientWidth > browserWidth + windowScrollX) {
493
+ left = Math.max(browserWidth + windowScrollX - element.clientWidth, 0);
494
+ }
495
+ if (browserHeight > 0 && top + element.clientHeight > browserHeight + windowScrollY) {
496
+ top = Math.max(browserHeight + windowScrollY - element.clientHeight, 0);
497
+ }
498
+ element.style.left = "".concat(left, "px");
499
+ element.style.top = "".concat(top, "px");
500
+ }
501
+ function getElementRectWithOffset(el) {
502
+ var offsetElementRect = el.getBoundingClientRect();
503
+ var _getElementSize3 = _getElementSize(el),
504
+ borderTopWidth = _getElementSize3.borderTopWidth,
505
+ borderLeftWidth = _getElementSize3.borderLeftWidth,
506
+ borderRightWidth = _getElementSize3.borderRightWidth,
507
+ borderBottomWidth = _getElementSize3.borderBottomWidth;
353
508
  return {
354
- minX: left,
355
- maxX: left + width,
356
- minY: top - rowHeight + startOffset,
357
- maxY: top + height + startOffset
509
+ top: offsetElementRect.top + (borderTopWidth || 0),
510
+ left: offsetElementRect.left + (borderLeftWidth || 0),
511
+ right: offsetElementRect.right + (borderRightWidth || 0),
512
+ bottom: offsetElementRect.bottom + (borderBottomWidth || 0)
358
513
  };
359
514
  }
360
-
361
- function getValidPosition(position, dragRange) {
362
- var x = position.x,
363
- y = position.y;
364
- var minX = dragRange.minX,
365
- maxX = dragRange.maxX,
366
- minY = dragRange.minY,
367
- maxY = dragRange.maxY;
368
- var newX = x < minX ? minX : x > maxX ? maxX : x;
369
- var newY = y < minY ? minY : y > maxY ? maxY : y;
515
+ function _getElementSize(el) {
516
+ var _window$getComputedSt = window.getComputedStyle(el),
517
+ height = _window$getComputedSt.height,
518
+ width = _window$getComputedSt.width,
519
+ borderTopWidth = _window$getComputedSt.borderTopWidth,
520
+ borderRightWidth = _window$getComputedSt.borderRightWidth,
521
+ borderBottomWidth = _window$getComputedSt.borderBottomWidth,
522
+ borderLeftWidth = _window$getComputedSt.borderLeftWidth,
523
+ paddingTop = _window$getComputedSt.paddingTop,
524
+ paddingRight = _window$getComputedSt.paddingRight,
525
+ paddingBottom = _window$getComputedSt.paddingBottom,
526
+ paddingLeft = _window$getComputedSt.paddingLeft,
527
+ marginTop = _window$getComputedSt.marginTop,
528
+ marginRight = _window$getComputedSt.marginRight,
529
+ marginBottom = _window$getComputedSt.marginBottom,
530
+ marginLeft = _window$getComputedSt.marginLeft,
531
+ boxSizing = _window$getComputedSt.boxSizing;
370
532
  return {
371
- x: newX,
372
- y: newY
533
+ height: parseFloat(height || '0'),
534
+ width: parseFloat(width || '0'),
535
+ borderTopWidth: parseFloat(borderTopWidth || '0'),
536
+ borderRightWidth: parseFloat(borderRightWidth || '0'),
537
+ borderBottomWidth: parseFloat(borderBottomWidth || '0'),
538
+ borderLeftWidth: parseFloat(borderLeftWidth || '0'),
539
+ paddingTop: parseFloat(paddingTop || '0'),
540
+ paddingRight: parseFloat(paddingRight || '0'),
541
+ paddingBottom: parseFloat(paddingBottom || '0'),
542
+ paddingLeft: parseFloat(paddingLeft || '0'),
543
+ marginTop: parseFloat(marginTop || '0'),
544
+ marginRight: parseFloat(marginRight || '0'),
545
+ marginBottom: parseFloat(marginBottom || '0'),
546
+ marginLeft: parseFloat(marginLeft || '0'),
547
+ boxSizing: boxSizing
373
548
  };
374
549
  }
375
-
376
- function isOutOfDragRange(position, dragRange) {
377
- var x = position.x,
378
- y = position.y;
379
- var minX = dragRange.minX,
380
- maxX = dragRange.maxX,
381
- minY = dragRange.minY,
382
- maxY = dragRange.maxY;
383
- return x > maxX || x < minX || y > maxY || y < minY;
550
+ function removeElement(element) {
551
+ document.body.removeChild(element);
552
+ }
553
+ function setDragElementIcon(element, iconName) {
554
+ var elementIcon = element.querySelector(".".concat(_styles.Classes.rowDragElementIcon));
555
+ clearElementChildren(elementIcon);
556
+ iconName = iconName || 'notAllowed';
557
+ var iconElement = document.createElement('span');
558
+ if (iconName === 'move') {
559
+ iconElement.classList.add(_styles.Classes.iconMove);
560
+ } else if (iconName === 'notAllowed') {
561
+ iconElement.classList.add(_styles.Classes.iconNotAllowed);
562
+ }
563
+ elementIcon.appendChild(iconElement);
564
+ }
565
+ function clearElementChildren(element) {
566
+ while (element && element.firstChild) {
567
+ element.removeChild(element.firstChild);
568
+ }
569
+ }
570
+ function getScrollMoveOffset(tableBody, mouseMoveEvent) {
571
+ var clientY = mouseMoveEvent.clientY;
572
+ var tableBodyClientRect = tableBody.getBoundingClientRect();
573
+ var top = tableBodyClientRect.top,
574
+ height = tableBodyClientRect.height;
575
+ if (clientY >= top + height - SCROLL_START_OFFSET && clientY <= top + height) {
576
+ return SCROLL_OFFSET;
577
+ }
578
+ if (clientY >= top && clientY <= top + SCROLL_START_OFFSET) {
579
+ return -SCROLL_OFFSET;
580
+ }
581
+ return 0;
582
+ }
583
+ function setDragText(element, dragText) {
584
+ var dragTextString = dragText.toString();
585
+ var elementIcon = element.querySelector(".".concat(_styles.Classes.rowDragElementLabel));
586
+ var stringNode = document.createTextNode(dragTextString);
587
+ elementIcon.appendChild(stringNode);
588
+ }
589
+ function isMouseOnDropTarget(mouseEvent, target) {
590
+ return target.contains(mouseEvent.target);
591
+ }
592
+ function createDropTargetEvent(dropTarget, event, dragItem, startDropZoneTagret) {
593
+ var dropZoneTarget = dropTarget.getContainer();
594
+ var rect = dropZoneTarget.getBoundingClientRect();
595
+ var x = event.clientX - rect.left;
596
+ var y = event.clientY - rect.top;
597
+ var targetEvent = {
598
+ dragItem: dragItem,
599
+ startDropZoneTagret: startDropZoneTagret,
600
+ dropZoneTarget: dropZoneTarget,
601
+ event: event,
602
+ x: x,
603
+ y: y
604
+ };
605
+ if (dropTarget.isTable) {
606
+ targetEvent.dropZoneTableParams = dropTarget.tableParams;
607
+ }
608
+ return targetEvent;
609
+ }
610
+ function getDirection(cell, clientY) {
611
+ var isTreeTable = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
612
+ var _cell$getBoundingClie = cell.getBoundingClientRect(),
613
+ height = _cell$getBoundingClie.height,
614
+ y = _cell$getBoundingClie.y;
615
+ var direction = 'bottom';
616
+ if (isTreeTable) {
617
+ if (y + height / 4 > clientY) {
618
+ direction = 'top';
619
+ } else if (y + height * 3 / 4 > clientY) {
620
+ direction = 'into';
621
+ }
622
+ } else if (y + height / 2 > clientY) {
623
+ direction = 'top';
624
+ }
625
+ return direction;
384
626
  }