@gravity-ui/dashkit 8.8.1-beta.2 → 8.8.1-beta.4
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 +22 -58
- 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 +22 -58
- 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,36 @@ 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
89
|
var _a, _b;
|
|
109
|
-
this._isMouseOver = false;
|
|
110
90
|
if (this.props.hasSharedDragItem) {
|
|
111
|
-
this.
|
|
112
|
-
(_b = (_a = this.props).
|
|
91
|
+
this.onDragLeave(e);
|
|
92
|
+
(_b = (_a = this.props).onDragTargetRestore) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
113
93
|
}
|
|
114
94
|
};
|
|
115
95
|
this.mouseMoveHandler = (e) => {
|
|
116
|
-
this._isMouseOver = true;
|
|
117
96
|
if (this.props.hasSharedDragItem) {
|
|
118
97
|
this.onDragOver(e);
|
|
119
98
|
}
|
|
120
99
|
};
|
|
121
100
|
this.mouseUpHandler = (e) => {
|
|
122
101
|
var _a, _b;
|
|
123
|
-
this._isMouseOver = true;
|
|
124
102
|
if (this.props.hasSharedDragItem) {
|
|
125
103
|
e.preventDefault();
|
|
126
104
|
const { droppingItem } = this.props;
|
|
@@ -135,10 +113,6 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
135
113
|
this.onDrag = this.extendedOnDrag;
|
|
136
114
|
this.parentOnDragStop = this.onDragStop;
|
|
137
115
|
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
116
|
}
|
|
143
117
|
componentDidMount() {
|
|
144
118
|
var _a;
|
|
@@ -163,8 +137,6 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
163
137
|
innerElement.removeEventListener('mouseleave', this.mouseLeaveHandler);
|
|
164
138
|
innerElement.removeEventListener('mousemove', this.mouseMoveHandler);
|
|
165
139
|
}
|
|
166
|
-
// Resetting instance props
|
|
167
|
-
this._savedDragoutState = null;
|
|
168
140
|
}
|
|
169
141
|
// react-grid-layout doens't calculate it's height when last element is removed
|
|
170
142
|
// and just keeps the previous value
|
|
@@ -190,7 +162,7 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
190
162
|
// And cause grid-layout using it's own GridItem to make it look
|
|
191
163
|
// like overlay adding className
|
|
192
164
|
processGridItem(child, isDroppingItem) {
|
|
193
|
-
var _a
|
|
165
|
+
var _a;
|
|
194
166
|
const gridItem = (_a = super.processGridItem) === null || _a === void 0 ? void 0 : _a.call(this, child, isDroppingItem);
|
|
195
167
|
if (!gridItem) {
|
|
196
168
|
return gridItem;
|
|
@@ -200,23 +172,15 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
200
172
|
const { containerWidth, cols, w, h, rowHeight, margin, transformScale, droppingPosition, } = itemProps;
|
|
201
173
|
const leftOffset = (((containerWidth / cols) * w) / 2 || 0) * transformScale;
|
|
202
174
|
const topOffset = ((h * rowHeight + (h - 1) * margin[1]) / 2 || 0) * transformScale;
|
|
203
|
-
const
|
|
204
|
-
? DRAGGING_PLACEHOLDER_HIDDEN_STYLE
|
|
205
|
-
: DRAGGING_PLACEHOLDER_STYLE;
|
|
175
|
+
const style = gridItem.props.style || null;
|
|
206
176
|
// React.cloneElement is just cleaner then copy-paste whole processGridItem method
|
|
207
177
|
return react_1.default.cloneElement(gridItem, {
|
|
208
|
-
|
|
178
|
+
// hiding previre if dragging shared item
|
|
179
|
+
style: this.props.hasSharedDragItem ? Object.assign(Object.assign({}, style), { opacity: 0 }) : style,
|
|
209
180
|
className: constants_1.OVERLAY_CLASS_NAME,
|
|
210
181
|
droppingPosition: Object.assign(Object.assign({}, droppingPosition), { left: droppingPosition.left - leftOffset, top: droppingPosition.top - topOffset }),
|
|
211
182
|
});
|
|
212
183
|
}
|
|
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
184
|
return gridItem;
|
|
221
185
|
}
|
|
222
186
|
}
|
|
@@ -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,36 @@ 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
85
|
var _a, _b;
|
|
105
|
-
this._isMouseOver = false;
|
|
106
86
|
if (this.props.hasSharedDragItem) {
|
|
107
|
-
this.
|
|
108
|
-
(_b = (_a = this.props).
|
|
87
|
+
this.onDragLeave(e);
|
|
88
|
+
(_b = (_a = this.props).onDragTargetRestore) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
109
89
|
}
|
|
110
90
|
};
|
|
111
91
|
this.mouseMoveHandler = (e) => {
|
|
112
|
-
this._isMouseOver = true;
|
|
113
92
|
if (this.props.hasSharedDragItem) {
|
|
114
93
|
this.onDragOver(e);
|
|
115
94
|
}
|
|
116
95
|
};
|
|
117
96
|
this.mouseUpHandler = (e) => {
|
|
118
97
|
var _a, _b;
|
|
119
|
-
this._isMouseOver = true;
|
|
120
98
|
if (this.props.hasSharedDragItem) {
|
|
121
99
|
e.preventDefault();
|
|
122
100
|
const { droppingItem } = this.props;
|
|
@@ -131,10 +109,6 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
131
109
|
this.onDrag = this.extendedOnDrag;
|
|
132
110
|
this.parentOnDragStop = this.onDragStop;
|
|
133
111
|
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
112
|
}
|
|
139
113
|
componentDidMount() {
|
|
140
114
|
var _a;
|
|
@@ -159,8 +133,6 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
159
133
|
innerElement.removeEventListener('mouseleave', this.mouseLeaveHandler);
|
|
160
134
|
innerElement.removeEventListener('mousemove', this.mouseMoveHandler);
|
|
161
135
|
}
|
|
162
|
-
// Resetting instance props
|
|
163
|
-
this._savedDragoutState = null;
|
|
164
136
|
}
|
|
165
137
|
// react-grid-layout doens't calculate it's height when last element is removed
|
|
166
138
|
// and just keeps the previous value
|
|
@@ -186,7 +158,7 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
186
158
|
// And cause grid-layout using it's own GridItem to make it look
|
|
187
159
|
// like overlay adding className
|
|
188
160
|
processGridItem(child, isDroppingItem) {
|
|
189
|
-
var _a
|
|
161
|
+
var _a;
|
|
190
162
|
const gridItem = (_a = super.processGridItem) === null || _a === void 0 ? void 0 : _a.call(this, child, isDroppingItem);
|
|
191
163
|
if (!gridItem) {
|
|
192
164
|
return gridItem;
|
|
@@ -196,23 +168,15 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
196
168
|
const { containerWidth, cols, w, h, rowHeight, margin, transformScale, droppingPosition, } = itemProps;
|
|
197
169
|
const leftOffset = (((containerWidth / cols) * w) / 2 || 0) * transformScale;
|
|
198
170
|
const topOffset = ((h * rowHeight + (h - 1) * margin[1]) / 2 || 0) * transformScale;
|
|
199
|
-
const
|
|
200
|
-
? DRAGGING_PLACEHOLDER_HIDDEN_STYLE
|
|
201
|
-
: DRAGGING_PLACEHOLDER_STYLE;
|
|
171
|
+
const style = gridItem.props.style || null;
|
|
202
172
|
// React.cloneElement is just cleaner then copy-paste whole processGridItem method
|
|
203
173
|
return React.cloneElement(gridItem, {
|
|
204
|
-
|
|
174
|
+
// hiding previre if dragging shared item
|
|
175
|
+
style: this.props.hasSharedDragItem ? Object.assign(Object.assign({}, style), { opacity: 0 }) : style,
|
|
205
176
|
className: OVERLAY_CLASS_NAME,
|
|
206
177
|
droppingPosition: Object.assign(Object.assign({}, droppingPosition), { left: droppingPosition.left - leftOffset, top: droppingPosition.top - topOffset }),
|
|
207
178
|
});
|
|
208
179
|
}
|
|
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
180
|
return gridItem;
|
|
217
181
|
}
|
|
218
182
|
}
|