Skip to content

Commit b4e4690

Browse files
committed
Standardize Drag-to-Popup Logic in ViewportControllers #8115
1 parent a2b9d2b commit b4e4690

3 files changed

Lines changed: 30 additions & 21 deletions

File tree

apps/agentos/view/InterventionPanel.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class InterventionPanel extends Panel {
3939
*/
4040
items: [{
4141
module : GridContainer,
42+
reference: 'intervention',
4243
store : Interventions,
4344
columns: [{
4445
dataField: 'timestamp',

apps/agentos/view/ViewportController.mjs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@ class ViewportController extends Controller {
1313
* @member {String[]} connectedApps=[]
1414
*/
1515
connectedApps = []
16-
16+
/**
17+
* @member {Boolean} #isReintegrating=false
18+
* @private
19+
*/
20+
#isReintegrating = false
1721
/**
1822
* @member {Boolean} #isWindowDragging=false
1923
* @private
2024
*/
2125
#isWindowDragging = false
22-
2326
/**
2427
* @member {Object} widgetIndexMap
2528
*/
@@ -58,7 +61,7 @@ class ViewportController extends Controller {
5861
url = await Neo.Main.getByPath({path: 'document.URL', windowId}),
5962
widgetName = new URL(url).searchParams.get('name'),
6063
widget = me.getReference(widgetName),
61-
parent = widget.up('panel');
64+
parent = widget?.up('panel');
6265

6366
if (!me.#isWindowDragging) {
6467
parent.hide()
@@ -67,7 +70,7 @@ class ViewportController extends Controller {
6770
me.connectedApps.push(widgetName);
6871

6972
// Add the widget to the popup window
70-
mainView.add(widget)
73+
mainView.add(widget, false, !me.#isWindowDragging)
7174
}
7275
}
7376

@@ -79,7 +82,7 @@ class ViewportController extends Controller {
7982
async onWindowDisconnect(data) {
8083
let me = this;
8184

82-
if (me.#isWindowDragging) {
85+
if (me.#isWindowDragging || me.#isReintegrating) {
8386
me.#isWindowDragging = false;
8487
return
8588
}
@@ -109,19 +112,19 @@ class ViewportController extends Controller {
109112
{windowId} = me,
110113
{sortZone} = data,
111114
widgetName = data.draggedItem.reference.replace('-panel', ''),
112-
widget = me.getReference(widgetName),
113-
dashboard = me.getReference('dashboard'),
114-
itemPanel = dashboard.items[me.widgetIndexMap[widgetName]],
115-
bodyContainer = itemPanel.getReference('bodyContainer');
115+
widget = me.getReference(widgetName);
116116

117-
await Neo.Main.windowClose({names: widgetName, windowId});
117+
me.#isReintegrating = true;
118118

119-
bodyContainer.add(widget);
119+
sortZone.dragProxy.add(widget, true);
120+
121+
await Neo.Main.windowClose({names: widgetName, windowId});
120122

123+
me.#isReintegrating = false;
121124
me.#isWindowDragging = false;
122125

123126
sortZone.isWindowDragging = false;
124-
sortZone.dragProxy.hidden = false;
127+
sortZone.dragProxy.style = {opacity: 1};
125128

126129
Neo.main.addon.DragDrop.setConfigs({isWindowDragging: false, windowId})
127130
}

apps/colors/view/ViewportController.mjs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class ViewportController extends Controller {
2929
* @member {Number|null} intervalId
3030
*/
3131
intervalId = null
32+
/**
33+
* @member {Boolean} #isReintegrating=false
34+
* @private
35+
*/
36+
#isReintegrating = false
3237
/**
3338
* @summary A private flag to track if a drag operation is in the process of moving a widget to a new window.
3439
* @member {Boolean} #isWindowDragging=false
@@ -111,7 +116,7 @@ class ViewportController extends Controller {
111116

112117
me.getReference(`detach-${widgetName}-button`).disabled = true;
113118

114-
mainView.add(widget)
119+
mainView.add(widget, false, !me.#isWindowDragging)
115120
}
116121
}
117122

@@ -126,7 +131,7 @@ class ViewportController extends Controller {
126131
async onAppDisconnect(data) {
127132
let me = this;
128133

129-
if (me.#isWindowDragging) {
134+
if (me.#isWindowDragging || me.#isReintegrating) {
130135
me.#isWindowDragging = false;
131136
return
132137
}
@@ -246,19 +251,19 @@ class ViewportController extends Controller {
246251
{windowId} = me,
247252
{sortZone} = data,
248253
widgetName = data.draggedItem.reference.replace('-panel', ''),
249-
widget = me.getReference(widgetName),
250-
dashboard = me.getReference('dashboard'),
251-
itemPanel = dashboard.items[me.widgetIndexMap[widgetName]],
252-
bodyContainer = itemPanel.getReference('bodyContainer');
254+
widget = me.getReference(widgetName);
253255

254-
await Neo.Main.windowClose({names: widgetName, windowId});
256+
me.#isReintegrating = true;
257+
258+
sortZone.dragProxy.add(widget, true);
255259

256-
bodyContainer.add(widget);
260+
await Neo.Main.windowClose({names: widgetName, windowId});
257261

262+
me.#isReintegrating = false;
258263
me.#isWindowDragging = false;
259264

260265
sortZone.isWindowDragging = false;
261-
sortZone.dragProxy.hidden = false;
266+
sortZone.dragProxy.style = {opacity: 1};
262267

263268
Neo.main.addon.DragDrop.setConfigs({isWindowDragging: false, windowId})
264269
}

0 commit comments

Comments
 (0)