@gravity-ui/dashkit 8.8.1-beta.1 → 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 +22 -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 +22 -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,23 +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
|
}
|
|
48
|
+
this._savedDraggedOutLayout = null;
|
|
60
49
|
// parent onDrag will show new placeholder again
|
|
61
50
|
this.parentOnDrag(i, x, y, sintEv);
|
|
62
51
|
};
|
|
63
52
|
this.extendedOnDragStop = (i, x, y, sintEv) => {
|
|
64
|
-
// Restoring layout if item was dropped outside of the grid
|
|
65
|
-
if (this.
|
|
66
|
-
const savedLayout = this.
|
|
53
|
+
// Restoring layout if item was dropped outside of the grid
|
|
54
|
+
if (this._savedDraggedOutLayout) {
|
|
55
|
+
const savedLayout = this._savedDraggedOutLayout;
|
|
67
56
|
const l = react_grid_layout_1.utils.getLayoutItem(savedLayout, i);
|
|
68
57
|
// Create placeholder (display only)
|
|
69
58
|
const placeholder = {
|
|
@@ -80,46 +69,34 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
80
69
|
}, () => {
|
|
81
70
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
82
71
|
});
|
|
83
|
-
this.
|
|
72
|
+
this._savedDraggedOutLayout = null;
|
|
84
73
|
}
|
|
85
74
|
else {
|
|
86
75
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
87
76
|
}
|
|
88
77
|
};
|
|
89
|
-
this.extendedOnDragEnter = (...args) => {
|
|
90
|
-
this._isMouseOver = true;
|
|
91
|
-
this.parentOnDragEnter(...args);
|
|
92
|
-
};
|
|
93
|
-
this.extendedOnDragLeave = (...args) => {
|
|
94
|
-
var _a, _b;
|
|
95
|
-
this._isMouseOver = false;
|
|
96
|
-
this.parentOnDragLeave(...args);
|
|
97
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
98
|
-
};
|
|
99
78
|
// Proxy mouse events -> drag methods for dnd between groups
|
|
100
79
|
this.mouseEnterHandler = (e) => {
|
|
101
|
-
|
|
80
|
+
var _a, _b;
|
|
102
81
|
if (this.props.hasSharedDragItem) {
|
|
103
|
-
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);
|
|
104
86
|
}
|
|
105
87
|
};
|
|
106
88
|
this.mouseLeaveHandler = (e) => {
|
|
107
|
-
var _a, _b;
|
|
108
|
-
this._isMouseOver = false;
|
|
109
89
|
if (this.props.hasSharedDragItem) {
|
|
110
|
-
this.
|
|
111
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
90
|
+
this.onDragLeave(e);
|
|
112
91
|
}
|
|
113
92
|
};
|
|
114
93
|
this.mouseMoveHandler = (e) => {
|
|
115
|
-
this._isMouseOver = true;
|
|
116
94
|
if (this.props.hasSharedDragItem) {
|
|
117
95
|
this.onDragOver(e);
|
|
118
96
|
}
|
|
119
97
|
};
|
|
120
98
|
this.mouseUpHandler = (e) => {
|
|
121
99
|
var _a, _b;
|
|
122
|
-
this._isMouseOver = true;
|
|
123
100
|
if (this.props.hasSharedDragItem) {
|
|
124
101
|
e.preventDefault();
|
|
125
102
|
const { droppingItem } = this.props;
|
|
@@ -134,10 +111,6 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
134
111
|
this.onDrag = this.extendedOnDrag;
|
|
135
112
|
this.parentOnDragStop = this.onDragStop;
|
|
136
113
|
this.onDragStop = this.extendedOnDragStop;
|
|
137
|
-
this.parentOnDragEnter = this.onDragEnter;
|
|
138
|
-
this.onDragEnter = this.extendedOnDragEnter;
|
|
139
|
-
this.parentOnDragLeave = this.onDragLeave;
|
|
140
|
-
this.onDragLeave = this.extendedOnDragLeave;
|
|
141
114
|
}
|
|
142
115
|
componentDidMount() {
|
|
143
116
|
var _a;
|
|
@@ -162,8 +135,6 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
162
135
|
innerElement.removeEventListener('mouseleave', this.mouseLeaveHandler);
|
|
163
136
|
innerElement.removeEventListener('mousemove', this.mouseMoveHandler);
|
|
164
137
|
}
|
|
165
|
-
// Resetting instance props
|
|
166
|
-
this._savedDragoutState = null;
|
|
167
138
|
}
|
|
168
139
|
// react-grid-layout doens't calculate it's height when last element is removed
|
|
169
140
|
// and just keeps the previous value
|
|
@@ -189,7 +160,7 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
189
160
|
// And cause grid-layout using it's own GridItem to make it look
|
|
190
161
|
// like overlay adding className
|
|
191
162
|
processGridItem(child, isDroppingItem) {
|
|
192
|
-
var _a
|
|
163
|
+
var _a;
|
|
193
164
|
const gridItem = (_a = super.processGridItem) === null || _a === void 0 ? void 0 : _a.call(this, child, isDroppingItem);
|
|
194
165
|
if (!gridItem) {
|
|
195
166
|
return gridItem;
|
|
@@ -199,23 +170,15 @@ class DragOverLayout extends react_grid_layout_1.default {
|
|
|
199
170
|
const { containerWidth, cols, w, h, rowHeight, margin, transformScale, droppingPosition, } = itemProps;
|
|
200
171
|
const leftOffset = (((containerWidth / cols) * w) / 2 || 0) * transformScale;
|
|
201
172
|
const topOffset = ((h * rowHeight + (h - 1) * margin[1]) / 2 || 0) * transformScale;
|
|
202
|
-
const
|
|
203
|
-
? DRAGGING_PLACEHOLDER_HIDDEN_STYLE
|
|
204
|
-
: DRAGGING_PLACEHOLDER_STYLE;
|
|
173
|
+
const style = gridItem.props.style || null;
|
|
205
174
|
// React.cloneElement is just cleaner then copy-paste whole processGridItem method
|
|
206
175
|
return react_1.default.cloneElement(gridItem, {
|
|
207
|
-
|
|
176
|
+
// hiding previre if dragging shared item
|
|
177
|
+
style: this.props.hasSharedDragItem ? Object.assign(Object.assign({}, style), { opacity: 0 }) : style,
|
|
208
178
|
className: constants_1.OVERLAY_CLASS_NAME,
|
|
209
179
|
droppingPosition: Object.assign(Object.assign({}, droppingPosition), { left: droppingPosition.left - leftOffset, top: droppingPosition.top - topOffset }),
|
|
210
180
|
});
|
|
211
181
|
}
|
|
212
|
-
else if (itemProps.i === ((_b = this.state.activeDrag) === null || _b === void 0 ? void 0 : _b.i) ||
|
|
213
|
-
itemProps.i === ((_c = this._savedDragoutState) === null || _c === void 0 ? void 0 : _c.id)) {
|
|
214
|
-
const dragStyles = DRAGGING_PLACEHOLDER_STYLE;
|
|
215
|
-
return react_1.default.cloneElement(gridItem, {
|
|
216
|
-
style: itemProps.style ? Object.assign(Object.assign({}, itemProps.style), dragStyles) : dragStyles,
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
182
|
return gridItem;
|
|
220
183
|
}
|
|
221
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,23 +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
|
}
|
|
44
|
+
this._savedDraggedOutLayout = null;
|
|
56
45
|
// parent onDrag will show new placeholder again
|
|
57
46
|
this.parentOnDrag(i, x, y, sintEv);
|
|
58
47
|
};
|
|
59
48
|
this.extendedOnDragStop = (i, x, y, sintEv) => {
|
|
60
|
-
// Restoring layout if item was dropped outside of the grid
|
|
61
|
-
if (this.
|
|
62
|
-
const savedLayout = this.
|
|
49
|
+
// Restoring layout if item was dropped outside of the grid
|
|
50
|
+
if (this._savedDraggedOutLayout) {
|
|
51
|
+
const savedLayout = this._savedDraggedOutLayout;
|
|
63
52
|
const l = utils.getLayoutItem(savedLayout, i);
|
|
64
53
|
// Create placeholder (display only)
|
|
65
54
|
const placeholder = {
|
|
@@ -76,46 +65,34 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
76
65
|
}, () => {
|
|
77
66
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
78
67
|
});
|
|
79
|
-
this.
|
|
68
|
+
this._savedDraggedOutLayout = null;
|
|
80
69
|
}
|
|
81
70
|
else {
|
|
82
71
|
this.parentOnDragStop(i, x, y, sintEv);
|
|
83
72
|
}
|
|
84
73
|
};
|
|
85
|
-
this.extendedOnDragEnter = (...args) => {
|
|
86
|
-
this._isMouseOver = true;
|
|
87
|
-
this.parentOnDragEnter(...args);
|
|
88
|
-
};
|
|
89
|
-
this.extendedOnDragLeave = (...args) => {
|
|
90
|
-
var _a, _b;
|
|
91
|
-
this._isMouseOver = false;
|
|
92
|
-
this.parentOnDragLeave(...args);
|
|
93
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
94
|
-
};
|
|
95
74
|
// Proxy mouse events -> drag methods for dnd between groups
|
|
96
75
|
this.mouseEnterHandler = (e) => {
|
|
97
|
-
|
|
76
|
+
var _a, _b;
|
|
98
77
|
if (this.props.hasSharedDragItem) {
|
|
99
|
-
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);
|
|
100
82
|
}
|
|
101
83
|
};
|
|
102
84
|
this.mouseLeaveHandler = (e) => {
|
|
103
|
-
var _a, _b;
|
|
104
|
-
this._isMouseOver = false;
|
|
105
85
|
if (this.props.hasSharedDragItem) {
|
|
106
|
-
this.
|
|
107
|
-
(_b = (_a = this.props).onDragExit) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
86
|
+
this.onDragLeave(e);
|
|
108
87
|
}
|
|
109
88
|
};
|
|
110
89
|
this.mouseMoveHandler = (e) => {
|
|
111
|
-
this._isMouseOver = true;
|
|
112
90
|
if (this.props.hasSharedDragItem) {
|
|
113
91
|
this.onDragOver(e);
|
|
114
92
|
}
|
|
115
93
|
};
|
|
116
94
|
this.mouseUpHandler = (e) => {
|
|
117
95
|
var _a, _b;
|
|
118
|
-
this._isMouseOver = true;
|
|
119
96
|
if (this.props.hasSharedDragItem) {
|
|
120
97
|
e.preventDefault();
|
|
121
98
|
const { droppingItem } = this.props;
|
|
@@ -130,10 +107,6 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
130
107
|
this.onDrag = this.extendedOnDrag;
|
|
131
108
|
this.parentOnDragStop = this.onDragStop;
|
|
132
109
|
this.onDragStop = this.extendedOnDragStop;
|
|
133
|
-
this.parentOnDragEnter = this.onDragEnter;
|
|
134
|
-
this.onDragEnter = this.extendedOnDragEnter;
|
|
135
|
-
this.parentOnDragLeave = this.onDragLeave;
|
|
136
|
-
this.onDragLeave = this.extendedOnDragLeave;
|
|
137
110
|
}
|
|
138
111
|
componentDidMount() {
|
|
139
112
|
var _a;
|
|
@@ -158,8 +131,6 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
158
131
|
innerElement.removeEventListener('mouseleave', this.mouseLeaveHandler);
|
|
159
132
|
innerElement.removeEventListener('mousemove', this.mouseMoveHandler);
|
|
160
133
|
}
|
|
161
|
-
// Resetting instance props
|
|
162
|
-
this._savedDragoutState = null;
|
|
163
134
|
}
|
|
164
135
|
// react-grid-layout doens't calculate it's height when last element is removed
|
|
165
136
|
// and just keeps the previous value
|
|
@@ -185,7 +156,7 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
185
156
|
// And cause grid-layout using it's own GridItem to make it look
|
|
186
157
|
// like overlay adding className
|
|
187
158
|
processGridItem(child, isDroppingItem) {
|
|
188
|
-
var _a
|
|
159
|
+
var _a;
|
|
189
160
|
const gridItem = (_a = super.processGridItem) === null || _a === void 0 ? void 0 : _a.call(this, child, isDroppingItem);
|
|
190
161
|
if (!gridItem) {
|
|
191
162
|
return gridItem;
|
|
@@ -195,23 +166,15 @@ class DragOverLayout extends ReactGridLayout {
|
|
|
195
166
|
const { containerWidth, cols, w, h, rowHeight, margin, transformScale, droppingPosition, } = itemProps;
|
|
196
167
|
const leftOffset = (((containerWidth / cols) * w) / 2 || 0) * transformScale;
|
|
197
168
|
const topOffset = ((h * rowHeight + (h - 1) * margin[1]) / 2 || 0) * transformScale;
|
|
198
|
-
const
|
|
199
|
-
? DRAGGING_PLACEHOLDER_HIDDEN_STYLE
|
|
200
|
-
: DRAGGING_PLACEHOLDER_STYLE;
|
|
169
|
+
const style = gridItem.props.style || null;
|
|
201
170
|
// React.cloneElement is just cleaner then copy-paste whole processGridItem method
|
|
202
171
|
return React.cloneElement(gridItem, {
|
|
203
|
-
|
|
172
|
+
// hiding previre if dragging shared item
|
|
173
|
+
style: this.props.hasSharedDragItem ? Object.assign(Object.assign({}, style), { opacity: 0 }) : style,
|
|
204
174
|
className: OVERLAY_CLASS_NAME,
|
|
205
175
|
droppingPosition: Object.assign(Object.assign({}, droppingPosition), { left: droppingPosition.left - leftOffset, top: droppingPosition.top - topOffset }),
|
|
206
176
|
});
|
|
207
177
|
}
|
|
208
|
-
else if (itemProps.i === ((_b = this.state.activeDrag) === null || _b === void 0 ? void 0 : _b.i) ||
|
|
209
|
-
itemProps.i === ((_c = this._savedDragoutState) === null || _c === void 0 ? void 0 : _c.id)) {
|
|
210
|
-
const dragStyles = DRAGGING_PLACEHOLDER_STYLE;
|
|
211
|
-
return React.cloneElement(gridItem, {
|
|
212
|
-
style: itemProps.style ? Object.assign(Object.assign({}, itemProps.style), dragStyles) : dragStyles,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
178
|
return gridItem;
|
|
216
179
|
}
|
|
217
180
|
}
|