@deephaven/grid 0.15.1 → 0.15.2
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/ColumnHeaderGroup.d.ts +9 -0
- package/dist/ColumnHeaderGroup.d.ts.map +1 -0
- package/dist/ColumnHeaderGroup.js +2 -0
- package/dist/ColumnHeaderGroup.js.map +1 -0
- package/dist/Grid.d.ts +5 -4
- package/dist/Grid.d.ts.map +1 -1
- package/dist/Grid.js +5 -6
- package/dist/Grid.js.map +1 -1
- package/dist/GridAxisRange.d.ts +10 -0
- package/dist/GridAxisRange.d.ts.map +1 -0
- package/dist/GridAxisRange.js +17 -0
- package/dist/GridAxisRange.js.map +1 -0
- package/dist/GridMetricCalculator.d.ts +10 -8
- package/dist/GridMetricCalculator.d.ts.map +1 -1
- package/dist/GridMetricCalculator.js +38 -16
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridMetrics.d.ts +8 -4
- package/dist/GridMetrics.d.ts.map +1 -1
- package/dist/GridModel.d.ts +20 -2
- package/dist/GridModel.d.ts.map +1 -1
- package/dist/GridModel.js +30 -2
- package/dist/GridModel.js.map +1 -1
- package/dist/GridMouseHandler.d.ts +0 -1
- package/dist/GridMouseHandler.d.ts.map +1 -1
- package/dist/GridRenderer.d.ts +33 -6
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +428 -179
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridUtils.d.ts +34 -24
- package/dist/GridUtils.d.ts.map +1 -1
- package/dist/GridUtils.js +99 -61
- package/dist/GridUtils.js.map +1 -1
- package/dist/MockGridModel.d.ts +1 -1
- package/dist/MockGridModel.d.ts.map +1 -1
- package/dist/MockGridModel.js +1 -0
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.d.ts +0 -1
- package/dist/MockTreeGridModel.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts +44 -4
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +486 -80
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +7 -5
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +26 -14
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +7 -5
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +11 -14
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts +11 -4
- package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +41 -31
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/index.d.ts +1 -0
- package/dist/mouse-handlers/index.js +1 -0
- package/dist/mouse-handlers/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,9 +1,84 @@
|
|
|
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
|
+
|
|
3
|
+
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; }
|
|
4
|
+
|
|
1
5
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
6
|
|
|
7
|
+
import clamp from 'lodash.clamp';
|
|
3
8
|
import GridUtils from "../GridUtils.js";
|
|
4
9
|
import GridMouseHandler from "../GridMouseHandler.js";
|
|
5
|
-
import { getOrThrow } from "../GridMetricCalculator.js";
|
|
6
10
|
var SLOPPY_CLICK_DISTANCE = 5;
|
|
11
|
+
var SCROLL_INTERVAL = 1000 / 60;
|
|
12
|
+
var SCROLL_DELTA = 10;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Gets info about a visible column
|
|
16
|
+
* @param visibleIndex The visible index to get info for
|
|
17
|
+
* @param depth The header depth to get info for
|
|
18
|
+
* @param metrics Grid metrics
|
|
19
|
+
* @param model Grid model
|
|
20
|
+
* @returns The column info at the depth.
|
|
21
|
+
* If the column is not in a group at that depth, returns the info for the base column.
|
|
22
|
+
* Returns null if the column is not visible.
|
|
23
|
+
*/
|
|
24
|
+
function getColumnInfo(visibleIndex, depth, metrics, model) {
|
|
25
|
+
var _modelColumns$get;
|
|
26
|
+
|
|
27
|
+
var {
|
|
28
|
+
modelColumns,
|
|
29
|
+
movedColumns,
|
|
30
|
+
visibleColumnXs,
|
|
31
|
+
columnCount,
|
|
32
|
+
visibleColumnWidths,
|
|
33
|
+
userColumnWidths,
|
|
34
|
+
calculatedColumnWidths,
|
|
35
|
+
floatingLeftWidth,
|
|
36
|
+
maxX
|
|
37
|
+
} = metrics;
|
|
38
|
+
|
|
39
|
+
if (depth == null || visibleIndex == null || visibleIndex > columnCount || visibleIndex < 0) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var modelIndex = (_modelColumns$get = modelColumns.get(visibleIndex)) !== null && _modelColumns$get !== void 0 ? _modelColumns$get : GridUtils.getModelIndex(visibleIndex, movedColumns);
|
|
44
|
+
var group = model.getColumnHeaderGroup(modelIndex, depth);
|
|
45
|
+
var isColumnGroup = group != null;
|
|
46
|
+
var left;
|
|
47
|
+
var right;
|
|
48
|
+
var range;
|
|
49
|
+
|
|
50
|
+
if (group != null) {
|
|
51
|
+
var _visibleColumnXs$get, _visibleColumnXs$get2, _visibleColumnWidths$;
|
|
52
|
+
|
|
53
|
+
var [startVisibleIndex, endVisibleIndex] = group.getVisibleRange(movedColumns);
|
|
54
|
+
left = (_visibleColumnXs$get = visibleColumnXs.get(startVisibleIndex)) !== null && _visibleColumnXs$get !== void 0 ? _visibleColumnXs$get : floatingLeftWidth;
|
|
55
|
+
right = ((_visibleColumnXs$get2 = visibleColumnXs.get(endVisibleIndex)) !== null && _visibleColumnXs$get2 !== void 0 ? _visibleColumnXs$get2 : maxX) + ((_visibleColumnWidths$ = visibleColumnWidths.get(endVisibleIndex)) !== null && _visibleColumnWidths$ !== void 0 ? _visibleColumnWidths$ : 0);
|
|
56
|
+
range = [startVisibleIndex, endVisibleIndex];
|
|
57
|
+
} else {
|
|
58
|
+
var _ref, _ref2, _visibleColumnWidths$2;
|
|
59
|
+
|
|
60
|
+
var possibleLeft = visibleColumnXs.get(visibleIndex);
|
|
61
|
+
|
|
62
|
+
if (possibleLeft == null) {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
left = possibleLeft;
|
|
67
|
+
right = left + ((_ref = (_ref2 = (_visibleColumnWidths$2 = visibleColumnWidths.get(visibleIndex)) !== null && _visibleColumnWidths$2 !== void 0 ? _visibleColumnWidths$2 : userColumnWidths.get(modelIndex)) !== null && _ref2 !== void 0 ? _ref2 : calculatedColumnWidths.get(modelIndex)) !== null && _ref !== void 0 ? _ref : 0);
|
|
68
|
+
range = [visibleIndex, visibleIndex];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return {
|
|
72
|
+
visibleIndex,
|
|
73
|
+
modelIndex,
|
|
74
|
+
left,
|
|
75
|
+
right,
|
|
76
|
+
width: right - left,
|
|
77
|
+
isColumnGroup,
|
|
78
|
+
range,
|
|
79
|
+
depth
|
|
80
|
+
};
|
|
81
|
+
}
|
|
7
82
|
|
|
8
83
|
class GridColumnMoveMouseHandler extends GridMouseHandler {
|
|
9
84
|
constructor() {
|
|
@@ -13,9 +88,116 @@ class GridColumnMoveMouseHandler extends GridMouseHandler {
|
|
|
13
88
|
|
|
14
89
|
_defineProperty(this, "draggingOffset", void 0);
|
|
15
90
|
|
|
16
|
-
_defineProperty(this, "
|
|
91
|
+
_defineProperty(this, "initialOffset", void 0);
|
|
92
|
+
|
|
93
|
+
_defineProperty(this, "initialGridPoint", void 0);
|
|
94
|
+
|
|
95
|
+
_defineProperty(this, "scrollingInterval", void 0);
|
|
96
|
+
|
|
97
|
+
_defineProperty(this, "scrollingDirection", void 0);
|
|
98
|
+
|
|
99
|
+
_defineProperty(this, "draggingColumn", null);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
setScrollInterval(grid, direction) {
|
|
103
|
+
if (this.scrollingInterval != null && direction === this.scrollingDirection) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
this.scrollingDirection = direction;
|
|
108
|
+
this.scrollingInterval = window.setInterval(() => {
|
|
109
|
+
var {
|
|
110
|
+
metrics
|
|
111
|
+
} = grid;
|
|
112
|
+
|
|
113
|
+
if (!metrics) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
var {
|
|
118
|
+
left,
|
|
119
|
+
lastLeft,
|
|
120
|
+
leftOffset,
|
|
121
|
+
userColumnWidths,
|
|
122
|
+
calculatedColumnWidths,
|
|
123
|
+
movedColumns,
|
|
124
|
+
visibleColumnWidths
|
|
125
|
+
} = metrics;
|
|
126
|
+
var nextLeft = left;
|
|
127
|
+
var nextOffset = leftOffset;
|
|
128
|
+
|
|
129
|
+
if (direction === 'left') {
|
|
130
|
+
nextOffset -= SCROLL_DELTA;
|
|
131
|
+
|
|
132
|
+
while (nextOffset < 0) {
|
|
133
|
+
var _userColumnWidths$get;
|
|
134
|
+
|
|
135
|
+
nextLeft -= 1;
|
|
136
|
+
var modelIndex = GridUtils.getModelIndex(left - 1, movedColumns);
|
|
137
|
+
var prevColumnWidth = (_userColumnWidths$get = userColumnWidths.get(modelIndex)) !== null && _userColumnWidths$get !== void 0 ? _userColumnWidths$get : calculatedColumnWidths.get(modelIndex);
|
|
138
|
+
|
|
139
|
+
if (prevColumnWidth === undefined) {
|
|
140
|
+
nextOffset = 0;
|
|
141
|
+
} else {
|
|
142
|
+
nextOffset += prevColumnWidth;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (nextLeft < 0) {
|
|
146
|
+
nextOffset = 0;
|
|
147
|
+
nextLeft = 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} else {
|
|
151
|
+
nextOffset += SCROLL_DELTA;
|
|
152
|
+
var leftColumnWidth = visibleColumnWidths.get(left);
|
|
153
|
+
|
|
154
|
+
while (leftColumnWidth !== undefined && nextOffset > leftColumnWidth) {
|
|
155
|
+
var _userColumnWidths$get2;
|
|
156
|
+
|
|
157
|
+
nextLeft += 1;
|
|
158
|
+
nextOffset -= leftColumnWidth;
|
|
159
|
+
|
|
160
|
+
var _modelIndex = GridUtils.getModelIndex(left + 1, movedColumns);
|
|
161
|
+
|
|
162
|
+
leftColumnWidth = (_userColumnWidths$get2 = userColumnWidths.get(_modelIndex)) !== null && _userColumnWidths$get2 !== void 0 ? _userColumnWidths$get2 : calculatedColumnWidths.get(_modelIndex);
|
|
163
|
+
|
|
164
|
+
if (nextLeft > lastLeft) {
|
|
165
|
+
nextOffset = 0;
|
|
166
|
+
nextLeft = lastLeft;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
var {
|
|
172
|
+
mouseX,
|
|
173
|
+
mouseY
|
|
174
|
+
} = grid.state;
|
|
17
175
|
|
|
18
|
-
|
|
176
|
+
if (!metrics || mouseX == null || mouseY == null) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
this.moveDraggingColumn(mouseX, grid, direction === 'left' ? -SCROLL_DELTA : SCROLL_DELTA);
|
|
181
|
+
grid.setState({
|
|
182
|
+
left: nextLeft,
|
|
183
|
+
leftOffset: nextOffset
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
if (direction === 'left' && nextLeft === 0 && leftOffset === 0 || direction === 'right' && nextLeft === lastLeft) {
|
|
187
|
+
this.clearScrollInterval();
|
|
188
|
+
}
|
|
189
|
+
}, SCROLL_INTERVAL);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
clearScrollInterval() {
|
|
193
|
+
this.scrollingDirection = undefined;
|
|
194
|
+
window.clearInterval(this.scrollingInterval);
|
|
195
|
+
this.scrollingInterval = undefined;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
onLeave() {
|
|
199
|
+
this.clearScrollInterval();
|
|
200
|
+
return false;
|
|
19
201
|
}
|
|
20
202
|
|
|
21
203
|
onDown(gridPoint, grid) {
|
|
@@ -24,151 +206,375 @@ class GridColumnMoveMouseHandler extends GridMouseHandler {
|
|
|
24
206
|
} = grid.props;
|
|
25
207
|
var {
|
|
26
208
|
x,
|
|
27
|
-
|
|
28
|
-
|
|
209
|
+
column,
|
|
210
|
+
columnHeaderDepth
|
|
29
211
|
} = gridPoint;
|
|
30
212
|
var {
|
|
31
213
|
metrics
|
|
32
214
|
} = grid;
|
|
33
215
|
if (!metrics) throw new Error('Metrics not set');
|
|
216
|
+
var columnInfo = getColumnInfo(column, columnHeaderDepth, metrics, model);
|
|
217
|
+
|
|
218
|
+
if (column == null || columnInfo == null || columnHeaderDepth == null) {
|
|
219
|
+
return false;
|
|
220
|
+
} // Can't drag a base column from the empty group area
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
if (columnHeaderDepth > 0 && !columnInfo.isColumnGroup) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
|
|
34
227
|
var {
|
|
35
|
-
|
|
36
|
-
rowHeaderWidth,
|
|
37
|
-
visibleColumnXs
|
|
228
|
+
rowHeaderWidth
|
|
38
229
|
} = metrics;
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
230
|
+
this.initialGridPoint = gridPoint;
|
|
231
|
+
this.draggingColumn = null;
|
|
41
232
|
this.cursor = null;
|
|
42
233
|
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
this.
|
|
46
|
-
grid.setState({
|
|
47
|
-
draggingColumnOffset: this.draggingOffset
|
|
48
|
-
});
|
|
234
|
+
if (columnInfo.modelIndex != null && columnHeaderDepth != null && model.isColumnMovable(columnInfo.modelIndex, columnHeaderDepth)) {
|
|
235
|
+
this.draggingOffset = x - columnInfo.left - rowHeaderWidth;
|
|
236
|
+
this.initialOffset = this.draggingOffset;
|
|
49
237
|
}
|
|
50
238
|
|
|
51
239
|
return false;
|
|
52
240
|
}
|
|
53
241
|
|
|
54
|
-
onDrag(gridPoint, grid) {
|
|
55
|
-
if (this.draggingOffset === undefined || this.
|
|
242
|
+
onDrag(gridPoint, grid, event) {
|
|
243
|
+
if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined) {
|
|
56
244
|
return false;
|
|
57
245
|
}
|
|
58
246
|
|
|
247
|
+
var {
|
|
248
|
+
x: mouseX,
|
|
249
|
+
y: mouseY
|
|
250
|
+
} = gridPoint;
|
|
251
|
+
var {
|
|
252
|
+
columnHeaderDepth
|
|
253
|
+
} = this.initialGridPoint;
|
|
59
254
|
var {
|
|
60
255
|
model
|
|
61
256
|
} = grid.props;
|
|
62
257
|
var {
|
|
63
258
|
draggingColumn
|
|
64
|
-
} =
|
|
259
|
+
} = this;
|
|
65
260
|
var {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
} = grid.state;
|
|
70
|
-
|
|
71
|
-
if (mouseX == null || mouseY == null) {
|
|
72
|
-
return false;
|
|
73
|
-
} // before considering it a drag, the mouse must have moved a minimum distance
|
|
261
|
+
metrics
|
|
262
|
+
} = grid;
|
|
263
|
+
if (!metrics) throw new Error('Metrics not set'); // before considering it a drag, the mouse must have moved a minimum distance
|
|
74
264
|
// this prevents click actions from triggering a drag state
|
|
75
265
|
|
|
76
|
-
|
|
77
|
-
if (!this.sloppyClickThreshold && Math.abs(this.startingGridPoint.x - mouseX) >= SLOPPY_CLICK_DISTANCE || Math.abs(this.startingGridPoint.y - mouseY) >= SLOPPY_CLICK_DISTANCE) {
|
|
78
|
-
this.sloppyClickThreshold = true;
|
|
79
|
-
} else if (!this.sloppyClickThreshold && !isDragging) {
|
|
266
|
+
if (!draggingColumn && Math.abs(this.initialGridPoint.x - mouseX) < SLOPPY_CLICK_DISTANCE && Math.abs(this.initialGridPoint.y - mouseY) < SLOPPY_CLICK_DISTANCE) {
|
|
80
267
|
return false;
|
|
81
|
-
}
|
|
268
|
+
} // Get the initial dragging column info
|
|
269
|
+
|
|
82
270
|
|
|
83
271
|
if (draggingColumn == null) {
|
|
84
|
-
var
|
|
85
|
-
column
|
|
86
|
-
} = grid.getGridPointFromXY(mouseX, mouseY);
|
|
272
|
+
var initialColumnInfo = getColumnInfo(this.initialGridPoint.column, columnHeaderDepth, metrics, model);
|
|
87
273
|
|
|
88
|
-
if (
|
|
274
|
+
if (!initialColumnInfo || columnHeaderDepth == null) {
|
|
89
275
|
return false;
|
|
90
276
|
}
|
|
91
277
|
|
|
92
|
-
|
|
278
|
+
if (!model.isColumnMovable(initialColumnInfo.modelIndex)) {
|
|
279
|
+
return false;
|
|
280
|
+
} // Disallow dragging from the blank space in column header groups
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
if (columnHeaderDepth > 0 && !initialColumnInfo.isColumnGroup) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (initialColumnInfo.range[0] == null) {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
draggingColumn = {
|
|
292
|
+
range: initialColumnInfo.range,
|
|
293
|
+
depth: columnHeaderDepth,
|
|
294
|
+
left: initialColumnInfo.left,
|
|
295
|
+
width: initialColumnInfo.width
|
|
296
|
+
};
|
|
297
|
+
var startColumn = getColumnInfo(draggingColumn.range[0], 0, metrics, model);
|
|
298
|
+
var endColumn = getColumnInfo(draggingColumn.range[1], 0, metrics, model); // Group goes off the table. Drag and drop could be wonky here
|
|
299
|
+
// Column draws only use columns that are partially visible too
|
|
300
|
+
// So this could cause rendering errors if we tried dragging it
|
|
301
|
+
|
|
302
|
+
if (!startColumn || !endColumn) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
this.draggingColumn = draggingColumn;
|
|
93
307
|
grid.setState({
|
|
94
308
|
draggingColumn,
|
|
95
309
|
isDragging: true
|
|
96
310
|
});
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* At this point, we have determined we are actually dragging a column
|
|
314
|
+
*/
|
|
97
315
|
|
|
98
|
-
|
|
99
|
-
|
|
316
|
+
|
|
317
|
+
this.cursor = 'move';
|
|
318
|
+
this.moveDraggingColumn(gridPoint.x, grid, event.movementX);
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Moves a dragging column, if possible, the specified distance
|
|
323
|
+
* @param mouseX The point the move was initiated from
|
|
324
|
+
* @param grid The Grid component
|
|
325
|
+
* @param deltaX The distance of the move
|
|
326
|
+
*/
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
moveDraggingColumn(mouseX, grid, deltaX) {
|
|
330
|
+
var _draggingParentGroup$;
|
|
331
|
+
|
|
332
|
+
if (this.draggingOffset === undefined || this.initialGridPoint === undefined || this.initialOffset === undefined || this.draggingColumn == null || deltaX === 0) {
|
|
333
|
+
return;
|
|
334
|
+
} // Cursor has moved past the column drag bounds, don't move the column until we hit the initial offset point again
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
if (this.initialOffset !== this.draggingOffset) {
|
|
338
|
+
// Pre move < Initial < Post move or vice-versa
|
|
339
|
+
// User crossed back past the iniital offset point, so we can start moving again
|
|
340
|
+
if (this.draggingOffset < this.initialOffset && this.initialOffset < this.draggingOffset + deltaX || this.draggingOffset > this.initialOffset && this.initialOffset > this.draggingOffset + deltaX) {
|
|
341
|
+
this.draggingOffset = this.initialOffset;
|
|
342
|
+
} else {
|
|
343
|
+
// Column can't move since we aren't back at the initial offset yet
|
|
344
|
+
this.draggingOffset += deltaX;
|
|
100
345
|
}
|
|
346
|
+
|
|
347
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
348
|
+
left: mouseX - this.draggingOffset
|
|
349
|
+
});
|
|
350
|
+
grid.setState({
|
|
351
|
+
draggingColumn: this.draggingColumn
|
|
352
|
+
});
|
|
353
|
+
return;
|
|
101
354
|
}
|
|
102
355
|
|
|
103
|
-
|
|
356
|
+
var {
|
|
357
|
+
depth: draggingColumnDepth
|
|
358
|
+
} = this.draggingColumn;
|
|
359
|
+
var {
|
|
360
|
+
model
|
|
361
|
+
} = grid.props;
|
|
362
|
+
var {
|
|
363
|
+
movedColumns
|
|
364
|
+
} = grid.state;
|
|
104
365
|
var {
|
|
105
366
|
metrics
|
|
106
367
|
} = grid;
|
|
107
368
|
if (!metrics) throw new Error('Metrics not set');
|
|
108
369
|
var {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
columnCount,
|
|
114
|
-
rowHeaderWidth,
|
|
115
|
-
visibleColumnWidths,
|
|
116
|
-
visibleColumnXs,
|
|
117
|
-
width
|
|
370
|
+
floatingLeftWidth,
|
|
371
|
+
width,
|
|
372
|
+
columnHeaderMaxDepth,
|
|
373
|
+
visibleColumnXs
|
|
118
374
|
} = metrics;
|
|
119
|
-
var
|
|
375
|
+
var isDraggingLeft = deltaX < 0;
|
|
376
|
+
var draggingColumn = getColumnInfo(this.draggingColumn.range[0], draggingColumnDepth, metrics, model);
|
|
377
|
+
|
|
378
|
+
if (!draggingColumn) {
|
|
379
|
+
return;
|
|
380
|
+
} // The returned left/right are the original position, not dragged position
|
|
381
|
+
// This is where the dragging column's floating position accounting for dragged distance
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
var floatingDraggingLeft = mouseX - this.draggingOffset;
|
|
385
|
+
var floatingDraggingRight = floatingDraggingLeft + draggingColumn.width;
|
|
386
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
387
|
+
left: floatingDraggingLeft
|
|
388
|
+
});
|
|
389
|
+
grid.setState({
|
|
390
|
+
draggingColumn: this.draggingColumn
|
|
391
|
+
});
|
|
392
|
+
var swapColumn = getColumnInfo(GridUtils.getColumnAtX(clamp(isDraggingLeft ? floatingDraggingLeft : floatingDraggingRight, floatingLeftWidth, width), metrics, true), draggingColumnDepth, metrics, model);
|
|
393
|
+
var parentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth);
|
|
394
|
+
|
|
395
|
+
if (!swapColumn) {
|
|
396
|
+
return;
|
|
397
|
+
} // Check if we should pin to the edge of the parent
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
if (parentGroup) {
|
|
401
|
+
var parentVisibleRange = parentGroup.getVisibleRange(movedColumns); // Cannot move to this left position, pin to left of parent
|
|
402
|
+
|
|
403
|
+
if (swapColumn.visibleIndex < parentVisibleRange[0]) {
|
|
404
|
+
var _visibleColumnXs$get3;
|
|
405
|
+
|
|
406
|
+
var _newMovedColumns = this.moveColumn(draggingColumn, parentVisibleRange[0], movedColumns);
|
|
407
|
+
|
|
408
|
+
this.draggingOffset = mouseX - ((_visibleColumnXs$get3 = visibleColumnXs.get(parentVisibleRange[0])) !== null && _visibleColumnXs$get3 !== void 0 ? _visibleColumnXs$get3 : 0);
|
|
409
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
410
|
+
left: mouseX - this.draggingOffset
|
|
411
|
+
});
|
|
412
|
+
this.clearScrollInterval();
|
|
413
|
+
grid.setState({
|
|
414
|
+
draggingColumn: this.draggingColumn,
|
|
415
|
+
movedColumns: _newMovedColumns
|
|
416
|
+
});
|
|
417
|
+
return;
|
|
418
|
+
} // Pin to the right of parent
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
if (swapColumn.visibleIndex > parentVisibleRange[1]) {
|
|
422
|
+
var _getColumnInfo;
|
|
423
|
+
|
|
424
|
+
var _newMovedColumns2 = this.moveColumn(draggingColumn, parentVisibleRange[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);
|
|
425
|
+
|
|
426
|
+
var {
|
|
427
|
+
right: parentRight = 0
|
|
428
|
+
} = (_getColumnInfo = getColumnInfo(parentVisibleRange[1], 0, metrics, model)) !== null && _getColumnInfo !== void 0 ? _getColumnInfo : {};
|
|
429
|
+
this.draggingOffset = mouseX - (parentRight - draggingColumn.width);
|
|
430
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
431
|
+
left: mouseX - this.draggingOffset
|
|
432
|
+
});
|
|
433
|
+
this.clearScrollInterval();
|
|
434
|
+
grid.setState({
|
|
435
|
+
draggingColumn: this.draggingColumn,
|
|
436
|
+
movedColumns: _newMovedColumns2
|
|
437
|
+
});
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
} // Hit an unmovable column, move to the first available position next to it
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
if (!model.isColumnMovable(swapColumn.modelIndex)) {
|
|
444
|
+
var toVisibleIndex = swapColumn.visibleIndex;
|
|
445
|
+
|
|
446
|
+
if (isDraggingLeft) {
|
|
447
|
+
toVisibleIndex += 1;
|
|
448
|
+
|
|
449
|
+
while (toVisibleIndex < draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {
|
|
450
|
+
toVisibleIndex += 1;
|
|
451
|
+
}
|
|
452
|
+
} else {
|
|
453
|
+
toVisibleIndex -= 1;
|
|
454
|
+
|
|
455
|
+
while (toVisibleIndex > draggingColumn.visibleIndex && !model.isColumnMovable(GridUtils.getModelIndex(toVisibleIndex, movedColumns))) {
|
|
456
|
+
toVisibleIndex -= 1;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (toVisibleIndex !== draggingColumn.visibleIndex) {
|
|
461
|
+
if (!isDraggingLeft) {
|
|
462
|
+
// Offset for range if dragging right
|
|
463
|
+
toVisibleIndex -= draggingColumn.range[1] - draggingColumn.range[0];
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
var _newMovedColumns3 = this.moveColumn(draggingColumn, toVisibleIndex, movedColumns);
|
|
467
|
+
|
|
468
|
+
grid.setState({
|
|
469
|
+
movedColumns: _newMovedColumns3,
|
|
470
|
+
draggingColumn: this.draggingColumn
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
var toColumnInfo = getColumnInfo(toVisibleIndex, 0, metrics, model);
|
|
475
|
+
|
|
476
|
+
if (isDraggingLeft) {
|
|
477
|
+
var _toColumnInfo$left;
|
|
478
|
+
|
|
479
|
+
this.draggingOffset = mouseX - ((_toColumnInfo$left = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.left) !== null && _toColumnInfo$left !== void 0 ? _toColumnInfo$left : 0);
|
|
480
|
+
} else {
|
|
481
|
+
var _toColumnInfo$right;
|
|
482
|
+
|
|
483
|
+
this.draggingOffset = mouseX - (((_toColumnInfo$right = toColumnInfo === null || toColumnInfo === void 0 ? void 0 : toColumnInfo.right) !== null && _toColumnInfo$right !== void 0 ? _toColumnInfo$right : 0) - draggingColumn.width);
|
|
484
|
+
}
|
|
120
485
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
486
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
487
|
+
left: mouseX - this.draggingOffset
|
|
488
|
+
});
|
|
489
|
+
grid.setState({
|
|
490
|
+
draggingColumn: this.draggingColumn
|
|
491
|
+
});
|
|
492
|
+
return;
|
|
124
493
|
}
|
|
125
494
|
|
|
126
|
-
|
|
495
|
+
if (floatingDraggingLeft <= floatingLeftWidth) {
|
|
496
|
+
this.setScrollInterval(grid, 'left');
|
|
497
|
+
} else if (floatingDraggingRight > width) {
|
|
498
|
+
this.setScrollInterval(grid, 'right');
|
|
499
|
+
} else {
|
|
500
|
+
this.clearScrollInterval();
|
|
501
|
+
} // Can't swap a column with itself
|
|
502
|
+
|
|
127
503
|
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
|
|
504
|
+
if (swapColumn.visibleIndex === draggingColumn.visibleIndex) {
|
|
505
|
+
return;
|
|
506
|
+
} // Can't swap a column to the left when dragging right or vice versa
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
if (isDraggingLeft && draggingColumn.visibleIndex < swapColumn.visibleIndex || !isDraggingLeft && draggingColumn.visibleIndex > swapColumn.visibleIndex) {
|
|
510
|
+
return;
|
|
131
511
|
}
|
|
132
512
|
|
|
133
|
-
var
|
|
134
|
-
|
|
135
|
-
|
|
513
|
+
var switchPoint = swapColumn.left + swapColumn.width * 0.5;
|
|
514
|
+
var draggingParentGroup = model.getColumnHeaderParentGroup(draggingColumn.modelIndex, draggingColumn.depth); // Get the highest level group that is not the common base group
|
|
515
|
+
// This group is what we need to drag past
|
|
516
|
+
|
|
517
|
+
var maxDepthSwapGroup;
|
|
518
|
+
var maxSwapDepth = ((_draggingParentGroup$ = draggingParentGroup === null || draggingParentGroup === void 0 ? void 0 : draggingParentGroup.depth) !== null && _draggingParentGroup$ !== void 0 ? _draggingParentGroup$ : columnHeaderMaxDepth) - 1;
|
|
519
|
+
|
|
520
|
+
while (maxSwapDepth >= 0 && maxDepthSwapGroup === undefined) {
|
|
521
|
+
maxDepthSwapGroup = model.getColumnHeaderGroup(swapColumn.modelIndex, maxSwapDepth);
|
|
522
|
+
maxSwapDepth -= 1;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
var newMovedColumns;
|
|
526
|
+
|
|
527
|
+
if (isDraggingLeft && floatingDraggingLeft < switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[0])) {
|
|
528
|
+
newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[0], movedColumns);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
if (!isDraggingLeft && floatingDraggingRight > switchPoint && (!maxDepthSwapGroup || swapColumn.visibleIndex === maxDepthSwapGroup.getVisibleRange(movedColumns)[1])) {
|
|
532
|
+
newMovedColumns = this.moveColumn(draggingColumn, swapColumn.range[1] - (draggingColumn.range[1] - draggingColumn.range[0]), movedColumns);
|
|
533
|
+
}
|
|
136
534
|
|
|
137
|
-
if (
|
|
138
|
-
|
|
139
|
-
draggingColumn -= 1;
|
|
140
|
-
} else if (maxX < mouseX && draggingColumn < columnCount - 1 && model.isColumnMovable(grid.getModelColumn(draggingColumn + 1))) {
|
|
141
|
-
movedColumns = GridUtils.moveItem(draggingColumn, draggingColumn + 1, movedColumns);
|
|
142
|
-
draggingColumn += 1;
|
|
535
|
+
if (!newMovedColumns) {
|
|
536
|
+
return;
|
|
143
537
|
}
|
|
144
538
|
|
|
539
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
540
|
+
left: floatingDraggingLeft
|
|
541
|
+
});
|
|
145
542
|
grid.setState({
|
|
146
|
-
movedColumns,
|
|
147
|
-
draggingColumn
|
|
543
|
+
movedColumns: newMovedColumns,
|
|
544
|
+
draggingColumn: this.draggingColumn
|
|
148
545
|
});
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Applies the column move and updates draggingColumn in the mouse handler
|
|
549
|
+
* Does not check if the move is valid
|
|
550
|
+
* @param draggingColumn The dragging column info
|
|
551
|
+
* @param to The index to move the column or range to
|
|
552
|
+
* @param movedColumns The array of column moves
|
|
553
|
+
* @returns A new array of column moves
|
|
554
|
+
*/
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
moveColumn(draggingColumn, to, movedColumns) {
|
|
558
|
+
var newMovedColumns = draggingColumn.isColumnGroup ? GridUtils.moveRange(draggingColumn.range, to, movedColumns) : GridUtils.moveItem(draggingColumn.visibleIndex, to, movedColumns);
|
|
559
|
+
var moveDistance = to - draggingColumn.range[0];
|
|
560
|
+
var newDraggingRange = [draggingColumn.range[0] + moveDistance, draggingColumn.range[1] + moveDistance];
|
|
561
|
+
|
|
562
|
+
if (this.draggingColumn) {
|
|
563
|
+
this.draggingColumn = _objectSpread(_objectSpread({}, this.draggingColumn), {}, {
|
|
564
|
+
range: newDraggingRange
|
|
159
565
|
});
|
|
160
566
|
}
|
|
161
567
|
|
|
162
|
-
return
|
|
568
|
+
return newMovedColumns;
|
|
163
569
|
}
|
|
164
570
|
|
|
165
571
|
onUp(gridPoint, grid) {
|
|
166
572
|
this.cursor = null;
|
|
573
|
+
this.clearScrollInterval();
|
|
167
574
|
|
|
168
575
|
if (this.draggingOffset != null) {
|
|
169
576
|
this.draggingOffset = undefined;
|
|
170
577
|
grid.setState({
|
|
171
|
-
draggingColumnOffset: null,
|
|
172
578
|
draggingColumn: null,
|
|
173
579
|
isDragging: false
|
|
174
580
|
});
|