Skip to content

Commit 711a59b

Browse files
committed
Neo.manager.DragCoordinator: Refactor onDragMove for clarity and efficient early returns - #8161
1 parent 146980c commit 711a59b

File tree

1 file changed

+42
-41
lines changed

1 file changed

+42
-41
lines changed

src/manager/DragCoordinator.mjs

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,23 @@ class DragCoordinator extends Manager {
3131
*/
3232
activeTargetZone = null
3333

34+
/**
35+
* @param {Neo.draggable.container.SortZone} sourceSortZone
36+
* @param {Neo.component.Base} draggedItem
37+
* @param {DOMRect} proxyRect
38+
*/
39+
handleVoid(sourceSortZone, draggedItem, proxyRect) {
40+
let me = this;
41+
42+
if (me.activeTargetZone) {
43+
me.activeTargetZone.onRemoteDragLeave();
44+
me.activeTargetZone = null;
45+
46+
// Resume source drag (re-open popup)
47+
sourceSortZone.resumeWindowDrag(draggedItem.reference || draggedItem.id, proxyRect)
48+
}
49+
}
50+
3451
/**
3552
* @param {Object} data
3653
* @param {Neo.component.Base} data.draggedItem
@@ -55,55 +72,39 @@ class DragCoordinator extends Manager {
5572
localX = screenX - targetWindow.innerRect.x,
5673
localY = screenY - targetWindow.innerRect.y;
5774

58-
// console.log('DragCoordinator target found', {targetWindowId, localX, localY});
75+
if (targetSortZone.acceptsRemoteDrag(localX, localY)) {
76+
// console.log('DragCoordinator target found', {targetWindowId, localX, localY});
5977

60-
// Entering a new target zone
61-
if (me.activeTargetZone !== targetSortZone) {
62-
// Leaving previous target (if any)
63-
me.activeTargetZone?.onRemoteDragLeave();
78+
// Entering a new target zone
79+
if (me.activeTargetZone !== targetSortZone) {
80+
// Leaving previous target (if any)
81+
me.activeTargetZone?.onRemoteDragLeave();
6482

65-
// Suspend source drag (close popup, etc)
66-
// We only do this once when leaving the void/source context
67-
if (!me.activeTargetZone) {
68-
sourceSortZone.suspendWindowDrag(draggedItem.reference || draggedItem.id)
83+
// Suspend source drag (close popup, etc)
84+
// We only do this once when leaving the void/source context
85+
if (!me.activeTargetZone) {
86+
sourceSortZone.suspendWindowDrag(draggedItem.reference || draggedItem.id)
87+
}
88+
89+
me.activeTargetZone = targetSortZone
6990
}
7091

71-
me.activeTargetZone = targetSortZone
72-
}
92+
targetSortZone.onRemoteDragMove({
93+
draggedItem,
94+
localX,
95+
localY,
96+
offsetX,
97+
offsetY,
98+
proxyRect
99+
});
73100

74-
targetSortZone.onRemoteDragMove({
75-
draggedItem,
76-
localX,
77-
localY,
78-
offsetX,
79-
offsetY,
80-
proxyRect
81-
})
82-
} else {
83-
// Window exists but no matching SortZone
84-
me.handleVoid(sourceSortZone, draggedItem, proxyRect)
101+
return
102+
}
85103
}
86-
} else {
87-
// In void or back in source window
88-
me.handleVoid(sourceSortZone, draggedItem, proxyRect)
89104
}
90-
}
91-
92-
/**
93-
* @param {Neo.draggable.container.SortZone} sourceSortZone
94-
* @param {Neo.component.Base} draggedItem
95-
* @param {DOMRect} proxyRect
96-
*/
97-
handleVoid(sourceSortZone, draggedItem, proxyRect) {
98-
let me = this;
99105

100-
if (me.activeTargetZone) {
101-
me.activeTargetZone.onRemoteDragLeave();
102-
me.activeTargetZone = null;
103-
104-
// Resume source drag (re-open popup)
105-
sourceSortZone.resumeWindowDrag(draggedItem.reference || draggedItem.id, proxyRect)
106-
}
106+
// In void or back in source window
107+
me.handleVoid(sourceSortZone, draggedItem, proxyRect)
107108
}
108109

109110
/**

0 commit comments

Comments
 (0)