neo.mjs 7.7.0 → 7.8.0
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/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/index.html +1 -1
- package/apps/portal/neo-config.json +1 -0
- package/apps/portal/view/ViewportController.mjs +20 -4
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/portal/view/learn/{ContentView.mjs → ContentComponent.mjs} +98 -38
- package/apps/portal/view/learn/CubeLayoutButton.mjs +77 -0
- package/apps/portal/view/learn/MainContainerController.mjs +1 -0
- package/apps/portal/view/learn/PageContainer.mjs +4 -4
- package/apps/shareddialog/view/DemoDialog.mjs +2 -10
- package/apps/shareddialog/view/MainContainerController.mjs +107 -105
- package/buildScripts/webpack/json/myApps.template.json +1 -1
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +3 -3
- package/resources/data/deck/learnneo/pages/Welcome.md +1 -1
- package/resources/data/deck/learnneo/pages/benefits/FormsEngine.md +1 -1
- package/resources/data/deck/learnneo/pages/guides/PortalApp.md +35 -0
- package/resources/data/deck/learnneo/tree.json +1 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/collection/Base.mjs +4 -3
- package/src/container/Base.mjs +12 -7
- package/src/draggable/DragProxyComponent.mjs +10 -20
- package/src/main/addon/Navigator.mjs +34 -32
- package/src/main/addon/WindowPosition.mjs +9 -11
- package/src/plugin/Resizable.mjs +12 -6
- package/src/tab/Container.mjs +5 -1
- package/test/siesta/siesta.js +1 -0
- package/test/siesta/tests/ManagerInstance.mjs +35 -0
- package/apps/krausest/README.md +0 -3
- package/apps/krausest/TableCollection.mjs +0 -46
- package/apps/krausest/app.mjs +0 -8
- package/apps/krausest/css/currentStyle.css +0 -2
- package/apps/krausest/css/main.css +0 -26
- package/apps/krausest/index.html +0 -12
- package/apps/krausest/neo-config.json +0 -10
- package/apps/krausest/view/MainComponent.mjs +0 -122
- package/apps/krausest/view/MainComponentController.mjs +0 -33
- package/apps/krausest/view/TableComponent.mjs +0 -152
- /package/resources/scss/src/apps/portal/learn/{ContentView.scss → ContentComponent.scss} +0 -0
@@ -2,6 +2,7 @@ import Component from '../../../src/component/Base.mjs';
|
|
2
2
|
import ComponentController from '../../../src/controller/Component.mjs';
|
3
3
|
import ComponentManager from '../../../src/manager/Component.mjs';
|
4
4
|
import DemoDialog from './DemoDialog.mjs';
|
5
|
+
import DragProxyComponent from '../../../src/draggable/DragProxyComponent.mjs';
|
5
6
|
import NeoArray from '../../../src/util/Array.mjs';
|
6
7
|
import Rectangle from '../../../src/util/Rectangle.mjs';
|
7
8
|
|
@@ -16,63 +17,53 @@ class MainContainerController extends ComponentController {
|
|
16
17
|
* @protected
|
17
18
|
*/
|
18
19
|
className: 'SharedDialog.view.MainContainerController',
|
19
|
-
/**
|
20
|
-
* @member {String[]} connectedApps=[]
|
21
|
-
*/
|
22
|
-
connectedApps: [],
|
23
|
-
/**
|
24
|
-
* @member {String} currentTheme='neo-theme-light'
|
25
|
-
*/
|
26
|
-
currentTheme: 'neo-theme-light',
|
27
|
-
/**
|
28
|
-
* @member {String} dockedWindowAppName='SharedDialog2'
|
29
|
-
*/
|
30
|
-
dockedWindowAppName: 'SharedDialog2',
|
31
|
-
/**
|
32
|
-
* @member {Number|null} dockedWindowId=null
|
33
|
-
*/
|
34
|
-
dockedWindowId: null,
|
35
|
-
/**
|
36
|
-
* @member {Neo.component.Base|null} dockedWindowProxy=null
|
37
|
-
*/
|
38
|
-
dockedWindowProxy: null,
|
39
20
|
/**
|
40
21
|
* Valid values: bottom, left, right, top
|
41
22
|
* @member {String} dockedWindowSide_='right'
|
42
23
|
*/
|
43
24
|
dockedWindowSide_: 'right',
|
44
|
-
/**
|
45
|
-
* @member {Number} dockedWindowSize=500
|
46
|
-
*/
|
47
|
-
dockedWindowSize: 620,
|
48
|
-
/**
|
49
|
-
* @member {Object} dialogRect=null
|
50
|
-
*/
|
51
|
-
dialogRect: null,
|
52
|
-
/**
|
53
|
-
* @member {Object} dragStartWindowRect=null
|
54
|
-
*/
|
55
|
-
dragStartWindowRect: null,
|
56
|
-
/**
|
57
|
-
* @member {Number|null} targetWindowSize=0
|
58
|
-
*/
|
59
|
-
targetWindowSize: 0
|
60
25
|
}
|
61
26
|
|
62
27
|
/**
|
63
|
-
*
|
28
|
+
* @member {String[]} connectedApps=[]
|
64
29
|
*/
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
30
|
+
connectedApps = []
|
31
|
+
/**
|
32
|
+
* @member {String} currentTheme='neo-theme-light'
|
33
|
+
*/
|
34
|
+
currentTheme = 'neo-theme-light'
|
35
|
+
/**
|
36
|
+
* @member {String} dockedWindowAppName='SharedDialog2'
|
37
|
+
*/
|
38
|
+
dockedWindowAppName = 'SharedDialog2'
|
39
|
+
/**
|
40
|
+
* @member {Number|null} dockedWindowId=null
|
41
|
+
*/
|
42
|
+
dockedWindowId = null
|
43
|
+
/**
|
44
|
+
* @member {Neo.component.Base|null} dockedWindowProxy=null
|
45
|
+
*/
|
46
|
+
dockedWindowProxy = null
|
47
|
+
/**
|
48
|
+
* @member {Number} dockedWindowSize=500
|
49
|
+
*/
|
50
|
+
dockedWindowSize = 620
|
51
|
+
/**
|
52
|
+
* @member {Object} dialogRect=null
|
53
|
+
*/
|
54
|
+
dialogRect = null
|
55
|
+
/**
|
56
|
+
* @member {Object} dragStartWindowRect=null
|
57
|
+
*/
|
58
|
+
dragStartWindowRect = null
|
59
|
+
/**
|
60
|
+
* @member {String|null} previousTheme=null
|
61
|
+
*/
|
62
|
+
previousTheme = null
|
63
|
+
/**
|
64
|
+
* @member {Number|null} targetWindowSize=0
|
65
|
+
*/
|
66
|
+
targetWindowSize = 0
|
76
67
|
|
77
68
|
/**
|
78
69
|
* Triggered after the dockedWindowSide config got changed
|
@@ -103,7 +94,7 @@ class MainContainerController extends ComponentController {
|
|
103
94
|
animateTargetId : data.component.id,
|
104
95
|
appName,
|
105
96
|
boundaryContainerId: null,
|
106
|
-
cls : [me.currentTheme
|
97
|
+
cls : [me.currentTheme],
|
107
98
|
height : 200,
|
108
99
|
width : 300,
|
109
100
|
windowId,
|
@@ -128,7 +119,7 @@ class MainContainerController extends ComponentController {
|
|
128
119
|
|
129
120
|
if (me.dockedWindowProxy) {
|
130
121
|
me.dockedWindowProxy.destroy(true);
|
131
|
-
me.dockedWindowProxy = null
|
122
|
+
me.dockedWindowProxy = null
|
132
123
|
}
|
133
124
|
}
|
134
125
|
|
@@ -177,9 +168,9 @@ class MainContainerController extends ComponentController {
|
|
177
168
|
}
|
178
169
|
|
179
170
|
/**
|
180
|
-
* @param {Boolean} enable
|
171
|
+
* @param {Boolean} enable=true
|
181
172
|
*/
|
182
|
-
enableOpenDialogButtons(enable) {
|
173
|
+
enableOpenDialogButtons(enable=true) {
|
183
174
|
this.getOpenDialogButtons().forEach(button => {
|
184
175
|
button.disabled = !enable
|
185
176
|
})
|
@@ -196,9 +187,7 @@ class MainContainerController extends ComponentController {
|
|
196
187
|
*
|
197
188
|
*/
|
198
189
|
getOpenDialogButtons() {
|
199
|
-
return ComponentManager.find({
|
200
|
-
flag: 'open-dialog-button'
|
201
|
-
})
|
190
|
+
return ComponentManager.find({flag: 'open-dialog-button'})
|
202
191
|
}
|
203
192
|
|
204
193
|
/**
|
@@ -221,9 +210,8 @@ class MainContainerController extends ComponentController {
|
|
221
210
|
* @return {{left: String, top: String}}
|
222
211
|
*/
|
223
212
|
getProxyPosition(proxyRect, side, fullyIncludeIntoWindow=false) {
|
224
|
-
let me
|
225
|
-
dragStartWindowRect = me
|
226
|
-
targetWindowSize = me.targetWindowSize,
|
213
|
+
let me = this,
|
214
|
+
{dragStartWindowRect, targetWindowSize} = me,
|
227
215
|
left, top;
|
228
216
|
|
229
217
|
switch(side) {
|
@@ -312,16 +300,16 @@ class MainContainerController extends ComponentController {
|
|
312
300
|
* @param {Number} data.windowId
|
313
301
|
*/
|
314
302
|
onAppConnect(data) {
|
315
|
-
let me
|
316
|
-
|
303
|
+
let me = this,
|
304
|
+
{appName, windowId} = data;
|
317
305
|
|
318
|
-
NeoArray.add(me.connectedApps,
|
306
|
+
NeoArray.add(me.connectedApps, appName);
|
319
307
|
|
320
|
-
if (
|
321
|
-
me.switchThemeForApp(
|
308
|
+
if (appName !== 'SharedDialog' && me.currentTheme !== 'neo-theme-light') {
|
309
|
+
me.switchThemeForApp(windowId)
|
322
310
|
}
|
323
311
|
|
324
|
-
if (
|
312
|
+
if (appName === me.dockedWindowAppName) {
|
325
313
|
me.dockedWindowId = data.windowId;
|
326
314
|
me.getOpenDockedWindowButton().disabled = true
|
327
315
|
}
|
@@ -334,29 +322,46 @@ class MainContainerController extends ComponentController {
|
|
334
322
|
* @param {String} data.appName
|
335
323
|
*/
|
336
324
|
onAppDisconnect(data) {
|
337
|
-
let me
|
338
|
-
|
325
|
+
let me = this,
|
326
|
+
{connectedApps, dialog, windowId} = me,
|
327
|
+
name = data.appName;
|
339
328
|
|
340
329
|
if (name === 'SharedDialog') {
|
341
330
|
// we want to close all popup windows, which equals to all connected apps minus the main app
|
342
|
-
NeoArray.remove(
|
331
|
+
NeoArray.remove(connectedApps, 'SharedDialog');
|
343
332
|
|
344
333
|
Neo.Main.windowClose({
|
345
|
-
names:
|
334
|
+
names: connectedApps,
|
335
|
+
windowId
|
346
336
|
})
|
347
|
-
}
|
348
|
-
NeoArray.remove(
|
337
|
+
} if (name === me.dockedWindowAppName) {
|
338
|
+
NeoArray.remove(connectedApps, name);
|
349
339
|
|
350
|
-
Neo.main.addon.WindowPosition.unregisterWindow({
|
351
|
-
|
352
|
-
|
353
|
-
|
340
|
+
Neo.main.addon.WindowPosition.unregisterWindow({name, windowId});
|
341
|
+
|
342
|
+
if (dialog && dialog.windowId !== windowId) {
|
343
|
+
me.enableOpenDialogButtons()
|
344
|
+
}
|
354
345
|
|
355
|
-
if (name === me.dockedWindowAppName) {
|
356
346
|
me.getOpenDockedWindowButton().disabled = false
|
357
347
|
}
|
358
348
|
}
|
359
349
|
|
350
|
+
/**
|
351
|
+
* The App worker will receive connect & disconnect events inside the SharedWorkers context
|
352
|
+
*/
|
353
|
+
onConstructed() {
|
354
|
+
super.onConstructed();
|
355
|
+
|
356
|
+
let me = this;
|
357
|
+
|
358
|
+
Neo.currentWorker.on({
|
359
|
+
connect : me.onAppConnect,
|
360
|
+
disconnect: me.onAppDisconnect,
|
361
|
+
scope : me
|
362
|
+
})
|
363
|
+
}
|
364
|
+
|
360
365
|
/**
|
361
366
|
* @param {Object} data
|
362
367
|
*/
|
@@ -368,7 +373,8 @@ class MainContainerController extends ComponentController {
|
|
368
373
|
*
|
369
374
|
*/
|
370
375
|
onDialogClose() {
|
371
|
-
this.enableOpenDialogButtons(true)
|
376
|
+
this.enableOpenDialogButtons(true);
|
377
|
+
this.dialog = null
|
372
378
|
}
|
373
379
|
|
374
380
|
/**
|
@@ -383,11 +389,10 @@ class MainContainerController extends ComponentController {
|
|
383
389
|
*/
|
384
390
|
onDragEnd(data) {
|
385
391
|
if (this.hasDockedWindow()) {
|
386
|
-
let me
|
387
|
-
dialog
|
388
|
-
|
389
|
-
|
390
|
-
side = me.dockedWindowSide;
|
392
|
+
let me = this,
|
393
|
+
{dialog, dragStartWindowRect} = me,
|
394
|
+
proxyRect = Rectangle.moveTo(me.dialogRect, data.clientX - data.offsetX, data.clientY - data.offsetY),
|
395
|
+
side = me.dockedWindowSide;
|
391
396
|
|
392
397
|
if (dialog.appName === me.dockedWindowAppName) {
|
393
398
|
side = me.getOppositeSide(me.dockedWindowSide)
|
@@ -409,7 +414,7 @@ class MainContainerController extends ComponentController {
|
|
409
414
|
onDragMove(data) {
|
410
415
|
if (this.hasDockedWindow()) {
|
411
416
|
let me = this,
|
412
|
-
|
417
|
+
{dialogRect, dragStartWindowRect, dockedWindowAppName, dockedWindowId} = me,
|
413
418
|
proxyRect = Rectangle.moveTo(dialogRect, data.clientX - data.offsetX, data.clientY - data.offsetY),
|
414
419
|
side = me.dockedWindowSide,
|
415
420
|
proxyPosition, vdom;
|
@@ -437,14 +442,12 @@ class MainContainerController extends ComponentController {
|
|
437
442
|
});
|
438
443
|
|
439
444
|
me.dockedWindowProxy = Neo.create({
|
440
|
-
module
|
441
|
-
appName
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
vdom : vdom,
|
447
|
-
windowId : dockedWindowId
|
445
|
+
module : DragProxyComponent,
|
446
|
+
appName : dockedWindowAppName,
|
447
|
+
cls : ['neo-dialog', 'neo-panel', 'neo-container'],
|
448
|
+
moveInMainThread: false,
|
449
|
+
vdom : vdom,
|
450
|
+
windowId : dockedWindowId
|
448
451
|
});
|
449
452
|
|
450
453
|
// The other window has most likely not loaded The dialog JS module yet,
|
@@ -472,7 +475,7 @@ class MainContainerController extends ComponentController {
|
|
472
475
|
onDragStart(data) {
|
473
476
|
if (this.hasDockedWindow()) {
|
474
477
|
let me = this,
|
475
|
-
appName
|
478
|
+
{appName} = me.component,
|
476
479
|
dockedHorizontal = me.dockedWindowSide === 'left' || me.dockedWindowSide === 'right';
|
477
480
|
|
478
481
|
me.dialogRect = data.dragElementRect;
|
@@ -583,35 +586,34 @@ class MainContainerController extends ComponentController {
|
|
583
586
|
theme = 'neo-theme-light';
|
584
587
|
}
|
585
588
|
|
589
|
+
me.previousTheme = me.currentTheme;
|
590
|
+
me.currentTheme = theme;
|
591
|
+
|
586
592
|
me.connectedApps.forEach(appName => {
|
587
|
-
me.switchThemeForApp(appName
|
593
|
+
me.switchThemeForApp(Neo.apps[appName].windowId)
|
588
594
|
});
|
589
595
|
|
590
|
-
button.set({
|
591
|
-
iconCls: iconCls,
|
592
|
-
text : buttonText
|
593
|
-
});
|
596
|
+
button.set({iconCls, text: buttonText});
|
594
597
|
|
595
598
|
if (dialog) {
|
596
599
|
cls = dialog.cls;
|
597
600
|
|
598
|
-
NeoArray.removeAdd(cls, me.
|
601
|
+
NeoArray.removeAdd(cls, me.previousTheme, me.currentTheme);
|
599
602
|
|
600
603
|
dialog.cls = cls
|
601
604
|
}
|
602
|
-
|
603
|
-
me.currentTheme = theme
|
604
605
|
}
|
605
606
|
|
606
607
|
/**
|
607
|
-
* @param {
|
608
|
-
* @param {String} theme
|
608
|
+
* @param {Number} windowId
|
609
609
|
*/
|
610
|
-
switchThemeForApp(
|
610
|
+
switchThemeForApp(windowId) {
|
611
|
+
let {currentTheme, previousTheme} = this;
|
612
|
+
|
611
613
|
Neo.main.DomAccess.setBodyCls({
|
612
|
-
|
613
|
-
|
614
|
-
|
614
|
+
add : [currentTheme],
|
615
|
+
remove : previousTheme ? [previousTheme]: [],
|
616
|
+
windowId
|
615
617
|
})
|
616
618
|
}
|
617
619
|
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "7.
|
3
|
+
"version": "7.8.0",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -54,13 +54,13 @@
|
|
54
54
|
"envinfo": "^7.14.0",
|
55
55
|
"fs-extra": "^11.2.0",
|
56
56
|
"highlightjs-line-numbers.js": "^2.8.0",
|
57
|
-
"inquirer": "^
|
57
|
+
"inquirer": "^11.0.2",
|
58
58
|
"marked": "^14.1.2",
|
59
59
|
"monaco-editor": "0.50.0",
|
60
60
|
"neo-jsdoc": "1.0.1",
|
61
61
|
"neo-jsdoc-x": "1.0.5",
|
62
62
|
"postcss": "^8.4.47",
|
63
|
-
"sass": "^1.79.
|
63
|
+
"sass": "^1.79.3",
|
64
64
|
"siesta-lite": "5.5.2",
|
65
65
|
"url": "^0.11.4",
|
66
66
|
"webpack": "^5.94.0",
|
@@ -1,7 +1,7 @@
|
|
1
1
|
## Forms include a State-Provider
|
2
2
|
|
3
3
|
You do not need to define a state tree on your own.
|
4
|
-
It
|
4
|
+
It is sufficient to just use namespaces inside the `name` attribute of each field.
|
5
5
|
|
6
6
|
<pre data-neo>
|
7
7
|
import Button from '../button/Base.mjs';
|
@@ -0,0 +1,35 @@
|
|
1
|
+
## Study the Code
|
2
|
+
|
3
|
+
As you hopefully have noticed by now, this entire multi-window app is created based on Neo.mjs.
|
4
|
+
|
5
|
+
You can learn a lot by studying the code-base carefully:
|
6
|
+
<a target="_blank" href="https://github.com/neomjs/neo/tree/dev/apps/portal">Portal App Code</a>
|
7
|
+
|
8
|
+
Please give us a heads-up, in case there are specific topics which you would like to see
|
9
|
+
getting covered here.
|
10
|
+
|
11
|
+
## Easter Eggs
|
12
|
+
|
13
|
+
Every good app needs to have some meaningful Easter eggs.
|
14
|
+
|
15
|
+
### Examples: Resort TabHeaderButtons via Drag&Drop
|
16
|
+
|
17
|
+
Did you notice that you can resort the Tabs inside <a href="#/examples">Examples</a>?
|
18
|
+
|
19
|
+
After re-sorting, the routing and the tab.Strip animations will still work. Enjoy!
|
20
|
+
|
21
|
+
### Switch the main navigation layout to an animated Cube
|
22
|
+
|
23
|
+
Fair warning: this animated layout does require some advanced GPU processing power.
|
24
|
+
At the moment, it performs best using Firefox.
|
25
|
+
|
26
|
+
The setting will get stored inside the LocalStorage,
|
27
|
+
so you will need to click the following Button a 2nd time to deactivate it again.
|
28
|
+
Or you can clear the LocalStorage manually.</br></br>
|
29
|
+
|
30
|
+
<pre data-neo-component>
|
31
|
+
{
|
32
|
+
"className": "Portal.view.learn.CubeLayoutButton",
|
33
|
+
"style" : {"margin": 0}
|
34
|
+
}
|
35
|
+
</pre>
|
@@ -32,6 +32,7 @@
|
|
32
32
|
{"name": "Events", "parentId": "InDepth", "isLeaf": false, "id": "GuideEvents"},
|
33
33
|
{"name": "Custom Events", "parentId": "GuideEvents", "id": "guides.events.CustomEvents"},
|
34
34
|
{"name": "DOM Events", "parentId": "GuideEvents", "id": "guides.events.DomEvents"},
|
35
|
+
{"name": "Portal App", "parentId": "InDepth", "id": "guides.PortalApp"},
|
35
36
|
{"name": "Tables (Stores)", "parentId": "InDepth", "id": "guides.Tables", "hidden": true},
|
36
37
|
{"name": "Multi-Window Applications", "parentId": "InDepth", "id": "guides.MultiWindow", "hidden": true},
|
37
38
|
{"name": "Main Thread Addons", "parentId": "InDepth", "isLeaf": false, "id": "MainThreadAddons", "hidden": true},
|
package/src/DefaultConfig.mjs
CHANGED
@@ -262,12 +262,12 @@ const DefaultConfig = {
|
|
262
262
|
useVdomWorker: true,
|
263
263
|
/**
|
264
264
|
* buildScripts/injectPackageVersion.mjs will update this value
|
265
|
-
* @default '7.
|
265
|
+
* @default '7.8.0'
|
266
266
|
* @memberOf! module:Neo
|
267
267
|
* @name config.version
|
268
268
|
* @type String
|
269
269
|
*/
|
270
|
-
version: '7.
|
270
|
+
version: '7.8.0'
|
271
271
|
};
|
272
272
|
|
273
273
|
Object.assign(DefaultConfig, {
|
package/src/collection/Base.mjs
CHANGED
@@ -990,12 +990,13 @@ class Base extends CoreBase {
|
|
990
990
|
}
|
991
991
|
|
992
992
|
/**
|
993
|
-
* Helper method to check if a given
|
993
|
+
* Helper method to check if a given input is either object-like or a key
|
994
994
|
* @param {*} value
|
995
|
-
* @returns {Boolean}
|
995
|
+
* @returns {Boolean} returns true for object-like values
|
996
996
|
*/
|
997
997
|
isItem(value) {
|
998
|
-
|
998
|
+
// We can not use Neo.isObject() || Neo.isRecord(), since collections can store neo instances too.
|
999
|
+
return typeof value === 'object'
|
999
1000
|
}
|
1000
1001
|
|
1001
1002
|
/**
|
package/src/container/Base.mjs
CHANGED
@@ -87,7 +87,10 @@ class Base extends Component {
|
|
87
87
|
*/
|
88
88
|
items_: [],
|
89
89
|
/**
|
90
|
-
*
|
90
|
+
* It is crucial to define a layout before the container does get rendered.
|
91
|
+
* Meaning: onConstructed() is the latest life-cycle point.
|
92
|
+
* You can use layout: 'base', in case you do not need a layout at all.
|
93
|
+
* @member {Object|String|null} layout_={ntype: 'vbox', align: 'stretch'}
|
91
94
|
*/
|
92
95
|
layout_: {
|
93
96
|
ntype: 'vbox',
|
@@ -135,7 +138,7 @@ class Base extends Component {
|
|
135
138
|
}
|
136
139
|
|
137
140
|
/**
|
138
|
-
* @param {Neo.layout.Base} value
|
141
|
+
* @param {Neo.layout.Base|null} value
|
139
142
|
* @param {Neo.layout.Base|null} oldValue
|
140
143
|
* @protected
|
141
144
|
*/
|
@@ -144,15 +147,15 @@ class Base extends Component {
|
|
144
147
|
|
145
148
|
if (me.rendered) {
|
146
149
|
oldValue?.removeRenderAttributes();
|
147
|
-
value
|
150
|
+
value?.applyRenderAttributes();
|
148
151
|
|
149
152
|
me.items.forEach((item, index) => {
|
150
153
|
oldValue?.removeChildAttributes(item, index);
|
151
|
-
value
|
152
|
-
})
|
153
|
-
|
154
|
-
oldValue?.destroy()
|
154
|
+
value?.applyChildAttributes(item, index)
|
155
|
+
})
|
155
156
|
}
|
157
|
+
|
158
|
+
oldValue?.destroy?.()
|
156
159
|
}
|
157
160
|
|
158
161
|
/**
|
@@ -419,6 +422,8 @@ class Base extends Component {
|
|
419
422
|
* @param {Boolean} [silent=false] true to update the vdom silently (useful for destroying multiple child items in a row)
|
420
423
|
*/
|
421
424
|
destroy(updateParentVdom=false, silent=false) {
|
425
|
+
this.layout?.destroy();
|
426
|
+
|
422
427
|
this.items?.forEach(item => {
|
423
428
|
item.destroy?.(false, true)
|
424
429
|
});
|
@@ -25,9 +25,9 @@ class DragProxyComponent extends Base {
|
|
25
25
|
*/
|
26
26
|
autoRender: true,
|
27
27
|
/**
|
28
|
-
* @member {String[]}
|
28
|
+
* @member {String[]} baseCls=['neo-dragproxy']
|
29
29
|
*/
|
30
|
-
|
30
|
+
baseCls: ['neo-dragproxy'],
|
31
31
|
/**
|
32
32
|
* @member {Boolean} moveInMainThread=true
|
33
33
|
*/
|
@@ -35,28 +35,18 @@ class DragProxyComponent extends Base {
|
|
35
35
|
}
|
36
36
|
|
37
37
|
/**
|
38
|
-
*
|
38
|
+
* Triggered after the mounted config got changed
|
39
|
+
* @param {Boolean} value
|
40
|
+
* @param {Boolean} oldValue
|
41
|
+
* @protected
|
39
42
|
*/
|
40
|
-
|
41
|
-
super.
|
43
|
+
afterSetMounted(value, oldValue) {
|
44
|
+
super.afterSetMounted(value, oldValue);
|
42
45
|
|
43
|
-
|
44
|
-
|
45
|
-
me.on('mounted', me.onMounted, me)
|
46
|
-
}
|
47
|
-
|
48
|
-
/**
|
49
|
-
* @param {String} id
|
50
|
-
*/
|
51
|
-
onMounted(id) {
|
52
|
-
if (this.moveInMainThread) {
|
46
|
+
if (value && this.moveInMainThread) {
|
53
47
|
let {appName, id, windowId} = this;
|
54
48
|
|
55
|
-
Neo.main.addon.DragDrop.setDragProxyElement({
|
56
|
-
appName,
|
57
|
-
id,
|
58
|
-
windowId
|
59
|
-
})
|
49
|
+
Neo.main.addon.DragDrop.setDragProxyElement({appName, id, windowId})
|
60
50
|
}
|
61
51
|
}
|
62
52
|
}
|