@gravity-ui/dashkit 8.8.1-beta.2 → 8.8.1-beta.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.
- package/build/cjs/components/GridItem/GridItem.css +1 -0
- package/build/cjs/components/GridLayout/GridLayout.d.ts +1 -1
- package/build/cjs/components/GridLayout/GridLayout.js +15 -8
- package/build/cjs/components/GridLayout/ReactGridLayout.js +21 -59
- package/build/esm/components/GridItem/GridItem.css +1 -0
- package/build/esm/components/GridLayout/GridLayout.d.ts +1 -1
- package/build/esm/components/GridLayout/GridLayout.js +15 -8
- package/build/esm/components/GridLayout/ReactGridLayout.js +21 -59
- package/package.json +1 -1
|
@@ -40,7 +40,7 @@ export default class GridLayout extends React.PureComponent<any, any, any> {
|
|
|
40
40
|
reloadItems(): void;
|
|
41
41
|
_onDragStart: (group: any, _newLayout: any, layoutItem: any) => void;
|
|
42
42
|
_onResizeStart: () => void;
|
|
43
|
-
|
|
43
|
+
_onTargetRestore: () => void;
|
|
44
44
|
_onStop: (group: any, newLayout: any) => void;
|
|
45
45
|
_onSharedDrop: (targetGroup: any, newLayout: any, tempItem: any) => void;
|
|
46
46
|
_onExternalDrop: (group: any, newLayout: any, item: any, e: any) => void;
|
|
@@ -60,14 +60,14 @@ class GridLayout extends react_1.default.PureComponent {
|
|
|
60
60
|
const onStop = this._onStop.bind(this, group);
|
|
61
61
|
const onDrop = this._onDrop.bind(this, group);
|
|
62
62
|
const onDropDragOver = this._onDropDragOver.bind(this, group);
|
|
63
|
-
const
|
|
63
|
+
const onDragTargetRestore = this._onTargetRestore.bind(this, group);
|
|
64
64
|
this._memoCallbacksForGroups[group] = {
|
|
65
65
|
onDragStart,
|
|
66
66
|
onDragStop: onStop,
|
|
67
67
|
onResizeStop: onStop,
|
|
68
68
|
onDrop,
|
|
69
69
|
onDropDragOver,
|
|
70
|
-
|
|
70
|
+
onDragTargetRestore,
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
return this._memoCallbacksForGroups[group];
|
|
@@ -119,10 +119,13 @@ class GridLayout extends react_1.default.PureComponent {
|
|
|
119
119
|
isDragging: true,
|
|
120
120
|
});
|
|
121
121
|
};
|
|
122
|
-
this.
|
|
123
|
-
this.
|
|
124
|
-
|
|
125
|
-
|
|
122
|
+
this._onTargetRestore = () => {
|
|
123
|
+
const { currentDraggingElement } = this.state;
|
|
124
|
+
if (currentDraggingElement) {
|
|
125
|
+
this.setState({
|
|
126
|
+
draggedOverGroup: currentDraggingElement[0],
|
|
127
|
+
});
|
|
128
|
+
}
|
|
126
129
|
};
|
|
127
130
|
this._onStop = (group, newLayout) => {
|
|
128
131
|
const { layoutChange, onDrop, temporaryLayout } = this.context;
|
|
@@ -282,7 +285,7 @@ class GridLayout extends react_1.default.PureComponent {
|
|
|
282
285
|
}
|
|
283
286
|
renderGroup(group, renderLayout, renderItems, offset = 0, groupGridProperties) {
|
|
284
287
|
const { registerManager, editMode, noOverlay, focusable, draggableHandleClassName, outerDnDEnable, } = this.context;
|
|
285
|
-
const { currentDraggingElement } = this.state;
|
|
288
|
+
const { currentDraggingElement, draggedOverGroup } = this.state;
|
|
286
289
|
const properties = groupGridProperties
|
|
287
290
|
? groupGridProperties(Object.assign({}, registerManager.gridLayout))
|
|
288
291
|
: registerManager.gridLayout;
|
|
@@ -292,7 +295,11 @@ class GridLayout extends react_1.default.PureComponent {
|
|
|
292
295
|
}
|
|
293
296
|
const { callbacks, layout } = this.getMemoGroupProps(group, renderLayout, properties);
|
|
294
297
|
const hasSharedDragItem = Boolean(currentDraggingElement && currentDraggingElement[0] !== group);
|
|
295
|
-
|
|
298
|
+
const isDragCaptured = currentDraggingElement &&
|
|
299
|
+
group === currentDraggingElement[0] &&
|
|
300
|
+
draggedOverGroup !== null &&
|
|
301
|
+
draggedOverGroup !== group;
|
|
302
|
+
return (react_1.default.createElement(ReactGridLayout_1.Layout, Object.assign({}, properties, { compactType: compactType, layout: layout, key: `group_${group}`, isDraggable: editMode, isResizable: editMode, onResizeStart: this._onResizeStart, onDragStart: callbacks.onDragStart, onDragStop: callbacks.onDragStop, onResizeStop: callbacks.onResizeStop, onDragTargetRestore: callbacks.onDragTargetRestore, onDropDragOver: callbacks.onDropDragOver, onDrop: callbacks.onDrop, hasSharedDragItem: hasSharedDragItem, isDragCaptured: isDragCaptured }, (draggableHandleClassName
|
|
296
303
|
? { draggableHandle: `.${draggableHandleClassName}` }
|
|
297
304
|
: null), (outerDnDEnable
|
|
298
305
|
? {
|
|
@@ -5,21 +5,10 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
6
|
const react_grid_layout_1 = tslib_1.__importStar(require("react-grid-layout"));
|
|
7
7
|
const constants_1 = require("../../constants");
|
|
8
|
-
const { compact, compactType } = react_grid_layout_1.utils;
|
|
9
|
-
// pointer-events disabled to make mouse events be able to passthrought
|
|
10
|
-
// while dragging element out of the grid the mouse positioned over grid item
|
|
11
|
-
// so there is only two ways to get it, calculate rect or just give browser make his work
|
|
12
|
-
const DRAGGING_PLACEHOLDER_STYLE = { pointerEvents: 'none' };
|
|
13
|
-
// when shared element is dragged over another group we still creating placeholder for it
|
|
14
|
-
// cause react-grid-layout is havely dependent on this element
|
|
15
|
-
// while in future there will be some wey not to create dummy div and hide it with opacity
|
|
16
|
-
// this hack is all what i've got now
|
|
17
|
-
const DRAGGING_PLACEHOLDER_HIDDEN_STYLE = Object.assign(Object.assign({}, DRAGGING_PLACEHOLDER_STYLE), { opacity: 0 });
|
|
18
8
|
class DragOverLayout extends react_grid_layout_1.default {
|
|
19
9
|
constructor(...args) {
|
|
20
10
|
super(...args);
|
|
21
|
-
this.
|
|
22
|
-
this._savedDragoutState = null;
|
|
11
|
+
this._savedDraggedOutLayout = null;
|
|
23
12
|
// Reset placeholder when item dragged from outside
|
|
24
13
|
this.resetExternalPlaceholder = () => {
|
|
25
14
|
if (this.dragEnterCounter) {
|
|
@@ -33,13 +22,13 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
33
22
|
const { cols } = this.props;
|
|
34
23
|
const savedLayout = layout.map((item) => (Object.assign({}, item)));
|
|
35
24
|
let hiddenElement;
|
|
36
|
-
const newLayout = compact(layout.filter((item) => {
|
|
25
|
+
const newLayout = react_grid_layout_1.utils.compact(layout.filter((item) => {
|
|
37
26
|
if (item.i === i) {
|
|
38
27
|
hiddenElement = item;
|
|
39
28
|
return false;
|
|
40
29
|
}
|
|
41
30
|
return true;
|
|
42
|
-
}), compactType(this.props), cols);
|
|
31
|
+
}), react_grid_layout_1.utils.compactType(this.props), cols);
|
|
43
32
|
if (hiddenElement) {
|
|
44
33
|
newLayout.push(hiddenElement);
|
|
45
34
|
}
|
|
@@ -47,24 +36,23 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
47
36
|
activeDrag: null,
|
|
48
37
|
layout: newLayout,
|
|
49
38
|
});
|
|
50
|
-
|
|
51
|
-
return { layout: savedLayout, id: hiddenElement.i };
|
|
39
|
+
return savedLayout;
|
|
52
40
|
};
|
|
53
41
|
this.extendedOnDrag = (i, x, y, sintEv) => {
|
|
54
|
-
if (
|
|
55
|
-
if (!this.
|
|
56
|
-
this.
|
|
42
|
+
if (this.props.isDragCaptured) {
|
|
43
|
+
if (!this._savedDraggedOutLayout) {
|
|
44
|
+
this._savedDraggedOutLayout = this.hideLocalPlaceholder(i);
|
|
57
45
|
}
|
|
58
46
|
return;
|
|
59
47
|
}
|
|
60
|
-
this.
|
|
48
|
+
this._savedDraggedOutLayout = null;
|
|
61
49
|
// parent onDrag will show new placeholder again
|
|
62
50
|
this.parentOnDrag(i, x, y, sintEv);
|
|
63
51
|
};
|
|
64
52
|
this.extendedOnDragStop = (i, x, y, sintEv) => {
|
|
65
53
|
// Restoring layout if item was dropped outside of the grid
|
|
66
|
-
if (this.
|
|
67
|
-
const savedLayout = this.
|
|
54
|
+
if (this._savedDraggedOutLayout) {
|
|
55
|
+
const savedLayout = this._savedDraggedOutLayout;
|
|
68
56
|
const l = react_grid_layout_1.utils.getLayoutItem(savedLayout, i);
|
|
69
57
|
// Create placeholder (display only)
|
|
70
58
|
const placeholder = {
|
|
@@ -81,46 +69,34 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
81
69
|
}, () => {
|
|
82
70
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
83
71
|
});
|
|
84
|
-
this.
|
|
72
|
+
this._savedDraggedOutLayout = null;
|
|
85
73
|
}
|
|
86
74
|
else {
|
|
87
75
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
88
76
|
}
|
|
89
77
|
};
|
|
90
|
-
this.extendedOnDragEnter = (...args) => {
|
|
91
|
-
this._isMouseOver = true;
|
|
92
|
-
this.parentOnDragEnter(...args);
|
|
93
|
-
};
|
|
94
|
-
this.extendedOnDragLeave = (...args) => {
|
|
95
|
-
var _a, _b;
|
|
96
|
-
this._isMouseOver = false;
|
|
97
|
-
this.parentOnDragLeave(...args);
|
|
98
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
99
|
-
};
|
|
100
78
|
// Proxy mouse events -> drag methods for dnd between groups
|
|
101
79
|
this.mouseEnterHandler = (e) => {
|
|
102
|
-
|
|
80
|
+
var _a, _b;
|
|
103
81
|
if (this.props.hasSharedDragItem) {
|
|
104
|
-
this.
|
|
82
|
+
this.onDragEnter(e);
|
|
83
|
+
}
|
|
84
|
+
else if (this.props.isDragCaptured) {
|
|
85
|
+
(_b = (_a = this.props).onDragTargetRestore) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
105
86
|
}
|
|
106
87
|
};
|
|
107
88
|
this.mouseLeaveHandler = (e) => {
|
|
108
|
-
var _a, _b;
|
|
109
|
-
this._isMouseOver = false;
|
|
110
89
|
if (this.props.hasSharedDragItem) {
|
|
111
|
-
this.
|
|
112
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
90
|
+
this.onDragLeave(e);
|
|
113
91
|
}
|
|
114
92
|
};
|
|
115
93
|
this.mouseMoveHandler = (e) => {
|
|
116
|
-
this._isMouseOver = true;
|
|
117
94
|
if (this.props.hasSharedDragItem) {
|
|
118
95
|
this.onDragOver(e);
|
|
119
96
|
}
|
|
120
97
|
};
|
|
121
98
|
this.mouseUpHandler = (e) => {
|
|
122
99
|
var _a, _b;
|
|
123
|
-
this._isMouseOver = true;
|
|
124
100
|
if (this.props.hasSharedDragItem) {
|
|
125
101
|
e.preventDefault();
|
|
126
102
|
const { droppingItem } = this.props;
|
|
@@ -135,10 +111,6 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
135
111
|
this.onDrag = this.extendedOnDrag;
|
|
136
112
|
this.parentOnDragStop = this.onDragStop;
|
|
137
113
|
this.onDragStop = this.extendedOnDragStop;
|
|
138
|
-
this.parentOnDragEnter = this.onDragEnter;
|
|
139
|
-
this.onDragEnter = this.extendedOnDragEnter;
|
|
140
|
-
this.parentOnDragLeave = this.onDragLeave;
|
|
141
|
-
this.onDragLeave = this.extendedOnDragLeave;
|
|
142
114
|
}
|
|
143
115
|
componentDidMount() {
|
|
144
116
|
var _a;
|
|
@@ -163,8 +135,6 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
163
135
|
innerElement.removeEventListener('mouseleave', this.mouseLeaveHandler);
|
|
164
136
|
innerElement.removeEventListener('mousemove', this.mouseMoveHandler);
|
|
165
137
|
}
|
|
166
|
-
// Resetting instance props
|
|
167
|
-
this._savedDragoutState = null;
|
|
168
138
|
}
|
|
169
139
|
// react-grid-layout doens't calculate it's height when last element is removed
|
|
170
140
|
// and just keeps the previous value
|
|
@@ -190,7 +160,7 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
190
160
|
// And cause grid-layout using it's own GridItem to make it look
|
|
191
161
|
// like overlay adding className
|
|
192
162
|
processGridItem(child, isDroppingItem) {
|
|
193
|
-
var _a
|
|
163
|
+
var _a;
|
|
194
164
|
const gridItem = (_a = super.processGridItem) === null || _a === void 0 ? void 0 : _a.call(this, child, isDroppingItem);
|
|
195
165
|
if (!gridItem) {
|
|
196
166
|
return gridItem;
|
|
@@ -200,23 +170,15 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
200
170
|
const { containerWidth, cols, w, h, rowHeight, margin, transformScale, droppingPosition, } = itemProps;
|
|
201
171
|
const leftOffset = (((containerWidth / cols) * w) / 2 || 0) * transformScale;
|
|
202
172
|
const topOffset = ((h * rowHeight + (h - 1) * margin[1]) / 2 || 0) * transformScale;
|
|
203
|
-
const
|
|
204
|
-
? DRAGGING_PLACEHOLDER_HIDDEN_STYLE
|
|
205
|
-
: DRAGGING_PLACEHOLDER_STYLE;
|
|
173
|
+
const style = gridItem.props.style || null;
|
|
206
174
|
// React.cloneElement is just cleaner then copy-paste whole processGridItem method
|
|
207
175
|
return react_1.default.cloneElement(gridItem, {
|
|
208
|
-
|
|
176
|
+
// hiding previre if dragging shared item
|
|
177
|
+
style: this.props.hasSharedDragItem ? Object.assign(Object.assign({}, style), { opacity: 0 }) : style,
|
|
209
178
|
className: constants_1.OVERLAY_CLASS_NAME,
|
|
210
179
|
droppingPosition: Object.assign(Object.assign({}, droppingPosition), { left: droppingPosition.left - leftOffset, top: droppingPosition.top - topOffset }),
|
|
211
180
|
});
|
|
212
181
|
}
|
|
213
|
-
else if (itemProps.i === ((_b = this.state.activeDrag) === null || _b === void 0 ? void 0 : _b.i) ||
|
|
214
|
-
itemProps.i === ((_c = this._savedDragoutState) === null || _c === void 0 ? void 0 : _c.id)) {
|
|
215
|
-
const dragStyles = DRAGGING_PLACEHOLDER_STYLE;
|
|
216
|
-
return react_1.default.cloneElement(gridItem, {
|
|
217
|
-
style: itemProps.style ? Object.assign(Object.assign({}, itemProps.style), dragStyles) : dragStyles,
|
|
218
|
-
});
|
|
219
|
-
}
|
|
220
182
|
return gridItem;
|
|
221
183
|
}
|
|
222
184
|
}
|
|
@@ -40,7 +40,7 @@ export default class GridLayout extends React.PureComponent<any, any, any> {
|
|
|
40
40
|
reloadItems(): void;
|
|
41
41
|
_onDragStart: (group: any, _newLayout: any, layoutItem: any) => void;
|
|
42
42
|
_onResizeStart: () => void;
|
|
43
|
-
|
|
43
|
+
_onTargetRestore: () => void;
|
|
44
44
|
_onStop: (group: any, newLayout: any) => void;
|
|
45
45
|
_onSharedDrop: (targetGroup: any, newLayout: any, tempItem: any) => void;
|
|
46
46
|
_onExternalDrop: (group: any, newLayout: any, item: any, e: any) => void;
|
|
@@ -57,14 +57,14 @@ class GridLayout extends React.PureComponent {
|
|
|
57
57
|
const onStop = this._onStop.bind(this, group);
|
|
58
58
|
const onDrop = this._onDrop.bind(this, group);
|
|
59
59
|
const onDropDragOver = this._onDropDragOver.bind(this, group);
|
|
60
|
-
const
|
|
60
|
+
const onDragTargetRestore = this._onTargetRestore.bind(this, group);
|
|
61
61
|
this._memoCallbacksForGroups[group] = {
|
|
62
62
|
onDragStart,
|
|
63
63
|
onDragStop: onStop,
|
|
64
64
|
onResizeStop: onStop,
|
|
65
65
|
onDrop,
|
|
66
66
|
onDropDragOver,
|
|
67
|
-
|
|
67
|
+
onDragTargetRestore,
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
return this._memoCallbacksForGroups[group];
|
|
@@ -116,10 +116,13 @@ class GridLayout extends React.PureComponent {
|
|
|
116
116
|
isDragging: true,
|
|
117
117
|
});
|
|
118
118
|
};
|
|
119
|
-
this.
|
|
120
|
-
this.
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
this._onTargetRestore = () => {
|
|
120
|
+
const { currentDraggingElement } = this.state;
|
|
121
|
+
if (currentDraggingElement) {
|
|
122
|
+
this.setState({
|
|
123
|
+
draggedOverGroup: currentDraggingElement[0],
|
|
124
|
+
});
|
|
125
|
+
}
|
|
123
126
|
};
|
|
124
127
|
this._onStop = (group, newLayout) => {
|
|
125
128
|
const { layoutChange, onDrop, temporaryLayout } = this.context;
|
|
@@ -279,7 +282,7 @@ class GridLayout extends React.PureComponent {
|
|
|
279
282
|
}
|
|
280
283
|
renderGroup(group, renderLayout, renderItems, offset = 0, groupGridProperties) {
|
|
281
284
|
const { registerManager, editMode, noOverlay, focusable, draggableHandleClassName, outerDnDEnable, } = this.context;
|
|
282
|
-
const { currentDraggingElement } = this.state;
|
|
285
|
+
const { currentDraggingElement, draggedOverGroup } = this.state;
|
|
283
286
|
const properties = groupGridProperties
|
|
284
287
|
? groupGridProperties(Object.assign({}, registerManager.gridLayout))
|
|
285
288
|
: registerManager.gridLayout;
|
|
@@ -289,7 +292,11 @@ class GridLayout extends React.PureComponent {
|
|
|
289
292
|
}
|
|
290
293
|
const { callbacks, layout } = this.getMemoGroupProps(group, renderLayout, properties);
|
|
291
294
|
const hasSharedDragItem = Boolean(currentDraggingElement && currentDraggingElement[0] !== group);
|
|
292
|
-
|
|
295
|
+
const isDragCaptured = currentDraggingElement &&
|
|
296
|
+
group === currentDraggingElement[0] &&
|
|
297
|
+
draggedOverGroup !== null &&
|
|
298
|
+
draggedOverGroup !== group;
|
|
299
|
+
return (React.createElement(Layout, Object.assign({}, properties, { compactType: compactType, layout: layout, key: `group_${group}`, isDraggable: editMode, isResizable: editMode, onResizeStart: this._onResizeStart, onDragStart: callbacks.onDragStart, onDragStop: callbacks.onDragStop, onResizeStop: callbacks.onResizeStop, onDragTargetRestore: callbacks.onDragTargetRestore, onDropDragOver: callbacks.onDropDragOver, onDrop: callbacks.onDrop, hasSharedDragItem: hasSharedDragItem, isDragCaptured: isDragCaptured }, (draggableHandleClassName
|
|
293
300
|
? { draggableHandle: `.${draggableHandleClassName}` }
|
|
294
301
|
: null), (outerDnDEnable
|
|
295
302
|
? {
|
|
@@ -1,21 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import ReactGridLayout, { WidthProvider, utils } from 'react-grid-layout';
|
|
3
3
|
import { OVERLAY_CLASS_NAME } from '../../constants';
|
|
4
|
-
const { compact, compactType } = utils;
|
|
5
|
-
// pointer-events disabled to make mouse events be able to passthrought
|
|
6
|
-
// while dragging element out of the grid the mouse positioned over grid item
|
|
7
|
-
// so there is only two ways to get it, calculate rect or just give browser make his work
|
|
8
|
-
const DRAGGING_PLACEHOLDER_STYLE = { pointerEvents: 'none' };
|
|
9
|
-
// when shared element is dragged over another group we still creating placeholder for it
|
|
10
|
-
// cause react-grid-layout is havely dependent on this element
|
|
11
|
-
// while in future there will be some wey not to create dummy div and hide it with opacity
|
|
12
|
-
// this hack is all what i've got now
|
|
13
|
-
const DRAGGING_PLACEHOLDER_HIDDEN_STYLE = Object.assign(Object.assign({}, DRAGGING_PLACEHOLDER_STYLE), { opacity: 0 });
|
|
14
4
|
class DragOverLayout extends ReactGridLayout {
|
|
15
5
|
constructor(...args) {
|
|
16
6
|
super(...args);
|
|
17
|
-
this.
|
|
18
|
-
this._savedDragoutState = null;
|
|
7
|
+
this._savedDraggedOutLayout = null;
|
|
19
8
|
// Reset placeholder when item dragged from outside
|
|
20
9
|
this.resetExternalPlaceholder = () => {
|
|
21
10
|
if (this.dragEnterCounter) {
|
|
@@ -29,13 +18,13 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
29
18
|
const { cols } = this.props;
|
|
30
19
|
const savedLayout = layout.map((item) => (Object.assign({}, item)));
|
|
31
20
|
let hiddenElement;
|
|
32
|
-
const newLayout = compact(layout.filter((item) => {
|
|
21
|
+
const newLayout = utils.compact(layout.filter((item) => {
|
|
33
22
|
if (item.i === i) {
|
|
34
23
|
hiddenElement = item;
|
|
35
24
|
return false;
|
|
36
25
|
}
|
|
37
26
|
return true;
|
|
38
|
-
}), compactType(this.props), cols);
|
|
27
|
+
}), utils.compactType(this.props), cols);
|
|
39
28
|
if (hiddenElement) {
|
|
40
29
|
newLayout.push(hiddenElement);
|
|
41
30
|
}
|
|
@@ -43,24 +32,23 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
43
32
|
activeDrag: null,
|
|
44
33
|
layout: newLayout,
|
|
45
34
|
});
|
|
46
|
-
|
|
47
|
-
return { layout: savedLayout, id: hiddenElement.i };
|
|
35
|
+
return savedLayout;
|
|
48
36
|
};
|
|
49
37
|
this.extendedOnDrag = (i, x, y, sintEv) => {
|
|
50
|
-
if (
|
|
51
|
-
if (!this.
|
|
52
|
-
this.
|
|
38
|
+
if (this.props.isDragCaptured) {
|
|
39
|
+
if (!this._savedDraggedOutLayout) {
|
|
40
|
+
this._savedDraggedOutLayout = this.hideLocalPlaceholder(i);
|
|
53
41
|
}
|
|
54
42
|
return;
|
|
55
43
|
}
|
|
56
|
-
this.
|
|
44
|
+
this._savedDraggedOutLayout = null;
|
|
57
45
|
// parent onDrag will show new placeholder again
|
|
58
46
|
this.parentOnDrag(i, x, y, sintEv);
|
|
59
47
|
};
|
|
60
48
|
this.extendedOnDragStop = (i, x, y, sintEv) => {
|
|
61
49
|
// Restoring layout if item was dropped outside of the grid
|
|
62
|
-
if (this.
|
|
63
|
-
const savedLayout = this.
|
|
50
|
+
if (this._savedDraggedOutLayout) {
|
|
51
|
+
const savedLayout = this._savedDraggedOutLayout;
|
|
64
52
|
const l = utils.getLayoutItem(savedLayout, i);
|
|
65
53
|
// Create placeholder (display only)
|
|
66
54
|
const placeholder = {
|
|
@@ -77,46 +65,34 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
77
65
|
}, () => {
|
|
78
66
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
79
67
|
});
|
|
80
|
-
this.
|
|
68
|
+
this._savedDraggedOutLayout = null;
|
|
81
69
|
}
|
|
82
70
|
else {
|
|
83
71
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
84
72
|
}
|
|
85
73
|
};
|
|
86
|
-
this.extendedOnDragEnter = (...args) => {
|
|
87
|
-
this._isMouseOver = true;
|
|
88
|
-
this.parentOnDragEnter(...args);
|
|
89
|
-
};
|
|
90
|
-
this.extendedOnDragLeave = (...args) => {
|
|
91
|
-
var _a, _b;
|
|
92
|
-
this._isMouseOver = false;
|
|
93
|
-
this.parentOnDragLeave(...args);
|
|
94
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
95
|
-
};
|
|
96
74
|
// Proxy mouse events -> drag methods for dnd between groups
|
|
97
75
|
this.mouseEnterHandler = (e) => {
|
|
98
|
-
|
|
76
|
+
var _a, _b;
|
|
99
77
|
if (this.props.hasSharedDragItem) {
|
|
100
|
-
this.
|
|
78
|
+
this.onDragEnter(e);
|
|
79
|
+
}
|
|
80
|
+
else if (this.props.isDragCaptured) {
|
|
81
|
+
(_b = (_a = this.props).onDragTargetRestore) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
101
82
|
}
|
|
102
83
|
};
|
|
103
84
|
this.mouseLeaveHandler = (e) => {
|
|
104
|
-
var _a, _b;
|
|
105
|
-
this._isMouseOver = false;
|
|
106
85
|
if (this.props.hasSharedDragItem) {
|
|
107
|
-
this.
|
|
108
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
86
|
+
this.onDragLeave(e);
|
|
109
87
|
}
|
|
110
88
|
};
|
|
111
89
|
this.mouseMoveHandler = (e) => {
|
|
112
|
-
this._isMouseOver = true;
|
|
113
90
|
if (this.props.hasSharedDragItem) {
|
|
114
91
|
this.onDragOver(e);
|
|
115
92
|
}
|
|
116
93
|
};
|
|
117
94
|
this.mouseUpHandler = (e) => {
|
|
118
95
|
var _a, _b;
|
|
119
|
-
this._isMouseOver = true;
|
|
120
96
|
if (this.props.hasSharedDragItem) {
|
|
121
97
|
e.preventDefault();
|
|
122
98
|
const { droppingItem } = this.props;
|
|
@@ -131,10 +107,6 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
131
107
|
this.onDrag = this.extendedOnDrag;
|
|
132
108
|
this.parentOnDragStop = this.onDragStop;
|
|
133
109
|
this.onDragStop = this.extendedOnDragStop;
|
|
134
|
-
this.parentOnDragEnter = this.onDragEnter;
|
|
135
|
-
this.onDragEnter = this.extendedOnDragEnter;
|
|
136
|
-
this.parentOnDragLeave = this.onDragLeave;
|
|
137
|
-
this.onDragLeave = this.extendedOnDragLeave;
|
|
138
110
|
}
|
|
139
111
|
componentDidMount() {
|
|
140
112
|
var _a;
|
|
@@ -159,8 +131,6 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
159
131
|
innerElement.removeEventListener('mouseleave', this.mouseLeaveHandler);
|
|
160
132
|
innerElement.removeEventListener('mousemove', this.mouseMoveHandler);
|
|
161
133
|
}
|
|
162
|
-
// Resetting instance props
|
|
163
|
-
this._savedDragoutState = null;
|
|
164
134
|
}
|
|
165
135
|
// react-grid-layout doens't calculate it's height when last element is removed
|
|
166
136
|
// and just keeps the previous value
|
|
@@ -186,7 +156,7 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
186
156
|
// And cause grid-layout using it's own GridItem to make it look
|
|
187
157
|
// like overlay adding className
|
|
188
158
|
processGridItem(child, isDroppingItem) {
|
|
189
|
-
var _a
|
|
159
|
+
var _a;
|
|
190
160
|
const gridItem = (_a = super.processGridItem) === null || _a === void 0 ? void 0 : _a.call(this, child, isDroppingItem);
|
|
191
161
|
if (!gridItem) {
|
|
192
162
|
return gridItem;
|
|
@@ -196,23 +166,15 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
196
166
|
const { containerWidth, cols, w, h, rowHeight, margin, transformScale, droppingPosition, } = itemProps;
|
|
197
167
|
const leftOffset = (((containerWidth / cols) * w) / 2 || 0) * transformScale;
|
|
198
168
|
const topOffset = ((h * rowHeight + (h - 1) * margin[1]) / 2 || 0) * transformScale;
|
|
199
|
-
const
|
|
200
|
-
? DRAGGING_PLACEHOLDER_HIDDEN_STYLE
|
|
201
|
-
: DRAGGING_PLACEHOLDER_STYLE;
|
|
169
|
+
const style = gridItem.props.style || null;
|
|
202
170
|
// React.cloneElement is just cleaner then copy-paste whole processGridItem method
|
|
203
171
|
return React.cloneElement(gridItem, {
|
|
204
|
-
|
|
172
|
+
// hiding previre if dragging shared item
|
|
173
|
+
style: this.props.hasSharedDragItem ? Object.assign(Object.assign({}, style), { opacity: 0 }) : style,
|
|
205
174
|
className: OVERLAY_CLASS_NAME,
|
|
206
175
|
droppingPosition: Object.assign(Object.assign({}, droppingPosition), { left: droppingPosition.left - leftOffset, top: droppingPosition.top - topOffset }),
|
|
207
176
|
});
|
|
208
177
|
}
|
|
209
|
-
else if (itemProps.i === ((_b = this.state.activeDrag) === null || _b === void 0 ? void 0 : _b.i) ||
|
|
210
|
-
itemProps.i === ((_c = this._savedDragoutState) === null || _c === void 0 ? void 0 : _c.id)) {
|
|
211
|
-
const dragStyles = DRAGGING_PLACEHOLDER_STYLE;
|
|
212
|
-
return React.cloneElement(gridItem, {
|
|
213
|
-
style: itemProps.style ? Object.assign(Object.assign({}, itemProps.style), dragStyles) : dragStyles,
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
178
|
return gridItem;
|
|
217
179
|
}
|
|
218
180
|
}
|