@deephaven/grid 0.43.0 → 0.44.0
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.
- package/dist/CellInputField.css +23 -0
- package/dist/CellInputField.css.map +1 -0
- package/dist/CellInputField.js +174 -0
- package/dist/CellInputField.js.map +1 -0
- package/dist/CellRenderer.js +64 -0
- package/dist/CellRenderer.js.map +1 -0
- package/dist/ColumnHeaderGroup.js +2 -0
- package/dist/ColumnHeaderGroup.js.map +1 -0
- package/dist/DataBarCellRenderer.js +404 -0
- package/dist/DataBarCellRenderer.js.map +1 -0
- package/dist/DataBarGridModel.js +27 -0
- package/dist/DataBarGridModel.js.map +1 -0
- package/dist/EditableGridModel.js +14 -0
- package/dist/EditableGridModel.js.map +1 -0
- package/dist/EventHandlerResult.js +2 -0
- package/dist/EventHandlerResult.js.map +1 -0
- package/dist/ExpandableGridModel.js +8 -0
- package/dist/ExpandableGridModel.js.map +1 -0
- package/dist/Grid.css +45 -0
- package/dist/Grid.css.map +1 -0
- package/dist/Grid.js +1947 -0
- package/dist/Grid.js.map +1 -0
- package/dist/GridAxisRange.js +17 -0
- package/dist/GridAxisRange.js.map +1 -0
- package/dist/GridColorUtils.js +146 -0
- package/dist/GridColorUtils.js.map +1 -0
- package/dist/GridMetricCalculator.js +1500 -0
- package/dist/GridMetricCalculator.js.map +1 -0
- package/dist/GridMetrics.js +2 -0
- package/dist/GridMetrics.js.map +1 -0
- package/dist/GridModel.js +193 -0
- package/dist/GridModel.js.map +1 -0
- package/dist/GridMouseHandler.js +57 -0
- package/dist/GridMouseHandler.js.map +1 -0
- package/dist/GridRange.js +684 -0
- package/dist/GridRange.js.map +1 -0
- package/dist/GridRenderer.js +2038 -0
- package/dist/GridRenderer.js.map +1 -0
- package/dist/GridRendererTypes.js +3 -0
- package/dist/GridRendererTypes.js.map +1 -0
- package/dist/GridTestUtils.js +16 -0
- package/dist/GridTestUtils.js.map +1 -0
- package/dist/GridTheme.js +100 -0
- package/dist/GridTheme.js.map +1 -0
- package/dist/GridUtils.js +1198 -0
- package/dist/GridUtils.js.map +1 -0
- package/dist/KeyHandler.js +36 -0
- package/dist/KeyHandler.js.map +1 -0
- package/dist/MockDataBarGridModel.js +119 -0
- package/dist/MockDataBarGridModel.js.map +1 -0
- package/dist/MockGridData.js +5 -0
- package/dist/MockGridData.js.map +1 -0
- package/dist/MockGridModel.js +122 -0
- package/dist/MockGridModel.js.map +1 -0
- package/dist/MockTreeGridModel.js +193 -0
- package/dist/MockTreeGridModel.js.map +1 -0
- package/dist/StaticDataGridModel.js +40 -0
- package/dist/StaticDataGridModel.js.map +1 -0
- package/dist/TextCellRenderer.js +210 -0
- package/dist/TextCellRenderer.js.map +1 -0
- package/dist/ThemeContext.js +4 -0
- package/dist/ThemeContext.js.map +1 -0
- package/dist/TokenBoxCellRenderer.js +4 -0
- package/dist/TokenBoxCellRenderer.js.map +1 -0
- package/dist/ViewportDataGridModel.js +43 -0
- package/dist/ViewportDataGridModel.js.map +1 -0
- package/dist/errors/AssertionError.js +11 -0
- package/dist/errors/AssertionError.js.map +1 -0
- package/dist/errors/PasteError.js +11 -0
- package/dist/errors/PasteError.js.map +1 -0
- package/dist/errors/assertIsDefined.js +8 -0
- package/dist/errors/assertIsDefined.js.map +1 -0
- package/dist/errors/index.js +4 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/key-handlers/EditKeyHandler.js +46 -0
- package/dist/key-handlers/EditKeyHandler.js.map +1 -0
- package/dist/key-handlers/PasteKeyHandler.js +124 -0
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -0
- package/dist/key-handlers/SelectionKeyHandler.js +272 -0
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -0
- package/dist/key-handlers/TreeKeyHandler.js +45 -0
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -0
- package/dist/key-handlers/index.js +5 -0
- package/dist/key-handlers/index.js.map +1 -0
- package/dist/memoizeClear.js +33 -0
- package/dist/memoizeClear.js.map +1 -0
- package/dist/mouse-handlers/EditMouseHandler.js +25 -0
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +504 -0
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +67 -0
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +164 -0
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +139 -0
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +54 -0
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +58 -0
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +39 -0
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +223 -0
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +213 -0
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridTokenMouseHandler.js +161 -0
- package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +165 -0
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -0
- package/dist/mouse-handlers/index.js +13 -0
- package/dist/mouse-handlers/index.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
3
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
4
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
5
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
6
|
+
/**
|
|
7
|
+
* Extension of memoizee that clears the entire cache when it's full.
|
|
8
|
+
* This avoids the situation where LRU cache starts thrashing when it fills up.
|
|
9
|
+
* Could look at writing our own memoize with a smarter cache to avoid overhead of
|
|
10
|
+
* LRU queue, but this should be sufficient for now.
|
|
11
|
+
*/
|
|
12
|
+
import memoizee from 'memoizee';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @param fn The function to memoize
|
|
16
|
+
* @param options The options to set for memoization
|
|
17
|
+
*/
|
|
18
|
+
export var memoizeClear = (fn, options) => {
|
|
19
|
+
var isClearingCache = false;
|
|
20
|
+
var memoizedFn = memoizee(fn, _objectSpread(_objectSpread({}, options), {}, {
|
|
21
|
+
dispose: () => {
|
|
22
|
+
// Need to track when we're clearing because dispose gets called for all items removed
|
|
23
|
+
if (!isClearingCache) {
|
|
24
|
+
isClearingCache = true;
|
|
25
|
+
memoizedFn.clear();
|
|
26
|
+
isClearingCache = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}));
|
|
30
|
+
return memoizedFn;
|
|
31
|
+
};
|
|
32
|
+
export default memoizeClear;
|
|
33
|
+
//# sourceMappingURL=memoizeClear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoizeClear.js","names":["memoizee","memoizeClear","fn","options","isClearingCache","memoizedFn","dispose","clear"],"sources":["../src/memoizeClear.ts"],"sourcesContent":["/**\n * Extension of memoizee that clears the entire cache when it's full.\n * This avoids the situation where LRU cache starts thrashing when it fills up.\n * Could look at writing our own memoize with a smarter cache to avoid overhead of\n * LRU queue, but this should be sufficient for now.\n */\nimport memoizee from 'memoizee';\n\n/**\n * @param fn The function to memoize\n * @param options The options to set for memoization\n */\nexport const memoizeClear: typeof memoizee = (fn, options) => {\n let isClearingCache = false;\n const memoizedFn = memoizee(fn, {\n ...options,\n dispose: () => {\n // Need to track when we're clearing because dispose gets called for all items removed\n if (!isClearingCache) {\n isClearingCache = true;\n memoizedFn.clear();\n isClearingCache = false;\n }\n },\n });\n\n return memoizedFn;\n};\n\nexport default memoizeClear;\n"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,QAAQ,MAAM,UAAU;;AAE/B;AACA;AACA;AACA;AACA,OAAO,IAAMC,YAA6B,GAAG,CAACC,EAAE,EAAEC,OAAO,KAAK;EAC5D,IAAIC,eAAe,GAAG,KAAK;EAC3B,IAAMC,UAAU,GAAGL,QAAQ,CAACE,EAAE,kCACzBC,OAAO;IACVG,OAAO,EAAE,MAAM;MACb;MACA,IAAI,CAACF,eAAe,EAAE;QACpBA,eAAe,GAAG,IAAI;QACtBC,UAAU,CAACE,KAAK,EAAE;QAClBH,eAAe,GAAG,KAAK;MACzB;IACF;EAAC,GACD;EAEF,OAAOC,UAAU;AACnB,CAAC;AAED,eAAeJ,YAAY"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* eslint class-methods-use-this: "off" */
|
|
2
|
+
import { isEditableGridModel } from "../EditableGridModel.js";
|
|
3
|
+
import GridMouseHandler from "../GridMouseHandler.js";
|
|
4
|
+
import GridRange from "../GridRange.js";
|
|
5
|
+
/**
|
|
6
|
+
* Handles clicking on a cell to edit it in an editable grid
|
|
7
|
+
*/
|
|
8
|
+
class EditMouseHandler extends GridMouseHandler {
|
|
9
|
+
onDoubleClick(_ref, grid) {
|
|
10
|
+
var {
|
|
11
|
+
column,
|
|
12
|
+
row
|
|
13
|
+
} = _ref;
|
|
14
|
+
var {
|
|
15
|
+
model
|
|
16
|
+
} = grid.props;
|
|
17
|
+
if (isEditableGridModel(model) && column != null && row != null && model.isEditableRange(GridRange.makeCell(column, row))) {
|
|
18
|
+
grid.startEditing(column, row);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export default EditMouseHandler;
|
|
25
|
+
//# sourceMappingURL=EditMouseHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditMouseHandler.js","names":["isEditableGridModel","GridMouseHandler","GridRange","EditMouseHandler","onDoubleClick","grid","column","row","model","props","isEditableRange","makeCell","startEditing"],"sources":["../../src/mouse-handlers/EditMouseHandler.ts"],"sourcesContent":["/* eslint class-methods-use-this: \"off\" */\nimport { isEditableGridModel } from '../EditableGridModel';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport Grid from '../Grid';\nimport GridMouseHandler from '../GridMouseHandler';\nimport GridRange from '../GridRange';\nimport { GridPoint } from '../GridUtils';\n\n/**\n * Handles clicking on a cell to edit it in an editable grid\n */\nclass EditMouseHandler extends GridMouseHandler {\n onDoubleClick({ column, row }: GridPoint, grid: Grid): EventHandlerResult {\n const { model } = grid.props;\n if (\n isEditableGridModel(model) &&\n column != null &&\n row != null &&\n model.isEditableRange(GridRange.makeCell(column, row))\n ) {\n grid.startEditing(column, row);\n return true;\n }\n return false;\n }\n}\n\nexport default EditMouseHandler;\n"],"mappings":"AAAA;AAAA,SACSA,mBAAmB;AAAA,OAGrBC,gBAAgB;AAAA,OAChBC,SAAS;AAGhB;AACA;AACA;AACA,MAAMC,gBAAgB,SAASF,gBAAgB,CAAC;EAC9CG,aAAa,OAA6BC,IAAU,EAAsB;IAAA,IAA5D;MAAEC,MAAM;MAAEC;IAAe,CAAC;IACtC,IAAM;MAAEC;IAAM,CAAC,GAAGH,IAAI,CAACI,KAAK;IAC5B,IACET,mBAAmB,CAACQ,KAAK,CAAC,IAC1BF,MAAM,IAAI,IAAI,IACdC,GAAG,IAAI,IAAI,IACXC,KAAK,CAACE,eAAe,CAACR,SAAS,CAACS,QAAQ,CAACL,MAAM,EAAEC,GAAG,CAAC,CAAC,EACtD;MACAF,IAAI,CAACO,YAAY,CAACN,MAAM,EAAEC,GAAG,CAAC;MAC9B,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd;AACF;AAEA,eAAeJ,gBAAgB"}
|
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
3
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
4
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
5
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
6
|
+
import clamp from 'lodash.clamp';
|
|
7
|
+
import GridUtils from "../GridUtils.js";
|
|
8
|
+
import GridMouseHandler from "../GridMouseHandler.js";
|
|
9
|
+
var SLOPPY_CLICK_DISTANCE = 5;
|
|
10
|
+
var SCROLL_INTERVAL = 1000 / 60;
|
|
11
|
+
var SCROLL_DELTA = 10;
|
|
12
|
+
/**
|
|
13
|
+
* Gets info about a visible column
|
|
14
|
+
* @param visibleIndex The visible index to get info for
|
|
15
|
+
* @param depth The header depth to get info for
|
|
16
|
+
* @param metrics Grid metrics
|
|
17
|
+
* @param model Grid model
|
|
18
|
+
* @returns The column info at the depth.
|
|
19
|
+
* If the column is not in a group at that depth, returns the info for the base column.
|
|
20
|
+
* Returns null if the column is not visible.
|
|
21
|
+
*/
|
|
22
|
+
function getColumnInfo(visibleIndex, depth, metrics, model) {
|
|
23
|
+
var _modelColumns$get;
|
|
24
|
+
var {
|
|
25
|
+
modelColumns,
|
|
26
|
+
movedColumns,
|
|
27
|
+
allColumnXs,
|
|
28
|
+
columnCount,
|
|
29
|
+
allColumnWidths,
|
|
30
|
+
userColumnWidths,
|
|
31
|
+
calculatedColumnWidths,
|
|
32
|
+
floatingLeftWidth,
|
|
33
|
+
maxX
|
|
34
|
+
} = metrics;
|
|
35
|
+
if (depth == null || visibleIndex == null || visibleIndex > columnCount || visibleIndex < 0) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
var modelIndex = (_modelColumns$get = modelColumns.get(visibleIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(visibleIndex, movedColumns);
|
|
39
|
+
var group = model.getColumnHeaderGroup(modelIndex, depth);
|
|
40
|
+
var isColumnGroup = group != null;
|
|
41
|
+
var left;
|
|
42
|
+
var right;
|
|
43
|
+
var range;
|
|
44
|
+
if (group != null) {
|
|
45
|
+
var _allColumnXs$get, _allColumnXs$get2, _allColumnWidths$get;
|
|
46
|
+
var [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(movedColumns);
|
|
47
|
+
left = (_allColumnXs$get = allColumnXs.get(startVisibleIndex)) !== null && _allColumnXs$get !== void 0 ? _allColumnXs$get : floatingLeftWidth;
|
|
48
|
+
right = ((_allColumnXs$get2 = allColumnXs.get(endVisibleIndex)) !== null && _allColumnXs$get2 !== void 0 ? _allColumnXs$get2 : maxX) + ((_allColumnWidths$get = allColumnWidths.get(endVisibleIndex)) !== null && _allColumnWidths$get !== void 0 ? _allColumnWidths$get : 0);
|
|
49
|
+
range = [startVisibleIndex, endVisibleIndex];
|
|
50
|
+
} else {
|
|
51
|
+
var _ref, _ref2, _allColumnWidths$get2;
|
|
52
|
+
var possibleLeft = allColumnXs.get(visibleIndex);
|
|
53
|
+
if (possibleLeft == null) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
left = possibleLeft;
|
|
57
|
+
right = left + ((_ref = (_ref2 = (_allColumnWidths$get2 = allColumnWidths.get(visibleIndex)) !== null && _allColumnWidths$get2 !== void 0 ? _allColumnWidths$get2 : userColumnWidths.get(modelIndex)) !== null && _ref2 !== void 0 ? _ref2 : calculatedColumnWidths.get(modelIndex)) !== null && _ref !== void 0 ? _ref : 0);
|
|
58
|
+
range = [visibleIndex, visibleIndex];
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
visibleIndex,
|
|
62
|
+
modelIndex,
|
|
63
|
+
left,
|
|
64
|
+
right,
|
|
65
|
+
width: right - left,
|
|
66
|
+
isColumnGroup,
|
|
67
|
+
range,
|
|
68
|
+
depth
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
class GridColumnMoveMouseHandler extends GridMouseHandler {
|
|
72
|
+
constructor() {
|
|
73
|
+
super(...arguments);
|
|
74
|
+
_defineProperty(this, "cursor", null);
|
|
75
|
+
_defineProperty(this, "draggingOffset", void 0);
|
|
76
|
+
_defineProperty(this, "initialOffset", void 0);
|
|
77
|
+
_defineProperty(this, "initialGridPoint", void 0);
|
|
78
|
+
_defineProperty(this, "scrollingInterval", void 0);
|
|
79
|
+
_defineProperty(this, "scrollingDirection", void 0);
|
|
80
|
+
_defineProperty(this, "draggingColumn", null);
|
|
81
|
+
}
|
|
82
|
+
setScrollInterval(grid, direction) {
|
|
83
|
+
if (this.scrollingInterval != null && direction === this.scrollingDirection) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
this.scrollingDirection = direction;
|
|
87
|
+
this.scrollingInterval = window.setInterval(() => {
|
|
88
|
+
var {
|
|
89
|
+
metrics
|
|
90
|
+
} = grid;
|
|
91
|
+
if (!metrics) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
var {
|
|
95
|
+
left,
|
|
96
|
+
lastLeft,
|
|
97
|
+
leftOffset,
|
|
98
|
+
userColumnWidths,
|
|
99
|
+
calculatedColumnWidths,
|
|
100
|
+
movedColumns,
|
|
101
|
+
allColumnWidths
|
|
102
|
+
} = metrics;
|
|
103
|
+
var nextLeft = left;
|
|
104
|
+
var nextOffset = leftOffset;
|
|
105
|
+
if (direction === 'left') {
|
|
106
|
+
nextOffset -= SCROLL_DELTA;
|
|
107
|
+
while (nextOffset < 0) {
|
|
108
|
+
var _userColumnWidths$get;
|
|
109
|
+
nextLeft -= 1;
|
|
110
|
+
var modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);
|
|
111
|
+
var prevColumnWidth = (_userColumnWidths$get = userColumnWidths.get(modelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : calculatedColumnWidths.get(modelIndex);
|
|
112
|
+
if (prevColumnWidth === undefined) {
|
|
113
|
+
nextOffset = 0;
|
|
114
|
+
} else {
|
|
115
|
+
nextOffset += prevColumnWidth;
|
|
116
|
+
}
|
|
117
|
+
if (nextLeft < 0) {
|
|
118
|
+
nextOffset = 0;
|
|
119
|
+
nextLeft = 0;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
nextOffset += SCROLL_DELTA;
|
|
124
|
+
var leftColumnWidth = allColumnWidths.get(left);
|
|
125
|
+
while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {
|
|
126
|
+
var _userColumnWidths$get2;
|
|
127
|
+
nextLeft += 1;
|
|
128
|
+
nextOffset -= leftColumnWidth;
|
|
129
|
+
var _modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);
|
|
130
|
+
leftColumnWidth = (_userColumnWidths$get2 = userColumnWidths.get(_modelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : calculatedColumnWidths.get(_modelIndex);
|
|
131
|
+
if (nextLeft > lastLeft) {
|
|
132
|
+
nextOffset = 0;
|
|
133
|
+
nextLeft = lastLeft;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
var {
|
|
138
|
+
mouseX,
|
|
139
|
+
mouseY
|
|
140
|
+
} = grid.state;
|
|
141
|
+
if (metrics == null || mouseX == null || mouseY == null) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.moveDraggingColumn(mouseX, grid, direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA);
|
|
145
|
+
grid.setState({
|
|
146
|
+
left: nextLeft,
|
|
147
|
+
leftOffset: nextOffset
|
|
148
|
+
});
|
|
149
|
+
if (direction === 'left' && nextLeft === 0 && leftOffset === 0 || direction === 'right' && nextLeft === lastLeft) {
|
|
150
|
+
this.clearScrollInterval();
|
|
151
|
+
}
|
|
152
|
+
}, SCROLL_INTERVAL);
|
|
153
|
+
}
|
|
154
|
+
clearScrollInterval() {
|
|
155
|
+
this.scrollingDirection = undefined;
|
|
156
|
+
window.clearInterval(this.scrollingInterval);
|
|
157
|
+
this.scrollingInterval = undefined;
|
|
158
|
+
}
|
|
159
|
+
onLeave() {
|
|
160
|
+
this.clearScrollInterval();
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
onDown(gridPoint, grid) {
|
|
164
|
+
var {
|
|
165
|
+
model
|
|
166
|
+
} = grid.props;
|
|
167
|
+
var {
|
|
168
|
+
x,
|
|
169
|
+
column,
|
|
170
|
+
columnHeaderDepth
|
|
171
|
+
} = gridPoint;
|
|
172
|
+
var {
|
|
173
|
+
metrics
|
|
174
|
+
} = grid;
|
|
175
|
+
if (!metrics) throw new Error('Metrics not set');
|
|
176
|
+
var columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);
|
|
177
|
+
if (column == null || columnInfo == null || columnHeaderDepth == null) {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Can't drag a base column from the empty group area
|
|
182
|
+
if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
var {
|
|
186
|
+
rowHeaderWidth
|
|
187
|
+
} = metrics;
|
|
188
|
+
this.initialGridPoint = gridPoint;
|
|
189
|
+
this.draggingColumn = null;
|
|
190
|
+
this.cursor = null;
|
|
191
|
+
if (columnInfo.modelIndex != null && columnHeaderDepth != null && model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)) {
|
|
192
|
+
this.draggingOffset = x - columnInfo.left - rowHeaderWidth;
|
|
193
|
+
this.initialOffset = this.draggingOffset;
|
|
194
|
+
}
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
onDrag(gridPoint, grid, event) {
|
|
198
|
+
if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined) {
|
|
199
|
+
return false;
|
|
200
|
+
}
|
|
201
|
+
var {
|
|
202
|
+
x: mouseX,
|
|
203
|
+
y: mouseY
|
|
204
|
+
} = gridPoint;
|
|
205
|
+
var {
|
|
206
|
+
columnHeaderDepth
|
|
207
|
+
} = this.initialGridPoint;
|
|
208
|
+
var {
|
|
209
|
+
model
|
|
210
|
+
} = grid.props;
|
|
211
|
+
var {
|
|
212
|
+
draggingColumn
|
|
213
|
+
} = this;
|
|
214
|
+
var {
|
|
215
|
+
metrics
|
|
216
|
+
} = grid;
|
|
217
|
+
if (!metrics) throw new Error('Metrics not set');
|
|
218
|
+
|
|
219
|
+
// before considering it a drag, the mouse must have moved a minimum distance
|
|
220
|
+
// this prevents click actions from triggering a drag state
|
|
221
|
+
if (!draggingColumn && Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE && Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE) {
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Get the initial dragging column info
|
|
226
|
+
if (draggingColumn == null) {
|
|
227
|
+
var initialColumnInfo = getColumnInfo(this.initialGridPoint.column, columnHeaderDepth, metrics, model);
|
|
228
|
+
if (!initialColumnInfo || columnHeaderDepth == null) {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Disallow dragging from the blank space in column header groups
|
|
236
|
+
if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
if (initialColumnInfo.range[0] == null) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
draggingColumn = {
|
|
243
|
+
range: initialColumnInfo.range,
|
|
244
|
+
depth: columnHeaderDepth,
|
|
245
|
+
left: initialColumnInfo.left,
|
|
246
|
+
width: initialColumnInfo.width
|
|
247
|
+
};
|
|
248
|
+
var startColumn = getColumnInfo(draggingColumn.range[0], 0, metrics, model);
|
|
249
|
+
var endColumn = getColumnInfo(draggingColumn.range[1], 0, metrics, model);
|
|
250
|
+
|
|
251
|
+
// Group goes off the table. Drag and drop could be wonky here
|
|
252
|
+
// Column draws only use columns that are partially visible too
|
|
253
|
+
// So this could cause rendering errors if we tried dragging it
|
|
254
|
+
if (!startColumn || !endColumn) {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
this.draggingColumn = draggingColumn;
|
|
258
|
+
grid.setState({
|
|
259
|
+
draggingColumn,
|
|
260
|
+
isDragging: true
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* At this point, we have determined we are actually dragging a column
|
|
266
|
+
*/
|
|
267
|
+
this.cursor = 'move';
|
|
268
|
+
this.moveDraggingColumn(gridPoint.x, grid, event.movementX);
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Moves a dragging column, if possible, the specified distance
|
|
274
|
+
* @param mouseX The point the move was initiated from
|
|
275
|
+
* @param grid The Grid component
|
|
276
|
+
* @param deltaX The distance of the move
|
|
277
|
+
*/
|
|
278
|
+
moveDraggingColumn(mouseX, grid, deltaX) {
|
|
279
|
+
var _draggingParentGroup$;
|
|
280
|
+
if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined || this.draggingColumn == null || deltaX === 0) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again
|
|
285
|
+
if (this.initialOffset !== this.draggingOffset) {
|
|
286
|
+
// Pre move < Initial < Post move or vice-versa
|
|
287
|
+
// User crossed back past the iniital offset point, so we can start moving again
|
|
288
|
+
if (this.draggingOffset < this.initialOffset && this.initialOffset < this.draggingOffset + deltaX || this.draggingOffset > this.initialOffset && this.initialOffset > this.draggingOffset + deltaX) {
|
|
289
|
+
this.draggingOffset = this.initialOffset;
|
|
290
|
+
} else {
|
|
291
|
+
// Column can't move since we aren't back at the initial offset yet
|
|
292
|
+
this.draggingOffset += deltaX;
|
|
293
|
+
}
|
|
294
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
295
|
+
left: mouseX - this.draggingOffset
|
|
296
|
+
});
|
|
297
|
+
grid.setState({
|
|
298
|
+
draggingColumn: this.draggingColumn
|
|
299
|
+
});
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
var {
|
|
303
|
+
depth: draggingColumnDepth
|
|
304
|
+
} = this.draggingColumn;
|
|
305
|
+
var {
|
|
306
|
+
model
|
|
307
|
+
} = grid.props;
|
|
308
|
+
var {
|
|
309
|
+
movedColumns
|
|
310
|
+
} = grid.state;
|
|
311
|
+
var {
|
|
312
|
+
metrics
|
|
313
|
+
} = grid;
|
|
314
|
+
if (!metrics) throw new Error('Metrics not set');
|
|
315
|
+
var {
|
|
316
|
+
floatingLeftWidth,
|
|
317
|
+
width,
|
|
318
|
+
columnHeaderMaxDepth,
|
|
319
|
+
allColumnXs
|
|
320
|
+
} = metrics;
|
|
321
|
+
var isDraggingLeft = deltaX < 0;
|
|
322
|
+
var draggingColumn = getColumnInfo(this.draggingColumn.range[0], draggingColumnDepth, metrics, model);
|
|
323
|
+
if (!draggingColumn) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// The returned left/right are the original position, not dragged position
|
|
328
|
+
// This is where the dragging column's floating position accounting for dragged distance
|
|
329
|
+
var floatingDraggingLeft = mouseX - this.draggingOffset;
|
|
330
|
+
var floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;
|
|
331
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
332
|
+
left: floatingDraggingLeft
|
|
333
|
+
});
|
|
334
|
+
grid.setState({
|
|
335
|
+
draggingColumn: this.draggingColumn
|
|
336
|
+
});
|
|
337
|
+
var swapColumn = getColumnInfo(GridUtils.getColumnAtX(clamp(isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight, floatingLeftWidth, width), metrics, true), draggingColumnDepth, metrics, model);
|
|
338
|
+
var parentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);
|
|
339
|
+
if (!swapColumn) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Check if we should pin to the edge of the parent
|
|
344
|
+
if (parentGroup !== undefined) {
|
|
345
|
+
var parentVisibleRange = parentGroup.getVisibleRange(movedColumns);
|
|
346
|
+
// Cannot move to this left position, pin to left of parent
|
|
347
|
+
if (swapColumn.visibleIndex < parentVisibleRange[0]) {
|
|
348
|
+
var _allColumnXs$get3;
|
|
349
|
+
var _newMovedColumns = this.moveColumn(draggingColumn, parentVisibleRange[0], movedColumns);
|
|
350
|
+
this.draggingOffset = mouseX - ((_allColumnXs$get3 = allColumnXs.get(parentVisibleRange[0])) !== null && _allColumnXs$get3 !== void 0 ? _allColumnXs$get3 : 0);
|
|
351
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
352
|
+
left: mouseX - this.draggingOffset
|
|
353
|
+
});
|
|
354
|
+
this.clearScrollInterval();
|
|
355
|
+
grid.setState({
|
|
356
|
+
draggingColumn: this.draggingColumn,
|
|
357
|
+
movedColumns: _newMovedColumns
|
|
358
|
+
});
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Pin to the right of parent
|
|
363
|
+
if (swapColumn.visibleIndex > parentVisibleRange[1]) {
|
|
364
|
+
var _getColumnInfo;
|
|
365
|
+
var _newMovedColumns2 = this.moveColumn(draggingColumn, parentVisibleRange[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);
|
|
366
|
+
var {
|
|
367
|
+
right: parentRight = 0
|
|
368
|
+
} = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {};
|
|
369
|
+
this.draggingOffset = mouseX - (parentRight - draggingColumn.width);
|
|
370
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
371
|
+
left: mouseX - this.draggingOffset
|
|
372
|
+
});
|
|
373
|
+
this.clearScrollInterval();
|
|
374
|
+
grid.setState({
|
|
375
|
+
draggingColumn: this.draggingColumn,
|
|
376
|
+
movedColumns: _newMovedColumns2
|
|
377
|
+
});
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Hit an unmovable column, move to the first available position next to it
|
|
383
|
+
if (!model.isColumnMovable(swapColumn.modelIndex)) {
|
|
384
|
+
var toVisibleIndex = swapColumn.visibleIndex;
|
|
385
|
+
if (isDraggingLeft) {
|
|
386
|
+
toVisibleIndex += 1;
|
|
387
|
+
while (toVisibleIndex < draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {
|
|
388
|
+
toVisibleIndex += 1;
|
|
389
|
+
}
|
|
390
|
+
} else {
|
|
391
|
+
toVisibleIndex -= 1;
|
|
392
|
+
while (toVisibleIndex > draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {
|
|
393
|
+
toVisibleIndex -= 1;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
if (toVisibleIndex !== draggingColumn.visibleIndex) {
|
|
397
|
+
if (!isDraggingLeft) {
|
|
398
|
+
// Offset for range if dragging right
|
|
399
|
+
toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];
|
|
400
|
+
}
|
|
401
|
+
var _newMovedColumns3 = this.moveColumn(draggingColumn, toVisibleIndex, movedColumns);
|
|
402
|
+
grid.setState({
|
|
403
|
+
movedColumns: _newMovedColumns3,
|
|
404
|
+
draggingColumn: this.draggingColumn
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
var toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);
|
|
408
|
+
if (isDraggingLeft) {
|
|
409
|
+
var _toColumnInfo$left;
|
|
410
|
+
this.draggingOffset = mouseX - ((_toColumnInfo$left = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.left) !== null && _toColumnInfo$left !== void 0 ? _toColumnInfo$left : 0);
|
|
411
|
+
} else {
|
|
412
|
+
var _toColumnInfo$right;
|
|
413
|
+
this.draggingOffset = mouseX - (((_toColumnInfo$right = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.right) !== null && _toColumnInfo$right !== void 0 ? _toColumnInfo$right : 0) - draggingColumn.width);
|
|
414
|
+
}
|
|
415
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
416
|
+
left: mouseX - this.draggingOffset
|
|
417
|
+
});
|
|
418
|
+
grid.setState({
|
|
419
|
+
draggingColumn: this.draggingColumn
|
|
420
|
+
});
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
if (floatingDraggingLeft <= floatingLeftWidth) {
|
|
424
|
+
this.setScrollInterval(grid, 'left');
|
|
425
|
+
} else if (floatingDraggingRight > width) {
|
|
426
|
+
this.setScrollInterval(grid, 'right');
|
|
427
|
+
} else {
|
|
428
|
+
this.clearScrollInterval();
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
// Can't swap a column with itself
|
|
432
|
+
if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Can't swap a column to the left when dragging right or vice versa
|
|
437
|
+
if (isDraggingLeft && draggingColumn.visibleIndex < swapColumn.visibleIndex || !isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex) {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
var switchPoint = swapColumn.left + swapColumn.width * 0.5;
|
|
441
|
+
var draggingParentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);
|
|
442
|
+
|
|
443
|
+
// Get the highest level group that is not the common base group
|
|
444
|
+
// This group is what we need to drag past
|
|
445
|
+
var maxDepthSwapGroup;
|
|
446
|
+
var maxSwapDepth = ((_draggingParentGroup$ = draggingParentGroup === null || draggingParentGroup === void 0 ? void 0 : draggingParentGroup.depth) !== null && _draggingParentGroup$ !== void 0 ? _draggingParentGroup$ : columnHeaderMaxDepth) - 1;
|
|
447
|
+
while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {
|
|
448
|
+
maxDepthSwapGroup = model.getColumnHeaderGroup(swapColumn.modelIndex, maxSwapDepth);
|
|
449
|
+
maxSwapDepth -= 1;
|
|
450
|
+
}
|
|
451
|
+
var newMovedColumns;
|
|
452
|
+
if (isDraggingLeft && floatingDraggingLeft < switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[0])) {
|
|
453
|
+
newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[0], movedColumns);
|
|
454
|
+
}
|
|
455
|
+
if (!isDraggingLeft && floatingDraggingRight > switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[1])) {
|
|
456
|
+
newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);
|
|
457
|
+
}
|
|
458
|
+
if (!newMovedColumns) {
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
462
|
+
left: floatingDraggingLeft
|
|
463
|
+
});
|
|
464
|
+
grid.setState({
|
|
465
|
+
movedColumns: newMovedColumns,
|
|
466
|
+
draggingColumn: this.draggingColumn
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* Applies the column move and updates draggingColumn in the mouse handler
|
|
472
|
+
* Does not check if the move is valid
|
|
473
|
+
* @param draggingColumn The dragging column info
|
|
474
|
+
* @param to The index to move the column or range to
|
|
475
|
+
* @param movedColumns The array of column moves
|
|
476
|
+
* @returns A new array of column moves
|
|
477
|
+
*/
|
|
478
|
+
moveColumn(draggingColumn, to, movedColumns) {
|
|
479
|
+
var newMovedColumns = draggingColumn.isColumnGroup ? GridUtils.moveRange(draggingColumn.range, to, movedColumns) : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);
|
|
480
|
+
var moveDistance = to - draggingColumn.range[0];
|
|
481
|
+
var newDraggingRange = [draggingColumn.range[0] + moveDistance, draggingColumn.range[1] + moveDistance];
|
|
482
|
+
if (this.draggingColumn) {
|
|
483
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
484
|
+
range: newDraggingRange
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
return newMovedColumns;
|
|
488
|
+
}
|
|
489
|
+
onUp(gridPoint, grid) {
|
|
490
|
+
this.cursor = null;
|
|
491
|
+
this.clearScrollInterval();
|
|
492
|
+
if (this.draggingOffset != null) {
|
|
493
|
+
this.draggingOffset = undefined;
|
|
494
|
+
grid.setState({
|
|
495
|
+
draggingColumn: null,
|
|
496
|
+
isDragging: false
|
|
497
|
+
});
|
|
498
|
+
return true;
|
|
499
|
+
}
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
export default GridColumnMoveMouseHandler;
|
|
504
|
+
//# sourceMappingURL=GridColumnMoveMouseHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GridColumnMoveMouseHandler.js","names":["clamp","GridUtils","GridMouseHandler","SLOPPY_CLICK_DISTANCE","SCROLL_INTERVAL","SCROLL_DELTA","getColumnInfo","visibleIndex","depth","metrics","model","modelColumns","movedColumns","allColumnXs","columnCount","allColumnWidths","userColumnWidths","calculatedColumnWidths","floatingLeftWidth","maxX","modelIndex","get","getModelIndex","group","getColumnHeaderGroup","isColumnGroup","left","right","range","startVisibleIndex","endVisibleIndex","getVisibleRange","possibleLeft","width","GridColumnMoveMouseHandler","setScrollInterval","grid","direction","scrollingInterval","scrollingDirection","window","setInterval","lastLeft","leftOffset","nextLeft","nextOffset","prevColumnWidth","undefined","leftColumnWidth","mouseX","mouseY","state","moveDraggingColumn","setState","clearScrollInterval","clearInterval","onLeave","onDown","gridPoint","props","x","column","columnHeaderDepth","Error","columnInfo","rowHeaderWidth","initialGridPoint","draggingColumn","cursor","isColumnMovable","draggingOffset","initialOffset","onDrag","event","y","Math","abs","initialColumnInfo","startColumn","endColumn","isDragging","movementX","deltaX","draggingColumnDepth","columnHeaderMaxDepth","isDraggingLeft","floatingDraggingLeft","floatingDraggingRight","swapColumn","getColumnAtX","parentGroup","getColumnHeaderParentGroup","parentVisibleRange","newMovedColumns","moveColumn","parentRight","toVisibleIndex","toColumnInfo","switchPoint","draggingParentGroup","maxDepthSwapGroup","maxSwapDepth","to","moveRange","moveItem","moveDistance","newDraggingRange","onUp"],"sources":["../../src/mouse-handlers/GridColumnMoveMouseHandler.ts"],"sourcesContent":["import clamp from 'lodash.clamp';\nimport Grid from '../Grid';\nimport GridUtils, { GridPoint } from '../GridUtils';\nimport GridMouseHandler, { GridMouseEvent } from '../GridMouseHandler';\nimport { EventHandlerResult } from '../EventHandlerResult';\nimport type {\n VisibleIndex,\n ModelIndex,\n GridMetrics,\n MoveOperation,\n Coordinate,\n} from '../GridMetrics';\nimport type { BoundedAxisRange } from '../GridAxisRange';\nimport type GridModel from '../GridModel';\nimport type { IColumnHeaderGroup } from '../ColumnHeaderGroup';\n\nconst SLOPPY_CLICK_DISTANCE = 5;\nconst SCROLL_INTERVAL = 1000 / 60;\nconst SCROLL_DELTA = 10;\n\nexport interface DraggingColumn {\n range: BoundedAxisRange;\n depth: number;\n left: Coordinate;\n width: number;\n}\n\ninterface ColumnInfo {\n visibleIndex: VisibleIndex;\n modelIndex: ModelIndex;\n left: number;\n right: number;\n width: number;\n isColumnGroup: boolean;\n range: BoundedAxisRange;\n depth: number;\n}\n\n/**\n * Gets info about a visible column\n * @param visibleIndex The visible index to get info for\n * @param depth The header depth to get info for\n * @param metrics Grid metrics\n * @param model Grid model\n * @returns The column info at the depth.\n * If the column is not in a group at that depth, returns the info for the base column.\n * Returns null if the column is not visible.\n */\nfunction getColumnInfo(\n visibleIndex: VisibleIndex | null,\n depth: number | undefined,\n metrics: GridMetrics,\n model: GridModel\n): ColumnInfo | null {\n const {\n modelColumns,\n movedColumns,\n allColumnXs,\n columnCount,\n allColumnWidths,\n userColumnWidths,\n calculatedColumnWidths,\n floatingLeftWidth,\n maxX,\n } = metrics;\n\n if (\n depth == null ||\n visibleIndex == null ||\n visibleIndex > columnCount ||\n visibleIndex < 0\n ) {\n return null;\n }\n\n const modelIndex =\n modelColumns.get(visibleIndex) ??\n GridUtils.getModelIndex(visibleIndex, movedColumns);\n\n const group = model.getColumnHeaderGroup(modelIndex, depth);\n const isColumnGroup = group != null;\n\n let left: number;\n let right: number;\n let range: BoundedAxisRange;\n\n if (group != null) {\n const [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(\n movedColumns\n );\n\n left = allColumnXs.get(startVisibleIndex) ?? floatingLeftWidth;\n right =\n (allColumnXs.get(endVisibleIndex) ?? maxX) +\n (allColumnWidths.get(endVisibleIndex) ?? 0);\n range = [startVisibleIndex, endVisibleIndex];\n } else {\n const possibleLeft = allColumnXs.get(visibleIndex);\n if (possibleLeft == null) {\n return null;\n }\n\n left = possibleLeft;\n right =\n left +\n (allColumnWidths.get(visibleIndex) ??\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex) ??\n 0);\n range = [visibleIndex, visibleIndex];\n }\n\n return {\n visibleIndex,\n modelIndex,\n left,\n right,\n width: right - left,\n isColumnGroup,\n range,\n depth,\n };\n}\n\nclass GridColumnMoveMouseHandler extends GridMouseHandler {\n cursor: string | null = null;\n\n private draggingOffset?: number;\n\n private initialOffset?: number;\n\n private initialGridPoint?: GridPoint;\n\n private scrollingInterval?: number;\n\n private scrollingDirection?: 'left' | 'right';\n\n private draggingColumn: DraggingColumn | null = null;\n\n private setScrollInterval(grid: Grid, direction: 'left' | 'right'): void {\n if (\n this.scrollingInterval != null &&\n direction === this.scrollingDirection\n ) {\n return;\n }\n\n this.scrollingDirection = direction;\n this.scrollingInterval = window.setInterval(() => {\n const { metrics } = grid;\n if (!metrics) {\n return;\n }\n\n const {\n left,\n lastLeft,\n leftOffset,\n userColumnWidths,\n calculatedColumnWidths,\n movedColumns,\n allColumnWidths,\n } = metrics;\n\n let nextLeft = left;\n let nextOffset = leftOffset;\n if (direction === 'left') {\n nextOffset -= SCROLL_DELTA;\n while (nextOffset < 0) {\n nextLeft -= 1;\n const modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);\n const prevColumnWidth =\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex);\n if (prevColumnWidth === undefined) {\n nextOffset = 0;\n } else {\n nextOffset += prevColumnWidth;\n }\n if (nextLeft < 0) {\n nextOffset = 0;\n nextLeft = 0;\n }\n }\n } else {\n nextOffset += SCROLL_DELTA;\n let leftColumnWidth = allColumnWidths.get(left);\n while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {\n nextLeft += 1;\n nextOffset -= leftColumnWidth;\n const modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);\n leftColumnWidth =\n userColumnWidths.get(modelIndex) ??\n calculatedColumnWidths.get(modelIndex);\n\n if (nextLeft > lastLeft) {\n nextOffset = 0;\n nextLeft = lastLeft;\n }\n }\n }\n\n const { mouseX, mouseY } = grid.state;\n\n if (metrics == null || mouseX == null || mouseY == null) {\n return;\n }\n\n this.moveDraggingColumn(\n mouseX,\n grid,\n direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA\n );\n grid.setState({ left: nextLeft, leftOffset: nextOffset });\n\n if (\n (direction === 'left' && nextLeft === 0 && leftOffset === 0) ||\n (direction === 'right' && nextLeft === lastLeft)\n ) {\n this.clearScrollInterval();\n }\n }, SCROLL_INTERVAL);\n }\n\n private clearScrollInterval(): void {\n this.scrollingDirection = undefined;\n window.clearInterval(this.scrollingInterval);\n this.scrollingInterval = undefined;\n }\n\n onLeave(): EventHandlerResult {\n this.clearScrollInterval();\n return false;\n }\n\n onDown(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n const { model } = grid.props;\n const { x, column, columnHeaderDepth } = gridPoint;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);\n\n if (column == null || columnInfo == null || columnHeaderDepth == null) {\n return false;\n }\n\n // Can't drag a base column from the empty group area\n if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {\n return false;\n }\n\n const { rowHeaderWidth } = metrics;\n\n this.initialGridPoint = gridPoint;\n this.draggingColumn = null;\n this.cursor = null;\n\n if (\n columnInfo.modelIndex != null &&\n columnHeaderDepth != null &&\n model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)\n ) {\n this.draggingOffset = x - columnInfo.left - rowHeaderWidth;\n this.initialOffset = this.draggingOffset;\n }\n return false;\n }\n\n onDrag(\n gridPoint: GridPoint,\n grid: Grid,\n event: GridMouseEvent\n ): EventHandlerResult {\n if (\n this.draggingOffset === undefined ||\n this.initialGridPoint === undefined ||\n this.initialOffset === undefined\n ) {\n return false;\n }\n\n const { x: mouseX, y: mouseY } = gridPoint;\n const { columnHeaderDepth } = this.initialGridPoint;\n\n const { model } = grid.props;\n let { draggingColumn } = this;\n const { metrics } = grid;\n\n if (!metrics) throw new Error('Metrics not set');\n\n // before considering it a drag, the mouse must have moved a minimum distance\n // this prevents click actions from triggering a drag state\n if (\n !draggingColumn &&\n Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE &&\n Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE\n ) {\n return false;\n }\n\n // Get the initial dragging column info\n if (draggingColumn == null) {\n const initialColumnInfo = getColumnInfo(\n this.initialGridPoint.column,\n columnHeaderDepth,\n metrics,\n model\n );\n\n if (!initialColumnInfo || columnHeaderDepth == null) {\n return false;\n }\n\n if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {\n return false;\n }\n\n // Disallow dragging from the blank space in column header groups\n if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {\n return false;\n }\n\n if (initialColumnInfo.range[0] == null) {\n return false;\n }\n\n draggingColumn = {\n range: initialColumnInfo.range,\n depth: columnHeaderDepth,\n left: initialColumnInfo.left,\n width: initialColumnInfo.width,\n };\n\n const startColumn = getColumnInfo(\n draggingColumn.range[0],\n 0,\n metrics,\n model\n );\n const endColumn = getColumnInfo(\n draggingColumn.range[1],\n 0,\n metrics,\n model\n );\n\n // Group goes off the table. Drag and drop could be wonky here\n // Column draws only use columns that are partially visible too\n // So this could cause rendering errors if we tried dragging it\n if (!startColumn || !endColumn) {\n return false;\n }\n\n this.draggingColumn = draggingColumn;\n grid.setState({ draggingColumn, isDragging: true });\n }\n\n /**\n * At this point, we have determined we are actually dragging a column\n */\n this.cursor = 'move';\n\n this.moveDraggingColumn(gridPoint.x, grid, event.movementX);\n\n return true;\n }\n\n /**\n * Moves a dragging column, if possible, the specified distance\n * @param mouseX The point the move was initiated from\n * @param grid The Grid component\n * @param deltaX The distance of the move\n */\n moveDraggingColumn(mouseX: number, grid: Grid, deltaX: number): void {\n if (\n this.draggingOffset === undefined ||\n this.initialGridPoint === undefined ||\n this.initialOffset === undefined ||\n this.draggingColumn == null ||\n deltaX === 0\n ) {\n return;\n }\n\n // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again\n if (this.initialOffset !== this.draggingOffset) {\n // Pre move < Initial < Post move or vice-versa\n // User crossed back past the iniital offset point, so we can start moving again\n if (\n (this.draggingOffset < this.initialOffset &&\n this.initialOffset < this.draggingOffset + deltaX) ||\n (this.draggingOffset > this.initialOffset &&\n this.initialOffset > this.draggingOffset + deltaX)\n ) {\n this.draggingOffset = this.initialOffset;\n } else {\n // Column can't move since we aren't back at the initial offset yet\n this.draggingOffset += deltaX;\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n grid.setState({ draggingColumn: this.draggingColumn });\n return;\n }\n\n const { depth: draggingColumnDepth } = this.draggingColumn;\n\n const { model } = grid.props;\n const { movedColumns } = grid.state;\n const { metrics } = grid;\n if (!metrics) throw new Error('Metrics not set');\n\n const {\n floatingLeftWidth,\n width,\n columnHeaderMaxDepth,\n allColumnXs,\n } = metrics;\n\n const isDraggingLeft = deltaX < 0;\n\n const draggingColumn = getColumnInfo(\n this.draggingColumn.range[0],\n draggingColumnDepth,\n metrics,\n model\n );\n\n if (!draggingColumn) {\n return;\n }\n\n // The returned left/right are the original position, not dragged position\n // This is where the dragging column's floating position accounting for dragged distance\n const floatingDraggingLeft = mouseX - this.draggingOffset;\n const floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: floatingDraggingLeft,\n };\n grid.setState({\n draggingColumn: this.draggingColumn,\n });\n\n const swapColumn = getColumnInfo(\n GridUtils.getColumnAtX(\n clamp(\n isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight,\n floatingLeftWidth,\n width\n ),\n metrics,\n true\n ),\n draggingColumnDepth,\n metrics,\n model\n );\n\n const parentGroup = model.getColumnHeaderParentGroup(\n draggingColumn.modelIndex,\n draggingColumn.depth\n );\n\n if (!swapColumn) {\n return;\n }\n\n // Check if we should pin to the edge of the parent\n if (parentGroup !== undefined) {\n const parentVisibleRange = parentGroup.getVisibleRange(movedColumns);\n // Cannot move to this left position, pin to left of parent\n if (swapColumn.visibleIndex < parentVisibleRange[0]) {\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n parentVisibleRange[0],\n movedColumns\n );\n\n this.draggingOffset =\n mouseX - (allColumnXs.get(parentVisibleRange[0]) ?? 0);\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: newMovedColumns,\n });\n return;\n }\n\n // Pin to the right of parent\n if (swapColumn.visibleIndex > parentVisibleRange[1]) {\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n parentVisibleRange[1] -\n (draggingColumn.range[1] - draggingColumn.range[0]),\n movedColumns\n );\n\n const { right: parentRight = 0 } =\n getColumnInfo(parentVisibleRange[1], 0, metrics, model) ?? {};\n\n this.draggingOffset = mouseX - (parentRight - draggingColumn.width);\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n this.clearScrollInterval();\n grid.setState({\n draggingColumn: this.draggingColumn,\n movedColumns: newMovedColumns,\n });\n return;\n }\n }\n\n // Hit an unmovable column, move to the first available position next to it\n if (!model.isColumnMovable(swapColumn.modelIndex)) {\n let toVisibleIndex = swapColumn.visibleIndex;\n if (isDraggingLeft) {\n toVisibleIndex += 1;\n while (\n toVisibleIndex < draggingColumn.visibleIndex &&\n !model.isColumnMovable(\n GridUtils.getModelIndex(toVisibleIndex, movedColumns)\n )\n ) {\n toVisibleIndex += 1;\n }\n } else {\n toVisibleIndex -= 1;\n while (\n toVisibleIndex > draggingColumn.visibleIndex &&\n !model.isColumnMovable(\n GridUtils.getModelIndex(toVisibleIndex, movedColumns)\n )\n ) {\n toVisibleIndex -= 1;\n }\n }\n\n if (toVisibleIndex !== draggingColumn.visibleIndex) {\n if (!isDraggingLeft) {\n // Offset for range if dragging right\n toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];\n }\n\n const newMovedColumns = this.moveColumn(\n draggingColumn,\n toVisibleIndex,\n movedColumns\n );\n\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn,\n });\n }\n\n const toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);\n if (isDraggingLeft) {\n this.draggingOffset = mouseX - (toColumnInfo?.left ?? 0);\n } else {\n this.draggingOffset =\n mouseX - ((toColumnInfo?.right ?? 0) - draggingColumn.width);\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: mouseX - this.draggingOffset,\n };\n\n grid.setState({\n draggingColumn: this.draggingColumn,\n });\n\n return;\n }\n\n if (floatingDraggingLeft <= floatingLeftWidth) {\n this.setScrollInterval(grid, 'left');\n } else if (floatingDraggingRight > width) {\n this.setScrollInterval(grid, 'right');\n } else {\n this.clearScrollInterval();\n }\n\n // Can't swap a column with itself\n if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {\n return;\n }\n\n // Can't swap a column to the left when dragging right or vice versa\n if (\n (isDraggingLeft &&\n draggingColumn.visibleIndex < swapColumn.visibleIndex) ||\n (!isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex)\n ) {\n return;\n }\n\n const switchPoint = swapColumn.left + swapColumn.width * 0.5;\n const draggingParentGroup = model.getColumnHeaderParentGroup(\n draggingColumn.modelIndex,\n draggingColumn.depth\n );\n\n // Get the highest level group that is not the common base group\n // This group is what we need to drag past\n let maxDepthSwapGroup: IColumnHeaderGroup | undefined;\n let maxSwapDepth = (draggingParentGroup?.depth ?? columnHeaderMaxDepth) - 1;\n while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {\n maxDepthSwapGroup = model.getColumnHeaderGroup(\n swapColumn.modelIndex,\n maxSwapDepth\n );\n maxSwapDepth -= 1;\n }\n\n let newMovedColumns: readonly MoveOperation[] | undefined;\n\n if (\n isDraggingLeft &&\n floatingDraggingLeft < switchPoint &&\n (!maxDepthSwapGroup ||\n swapColumn.visibleIndex ===\n maxDepthSwapGroup.getVisibleRange(movedColumns)[0])\n ) {\n newMovedColumns = this.moveColumn(\n draggingColumn,\n swapColumn.range[0],\n movedColumns\n );\n }\n\n if (\n !isDraggingLeft &&\n floatingDraggingRight > switchPoint &&\n (!maxDepthSwapGroup ||\n swapColumn.visibleIndex ===\n maxDepthSwapGroup.getVisibleRange(movedColumns)[1])\n ) {\n newMovedColumns = this.moveColumn(\n draggingColumn,\n swapColumn.range[1] -\n (draggingColumn.range[1] - draggingColumn.range[0]),\n movedColumns\n );\n }\n\n if (!newMovedColumns) {\n return;\n }\n\n this.draggingColumn = {\n ...this.draggingColumn,\n left: floatingDraggingLeft,\n };\n\n grid.setState({\n movedColumns: newMovedColumns,\n draggingColumn: this.draggingColumn,\n });\n }\n\n /**\n * Applies the column move and updates draggingColumn in the mouse handler\n * Does not check if the move is valid\n * @param draggingColumn The dragging column info\n * @param to The index to move the column or range to\n * @param movedColumns The array of column moves\n * @returns A new array of column moves\n */\n moveColumn(\n draggingColumn: ColumnInfo,\n to: number,\n movedColumns: readonly MoveOperation[]\n ): MoveOperation[] {\n const newMovedColumns = draggingColumn.isColumnGroup\n ? GridUtils.moveRange(draggingColumn.range, to, movedColumns)\n : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);\n\n const moveDistance = to - draggingColumn.range[0];\n const newDraggingRange: BoundedAxisRange = [\n draggingColumn.range[0] + moveDistance,\n draggingColumn.range[1] + moveDistance,\n ];\n\n if (this.draggingColumn) {\n this.draggingColumn = {\n ...this.draggingColumn,\n range: newDraggingRange,\n };\n }\n\n return newMovedColumns;\n }\n\n onUp(gridPoint: GridPoint, grid: Grid): EventHandlerResult {\n this.cursor = null;\n\n this.clearScrollInterval();\n\n if (this.draggingOffset != null) {\n this.draggingOffset = undefined;\n grid.setState({\n draggingColumn: null,\n isDragging: false,\n });\n return true;\n }\n\n return false;\n }\n}\n\nexport default GridColumnMoveMouseHandler;\n"],"mappings":"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"}
|