neo.mjs 7.16.0 → 8.0.0-alpha.2
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/view/ViewportController.mjs +1 -1
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/realworld/view/HomeComponent.mjs +13 -14
- package/apps/realworld/view/user/ProfileComponent.mjs +1 -1
- package/apps/realworld/view/user/SignUpComponent.mjs +1 -2
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/table/container/MainContainer.mjs +17 -12
- package/examples/table/nestedRecordFields/MainContainer.mjs +3 -1
- package/examples/todoList/version1/MainComponent.mjs +1 -1
- package/package.json +6 -6
- package/resources/data/deck/learnneo/pages/benefits/Speed.md +5 -4
- package/resources/scss/src/calendar/view/week/Component.scss +6 -0
- package/resources/scss/src/component/DateSelector.scss +1 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/button/Base.mjs +8 -8
- package/src/calendar/view/MainContainer.mjs +4 -1
- package/src/calendar/view/SettingsContainer.mjs +4 -0
- package/src/calendar/view/YearComponent.mjs +0 -3
- package/src/calendar/view/calendars/ColorsList.mjs +6 -6
- package/src/calendar/view/calendars/Container.mjs +1 -1
- package/src/calendar/view/calendars/List.mjs +14 -2
- package/src/calendar/view/month/Component.mjs +1 -1
- package/src/calendar/view/week/Component.mjs +7 -7
- package/src/calendar/view/week/EventDragZone.mjs +1 -1
- package/src/calendar/view/week/TimeAxisComponent.mjs +2 -2
- package/src/calendar/view/week/plugin/DragDrop.mjs +3 -3
- package/src/collection/Base.mjs +4 -3
- package/src/component/Base.mjs +125 -49
- package/src/component/Circle.mjs +1 -3
- package/src/component/DateSelector.mjs +1 -1
- package/src/container/Accordion.mjs +1 -1
- package/src/container/Base.mjs +19 -7
- package/src/core/Base.mjs +10 -9
- package/src/draggable/list/DragZone.mjs +1 -1
- package/src/draggable/toolbar/DragZone.mjs +1 -1
- package/src/draggable/toolbar/SortZone.mjs +1 -1
- package/src/draggable/tree/DragZone.mjs +1 -1
- package/src/form/Fieldset.mjs +2 -0
- package/src/form/field/Color.mjs +4 -4
- package/src/form/field/ComboBox.mjs +2 -2
- package/src/form/field/Date.mjs +2 -1
- package/src/form/field/Picker.mjs +2 -1
- package/src/form/field/Text.mjs +8 -8
- package/src/layout/Card.mjs +11 -6
- package/src/layout/Cube.mjs +15 -4
- package/src/list/Chip.mjs +3 -2
- package/src/list/Circle.mjs +2 -1
- package/src/list/Component.mjs +5 -0
- package/src/manager/Component.mjs +158 -4
- package/src/manager/DomEvent.mjs +2 -2
- package/src/menu/List.mjs +3 -4
- package/src/menu/Panel.mjs +1 -1
- package/src/selection/Model.mjs +1 -1
- package/src/selection/grid/BaseModel.mjs +61 -0
- package/src/selection/grid/CellColumnModel.mjs +2 -2
- package/src/selection/grid/CellColumnRowModel.mjs +2 -2
- package/src/selection/grid/CellModel.mjs +4 -4
- package/src/selection/grid/CellRowModel.mjs +9 -3
- package/src/selection/grid/ColumnModel.mjs +15 -26
- package/src/selection/grid/RowModel.mjs +15 -25
- package/src/selection/table/BaseModel.mjs +61 -0
- package/src/selection/table/CellColumnModel.mjs +2 -2
- package/src/selection/table/CellColumnRowModel.mjs +2 -2
- package/src/selection/table/CellModel.mjs +4 -4
- package/src/selection/table/CellRowModel.mjs +9 -3
- package/src/selection/table/ColumnModel.mjs +7 -8
- package/src/selection/table/RowModel.mjs +7 -7
- package/src/table/Container.mjs +1 -0
- package/src/table/View.mjs +102 -80
- package/src/table/header/Button.mjs +3 -5
- package/src/table/header/Toolbar.mjs +1 -0
- package/src/tree/List.mjs +1 -1
- package/src/util/VDom.mjs +42 -11
- package/src/util/VNode.mjs +33 -11
- package/src/vdom/Helper.mjs +55 -22
- package/src/vdom/VNode.mjs +1 -1
package/src/component/Base.mjs
CHANGED
@@ -208,10 +208,10 @@ class Base extends CoreBase {
|
|
208
208
|
isLoading_: false,
|
209
209
|
/**
|
210
210
|
* Internal flag which will get set to true while an update request (worker messages) is in progress
|
211
|
-
* @member {Boolean}
|
211
|
+
* @member {Boolean} isVdomUpdating_=false
|
212
212
|
* @protected
|
213
213
|
*/
|
214
|
-
|
214
|
+
isVdomUpdating_: false,
|
215
215
|
/**
|
216
216
|
* Using the keys config will create an instance of Neo.util.KeyNavigation.
|
217
217
|
* @see {@link Neo.util.KeyNavigation KeyNavigation}
|
@@ -359,6 +359,15 @@ class Base extends CoreBase {
|
|
359
359
|
* @member {String|null} ui_=null
|
360
360
|
*/
|
361
361
|
ui_: null,
|
362
|
+
/**
|
363
|
+
* Defines the depth of the vdom tree for the next update cycle.
|
364
|
+
* - The value 1 will only send the current vdom structure as it is
|
365
|
+
* - The value of 2 will include the vdom of direct children
|
366
|
+
* - The value of 3 will include the vdom of grandchildren
|
367
|
+
* - The value of -1 will include the full tree of any depth
|
368
|
+
* @member {Number} updateDepth_=1
|
369
|
+
*/
|
370
|
+
updateDepth_: 1,
|
362
371
|
/**
|
363
372
|
* The component vnode tree. Available after the component got rendered.
|
364
373
|
* @member {Object} vnode_=null
|
@@ -395,6 +404,11 @@ class Base extends CoreBase {
|
|
395
404
|
* @member {String[]} childUpdateCache=[]
|
396
405
|
*/
|
397
406
|
childUpdateCache = []
|
407
|
+
/**
|
408
|
+
* Stores the updateDepth while an update is running to enable checks for parent update collisions
|
409
|
+
* @member {Number|null} currentUpdateDepth=null
|
410
|
+
*/
|
411
|
+
currentUpdateDepth = null
|
398
412
|
/**
|
399
413
|
* @member {Function[]} resolveUpdateCache=[]
|
400
414
|
*/
|
@@ -713,7 +727,7 @@ class Base extends CoreBase {
|
|
713
727
|
this.changeVdomRootKey('id', value);
|
714
728
|
|
715
729
|
oldValue && ComponentManager.unregister(oldValue);
|
716
|
-
ComponentManager.register(this)
|
730
|
+
value && ComponentManager.register(this)
|
717
731
|
}
|
718
732
|
|
719
733
|
/**
|
@@ -758,6 +772,16 @@ class Base extends CoreBase {
|
|
758
772
|
}
|
759
773
|
}
|
760
774
|
|
775
|
+
/**
|
776
|
+
* Triggered after the isVdomUpdating config got changed
|
777
|
+
* @param {Number|null} value
|
778
|
+
* @param {Number|null} oldValue
|
779
|
+
* @protected
|
780
|
+
*/
|
781
|
+
afterSetIsVdomUpdating(value, oldValue) {
|
782
|
+
this.currentUpdateDepth = value ? this.updateDepth : null
|
783
|
+
}
|
784
|
+
|
761
785
|
/**
|
762
786
|
* Triggered after the maxHeight config got changed
|
763
787
|
* @param {Number|String|null} value
|
@@ -1346,6 +1370,21 @@ class Base extends CoreBase {
|
|
1346
1370
|
return (Neo.isNumber(oldValue) && oldValue > 0) ? (oldValue - 1) : 0
|
1347
1371
|
}
|
1348
1372
|
|
1373
|
+
/**
|
1374
|
+
* Triggered before the updateDepth config gets changed.
|
1375
|
+
* @param {Number} value
|
1376
|
+
* @param {Number} oldValue
|
1377
|
+
* @returns {Number}
|
1378
|
+
* @protected
|
1379
|
+
*/
|
1380
|
+
beforeSetUpdateDepth(value, oldValue) {
|
1381
|
+
if (oldValue === undefined) {
|
1382
|
+
return value
|
1383
|
+
}
|
1384
|
+
|
1385
|
+
return oldValue === -1 || value === -1 ? -1 : Math.max(value, oldValue)
|
1386
|
+
}
|
1387
|
+
|
1349
1388
|
/**
|
1350
1389
|
* Changes the value of a vdom object attribute or removes it in case it has no value
|
1351
1390
|
* @param {String} key
|
@@ -1393,6 +1432,22 @@ class Base extends CoreBase {
|
|
1393
1432
|
}
|
1394
1433
|
}
|
1395
1434
|
|
1435
|
+
/**
|
1436
|
+
* Convenience shortcut to create a component reference
|
1437
|
+
* @returns {Object}
|
1438
|
+
*/
|
1439
|
+
createVdomReference() {
|
1440
|
+
let me = this,
|
1441
|
+
reference = {componentId: me.id},
|
1442
|
+
vdomId = me.vdom.id;
|
1443
|
+
|
1444
|
+
if (vdomId && me.id !== vdomId) {
|
1445
|
+
reference.id = vdomId
|
1446
|
+
}
|
1447
|
+
|
1448
|
+
return reference
|
1449
|
+
}
|
1450
|
+
|
1396
1451
|
/**
|
1397
1452
|
* Unregister this instance from the ComponentManager
|
1398
1453
|
* @param {Boolean} updateParentVdom=false true to remove the component from the parent vdom => real dom
|
@@ -1473,7 +1528,7 @@ class Base extends CoreBase {
|
|
1473
1528
|
*/
|
1474
1529
|
#executeVdomUpdate(vdom, vnode, resolve, reject) {
|
1475
1530
|
let me = this,
|
1476
|
-
opts = {
|
1531
|
+
opts = {},
|
1477
1532
|
deltas;
|
1478
1533
|
|
1479
1534
|
if (Neo.currentWorker.isSharedWorker) {
|
@@ -1488,6 +1543,12 @@ class Base extends CoreBase {
|
|
1488
1543
|
me._needsVdomUpdate = false;
|
1489
1544
|
me.afterSetNeedsVdomUpdate?.(false, true);
|
1490
1545
|
|
1546
|
+
opts.vdom = ComponentManager.getVdomTree(vdom, me.updateDepth);
|
1547
|
+
opts.vnode = ComponentManager.getVnodeTree(vnode, me.updateDepth);
|
1548
|
+
|
1549
|
+
// Reset the updateDepth to the default value for the next update cycle
|
1550
|
+
me._updateDepth = me.constructor.config.updateDepth;
|
1551
|
+
|
1491
1552
|
Neo.vdom.Helper.update(opts).catch(err => {
|
1492
1553
|
me.isVdomUpdating = false;
|
1493
1554
|
console.log('Error attempting to update component dom', err, me);
|
@@ -1495,9 +1556,9 @@ class Base extends CoreBase {
|
|
1495
1556
|
reject?.()
|
1496
1557
|
}).then(data => {
|
1497
1558
|
me.isVdomUpdating = false;
|
1559
|
+
|
1498
1560
|
// checking if the component got destroyed before the update cycle is done
|
1499
1561
|
if (me.id) {
|
1500
|
-
// console.log('Component vnode updated', data);
|
1501
1562
|
me.vnode = data.vnode;
|
1502
1563
|
|
1503
1564
|
deltas = data.deltas;
|
@@ -1763,8 +1824,7 @@ class Base extends CoreBase {
|
|
1763
1824
|
* @returns {Object}
|
1764
1825
|
*/
|
1765
1826
|
getVdomChild(id, vdom=this.vdom) {
|
1766
|
-
|
1767
|
-
return node?.vdom
|
1827
|
+
return VDomUtil.find(vdom, id)?.vdom
|
1768
1828
|
}
|
1769
1829
|
|
1770
1830
|
/**
|
@@ -1785,6 +1845,16 @@ class Base extends CoreBase {
|
|
1785
1845
|
return this.vnode
|
1786
1846
|
}
|
1787
1847
|
|
1848
|
+
/**
|
1849
|
+
* Checks if a given updateDepth & distance would result in an update collision
|
1850
|
+
* @param {Number} updateDepth
|
1851
|
+
* @param {Number} distance
|
1852
|
+
* @returns {Boolean}
|
1853
|
+
*/
|
1854
|
+
hasUpdateCollision(updateDepth, distance) {
|
1855
|
+
return updateDepth === -1 ? true : distance < updateDepth
|
1856
|
+
}
|
1857
|
+
|
1788
1858
|
/**
|
1789
1859
|
* Hide the component.
|
1790
1860
|
* hideMode: 'removeDom' uses vdom removeDom.
|
@@ -1844,28 +1914,34 @@ class Base extends CoreBase {
|
|
1844
1914
|
* Checks for vdom updates inside the parent chain and if found.
|
1845
1915
|
* Registers the component for a vdom update once done.
|
1846
1916
|
* @param {String} parentId=this.parentId
|
1847
|
-
* @param {Function} [resolve]
|
1917
|
+
* @param {Function} [resolve] Gets passed by updateVdom()
|
1918
|
+
* @param {Number} distance=1 Distance inside the component tree
|
1848
1919
|
* @returns {Boolean}
|
1849
1920
|
*/
|
1850
|
-
isParentVdomUpdating(parentId=this.parentId, resolve) {
|
1921
|
+
isParentVdomUpdating(parentId=this.parentId, resolve, distance=1) {
|
1851
1922
|
if (parentId !== 'document.body') {
|
1852
1923
|
let me = this,
|
1853
1924
|
parent = Neo.getComponent(parentId);
|
1854
1925
|
|
1855
1926
|
if (parent) {
|
1856
1927
|
if (parent.isVdomUpdating) {
|
1857
|
-
if (
|
1858
|
-
|
1859
|
-
|
1928
|
+
if (me.hasUpdateCollision(parent.currentUpdateDepth, distance)) {
|
1929
|
+
if (Neo.config.logVdomUpdateCollisions) {
|
1930
|
+
console.warn('vdom parent update conflict with:', parent, 'for:', me)
|
1931
|
+
}
|
1860
1932
|
|
1861
|
-
|
1933
|
+
NeoArray.add(parent.childUpdateCache, me.id);
|
1862
1934
|
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
|
1935
|
+
// Adding the resolve fn to its own cache, since the parent will trigger
|
1936
|
+
// a new update() directly on this cmp
|
1937
|
+
resolve && me.resolveUpdateCache.push(resolve);
|
1938
|
+
return true
|
1939
|
+
}
|
1940
|
+
|
1941
|
+
// If an update is running and does not have a collision, we do not need to check further parents
|
1942
|
+
return false
|
1867
1943
|
} else {
|
1868
|
-
return me.isParentVdomUpdating(parent.parentId, resolve)
|
1944
|
+
return me.isParentVdomUpdating(parent.parentId, resolve, distance+1)
|
1869
1945
|
}
|
1870
1946
|
}
|
1871
1947
|
}
|
@@ -2206,7 +2282,7 @@ class Base extends CoreBase {
|
|
2206
2282
|
parentId : autoMount ? me.getMountedParentId() : undefined,
|
2207
2283
|
parentIndex: autoMount ? me.getMountedParentIndex() : undefined,
|
2208
2284
|
windowId : me.windowId,
|
2209
|
-
...me.vdom
|
2285
|
+
...ComponentManager.getVdomTree(me.vdom)
|
2210
2286
|
});
|
2211
2287
|
|
2212
2288
|
me.onRender(data, useVdomWorker ? autoMount : false);
|
@@ -2296,7 +2372,7 @@ class Base extends CoreBase {
|
|
2296
2372
|
* hideMode: 'visibility' uses css visibility.
|
2297
2373
|
*/
|
2298
2374
|
show() {
|
2299
|
-
|
2375
|
+
let me = this;
|
2300
2376
|
|
2301
2377
|
if (me.hideMode !== 'visibility') {
|
2302
2378
|
delete me.vdom.removeDom;
|
@@ -2323,7 +2399,7 @@ class Base extends CoreBase {
|
|
2323
2399
|
* @param {Object} [vdom=this.vdom]
|
2324
2400
|
* @param {Boolean} force=false
|
2325
2401
|
*/
|
2326
|
-
syncVdomIds(vnode
|
2402
|
+
syncVdomIds(vnode=this.vnode, vdom=this.vdom, force=false) {
|
2327
2403
|
VDomUtil.syncVdomIds(vnode, vdom, force)
|
2328
2404
|
}
|
2329
2405
|
|
@@ -2335,8 +2411,10 @@ class Base extends CoreBase {
|
|
2335
2411
|
* @param {Neo.vdom.VNode} [vnode=this.vnode]
|
2336
2412
|
*/
|
2337
2413
|
syncVnodeTree(vnode=this.vnode) {
|
2338
|
-
let me
|
2339
|
-
|
2414
|
+
let me = this,
|
2415
|
+
childComponents = ComponentManager.getChildren(me),
|
2416
|
+
debug = false,
|
2417
|
+
map = {},
|
2340
2418
|
childVnode, start;
|
2341
2419
|
|
2342
2420
|
if (debug) {
|
@@ -2345,12 +2423,30 @@ class Base extends CoreBase {
|
|
2345
2423
|
|
2346
2424
|
me.syncVdomIds();
|
2347
2425
|
|
2426
|
+
if (vnode && me.id !== vnode.id) {
|
2427
|
+
ComponentManager.registerWrapperNode(vnode.id, me)
|
2428
|
+
}
|
2429
|
+
|
2430
|
+
// we need one separate iteration first to ensure all wrapper nodes get registered
|
2431
|
+
childComponents.forEach(component => {
|
2432
|
+
childVnode = VNodeUtil.findChildVnode(me.vnode, component.vdom.id)?.vnode;
|
2433
|
+
|
2434
|
+
if (childVnode) {
|
2435
|
+
map[component.id] = childVnode;
|
2436
|
+
|
2437
|
+
if (component.id !== childVnode.id) {
|
2438
|
+
ComponentManager.registerWrapperNode(childVnode.id, component)
|
2439
|
+
}
|
2440
|
+
}
|
2441
|
+
});
|
2442
|
+
|
2348
2443
|
// delegate the latest node updates to all possible child components found inside the vnode tree
|
2349
|
-
|
2350
|
-
childVnode =
|
2444
|
+
childComponents.forEach(component => {
|
2445
|
+
childVnode = map[component.id];
|
2351
2446
|
|
2352
2447
|
if (childVnode) {
|
2353
|
-
|
2448
|
+
// silent update
|
2449
|
+
component._vnode = ComponentManager.addVnodeComponentReferences(childVnode, component.id);
|
2354
2450
|
|
2355
2451
|
if (!component.rendered) {
|
2356
2452
|
component._rendered = true;
|
@@ -2363,28 +2459,8 @@ class Base extends CoreBase {
|
|
2363
2459
|
}
|
2364
2460
|
});
|
2365
2461
|
|
2366
|
-
//
|
2367
|
-
|
2368
|
-
// keep the vnode parent tree in sync
|
2369
|
-
ComponentManager.getParents(me).forEach((component, index) => {
|
2370
|
-
if (component.vnode) {
|
2371
|
-
if (!me.vnode) {
|
2372
|
-
if (index === 0 && !VNodeUtil.removeChildVnode(component.vnode, me.id)) {
|
2373
|
-
// This can fail, in case the vnode is already removed (not an issue, better safe than sorry)
|
2374
|
-
// console.warn('syncVnodeTree: Could not remove the parent vnode for', me.id, component);
|
2375
|
-
}
|
2376
|
-
}
|
2377
|
-
|
2378
|
-
// check for dynamically rendered components which get inserted into the component tree
|
2379
|
-
else if (index === 0 && me.vnode.outerHTML) {
|
2380
|
-
// console.log('dyn item', me.vnode, me.parentIndex);
|
2381
|
-
component.vnode.childNodes.splice(me.parentIndex || 0, 0, me.vnode)
|
2382
|
-
} else if (!VNodeUtil.replaceChildVnode(component.vnode, me.vnode.id, me.vnode)) {
|
2383
|
-
// todo: can happen for dynamically inserted container items
|
2384
|
-
// console.warn('syncVnodeTree: Could not replace the parent vnode for', me.vnode.id, component);
|
2385
|
-
}
|
2386
|
-
}
|
2387
|
-
});
|
2462
|
+
// silent update
|
2463
|
+
me._vnode = vnode ? ComponentManager.addVnodeComponentReferences(vnode, me.id) : null;
|
2388
2464
|
|
2389
2465
|
debug && console.log('syncVnodeTree', me.id, performance.now() - start)
|
2390
2466
|
}
|
@@ -2472,7 +2548,7 @@ class Base extends CoreBase {
|
|
2472
2548
|
opts, vdom, vnode, vnodeStyle;
|
2473
2549
|
|
2474
2550
|
if (delta) {
|
2475
|
-
vdom = VDomUtil.
|
2551
|
+
vdom = VDomUtil.find(me.vdom, id);
|
2476
2552
|
vnode = me.vnode && VNodeUtil.findChildVnode(me.vnode, id);
|
2477
2553
|
|
2478
2554
|
if (!me.hasUnmountedVdomChanges) {
|
package/src/component/Circle.mjs
CHANGED
@@ -545,9 +545,7 @@ class Circle extends Component {
|
|
545
545
|
* @returns {Object}
|
546
546
|
*/
|
547
547
|
getItemEl(itemId) {
|
548
|
-
|
549
|
-
|
550
|
-
return item?.vdom
|
548
|
+
return VDomUtil.find(this.getFrontEl(), itemId)?.vdom
|
551
549
|
}
|
552
550
|
|
553
551
|
/**
|
@@ -722,7 +722,7 @@ class DateSelector extends Component {
|
|
722
722
|
*/
|
723
723
|
onCellClick(data) {
|
724
724
|
let me = this,
|
725
|
-
cellEl = VDomUtil.
|
725
|
+
cellEl = VDomUtil.find(me.vdom, data.path[0].id),
|
726
726
|
date = me.currentDate; // cloned
|
727
727
|
|
728
728
|
date.setDate(parseInt(cellEl.vdom.cn[0].html));
|
package/src/container/Base.mjs
CHANGED
@@ -168,7 +168,7 @@ class Base extends Component {
|
|
168
168
|
if (oldValue !== undefined) {
|
169
169
|
super.afterSetMounted(value, oldValue);
|
170
170
|
|
171
|
-
for (let i = 0, {
|
171
|
+
for (let i = 0, {items} = this, {length} = items; i < length; i++) {
|
172
172
|
if (!items[i].vdom.removeDom) {
|
173
173
|
items[i].mounted = value
|
174
174
|
}
|
@@ -377,7 +377,8 @@ class Base extends Component {
|
|
377
377
|
let me = this,
|
378
378
|
items = me._items,
|
379
379
|
itemsRoot = me.getVdomItemsRoot(),
|
380
|
-
{layout} = me
|
380
|
+
{layout} = me,
|
381
|
+
vdom;
|
381
382
|
|
382
383
|
itemsRoot.cn = [];
|
383
384
|
|
@@ -385,10 +386,13 @@ class Base extends Component {
|
|
385
386
|
items[index] = item = me.createItem(item, index);
|
386
387
|
|
387
388
|
if (item instanceof Neo.core.Base) {
|
388
|
-
layout?.applyChildAttributes(item, index)
|
389
|
+
layout?.applyChildAttributes(item, index);
|
390
|
+
vdom = item.createVdomReference()
|
391
|
+
} else {
|
392
|
+
vdom = item.vdom
|
389
393
|
}
|
390
394
|
|
391
|
-
itemsRoot.cn.push(
|
395
|
+
itemsRoot.cn.push(vdom)
|
392
396
|
});
|
393
397
|
|
394
398
|
me.update()
|
@@ -527,12 +531,14 @@ class Base extends Component {
|
|
527
531
|
|
528
532
|
me.items = items;
|
529
533
|
|
530
|
-
me.getVdomItemsRoot().cn.splice(index, 0, item.
|
534
|
+
me.getVdomItemsRoot().cn.splice(index, 0, item.createVdomReference())
|
531
535
|
}
|
532
536
|
|
533
537
|
if (!silent) {
|
538
|
+
me.updateDepth = -1; // pass the full vdom tree to honor new nested component trees
|
539
|
+
|
534
540
|
me.promiseUpdate().then(() => {
|
535
|
-
me.fire('insert', {
|
541
|
+
me.fire('insert', {index, item})
|
536
542
|
})
|
537
543
|
}
|
538
544
|
|
@@ -631,7 +637,7 @@ class Base extends Component {
|
|
631
637
|
|
632
638
|
for (; i < len; i++) {
|
633
639
|
if (items[i].id === component.id) {
|
634
|
-
this.removeAt(i, destroyItem, silent)
|
640
|
+
return this.removeAt(i, destroyItem, silent)
|
635
641
|
}
|
636
642
|
}
|
637
643
|
}
|
@@ -682,6 +688,9 @@ class Base extends Component {
|
|
682
688
|
|
683
689
|
me.getVdomItemsRoot().cn.splice(index, 1);
|
684
690
|
|
691
|
+
// the next update cycle needs to include direct children
|
692
|
+
me.updateDepth = 2;
|
693
|
+
|
685
694
|
!silent && me.update();
|
686
695
|
|
687
696
|
if (destroyItem) {
|
@@ -730,6 +739,9 @@ class Base extends Component {
|
|
730
739
|
NeoArray.move(me.items, item2Index, item1Index);
|
731
740
|
NeoArray.move(me.getVdomItemsRoot().cn, item2Index, item1Index);
|
732
741
|
|
742
|
+
// the next update cycle needs to include direct children
|
743
|
+
me.updateDepth = 2;
|
744
|
+
|
733
745
|
me.update()
|
734
746
|
}
|
735
747
|
}
|
package/src/core/Base.mjs
CHANGED
@@ -131,7 +131,7 @@ class Base {
|
|
131
131
|
delete config.id;
|
132
132
|
|
133
133
|
if (me.constructor.config) {
|
134
|
-
delete me.constructor.config.id
|
134
|
+
delete me.constructor.config.id
|
135
135
|
}
|
136
136
|
|
137
137
|
me.getStaticConfig('observable') && me.initObservable(config);
|
@@ -178,11 +178,13 @@ class Base {
|
|
178
178
|
}
|
179
179
|
}
|
180
180
|
|
181
|
-
if (
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
181
|
+
if (value) {
|
182
|
+
if (hasManager) {
|
183
|
+
Neo.manager.Instance.register(me);
|
184
|
+
} else {
|
185
|
+
Neo.idMap = Neo.idMap || {};
|
186
|
+
Neo.idMap[me.id] = me
|
187
|
+
}
|
186
188
|
}
|
187
189
|
}
|
188
190
|
|
@@ -275,8 +277,7 @@ class Base {
|
|
275
277
|
*/
|
276
278
|
callOverwritten(...args) {
|
277
279
|
let stack = new Error().stack,
|
278
|
-
|
279
|
-
methodName = stack.match(regex)[1];
|
280
|
+
methodName = stack.match(Base.methodNameRegex)[1];
|
280
281
|
|
281
282
|
this.__proto__.constructor.overwrittenMethods[methodName].call(this, ...args)
|
282
283
|
}
|
@@ -370,7 +371,7 @@ class Base {
|
|
370
371
|
|
371
372
|
me.isConfiguring = true;
|
372
373
|
Object.assign(me[configSymbol], me.mergeConfig(config, preventOriginalConfig));
|
373
|
-
me.processConfigs()
|
374
|
+
me.processConfigs();
|
374
375
|
me.isConfiguring = false;
|
375
376
|
}
|
376
377
|
|
@@ -118,7 +118,7 @@ class DragZone extends BaseDragZone {
|
|
118
118
|
let me = this;
|
119
119
|
|
120
120
|
if (me.owner.draggable) {
|
121
|
-
me.dragElement = VDomUtil.
|
121
|
+
me.dragElement = VDomUtil.find(me.owner.vdom, data.path[0].id).vdom;
|
122
122
|
me.dragStart(data)
|
123
123
|
}
|
124
124
|
}
|
@@ -92,7 +92,7 @@ class DragZone extends BaseDragZone {
|
|
92
92
|
let me = this;
|
93
93
|
|
94
94
|
if (me.owner.draggable) {
|
95
|
-
me.dragElement = VDomUtil.
|
95
|
+
me.dragElement = VDomUtil.find(me.owner.vdom, data.path[0].id).vdom;
|
96
96
|
me.dragStart(data)
|
97
97
|
}
|
98
98
|
}
|
@@ -187,7 +187,7 @@ class SortZone extends DragZone {
|
|
187
187
|
|
188
188
|
Object.assign(me, {
|
189
189
|
currentIndex : index,
|
190
|
-
dragElement : VDomUtil.
|
190
|
+
dragElement : VDomUtil.find(owner.vdom, button.id).vdom,
|
191
191
|
dragProxyConfig : {...me.dragProxyConfig, cls : [...owner.cls]},
|
192
192
|
indexMap : indexMap,
|
193
193
|
ownerStyle : {height: ownerStyle.height, width : ownerStyle.width},
|
@@ -88,7 +88,7 @@ class DragZone extends BaseDragZone {
|
|
88
88
|
me.dragElement = {
|
89
89
|
tag: 'ul',
|
90
90
|
cls: ['neo-list-container', 'neo-list'],
|
91
|
-
cn : [VDomUtil.
|
91
|
+
cn : [VDomUtil.find(me.owner.vdom, data.path[0].id).vdom]
|
92
92
|
};
|
93
93
|
|
94
94
|
me.dragStart(data)
|
package/src/form/Fieldset.mjs
CHANGED
package/src/form/field/Color.mjs
CHANGED
@@ -51,7 +51,7 @@ class Color extends ComboBox {
|
|
51
51
|
super.construct(config);
|
52
52
|
|
53
53
|
let me = this,
|
54
|
-
inputWrapper = VDomUtil.
|
54
|
+
inputWrapper = VDomUtil.find(me.vdom, me.getInputWrapperId());
|
55
55
|
|
56
56
|
inputWrapper.vdom.cn.unshift({
|
57
57
|
cls : 'neo-color',
|
@@ -61,7 +61,7 @@ class Color extends ComboBox {
|
|
61
61
|
}
|
62
62
|
});
|
63
63
|
|
64
|
-
me.update()
|
64
|
+
me.update()
|
65
65
|
}
|
66
66
|
|
67
67
|
/**
|
@@ -73,12 +73,12 @@ class Color extends ComboBox {
|
|
73
73
|
*/
|
74
74
|
afterSetValue(value, oldValue, preventFilter=false) {
|
75
75
|
let me = this,
|
76
|
-
colorIndicator = VDomUtil.
|
76
|
+
colorIndicator = VDomUtil.find(me.vdom, me.getColorIndicatorId())?.vdom,
|
77
77
|
{list, record} = me,
|
78
78
|
selectionModel = me.list?.selectionModel;
|
79
79
|
|
80
80
|
if (colorIndicator) {
|
81
|
-
colorIndicator.style.backgroundColor = me.getColor()
|
81
|
+
colorIndicator.style.backgroundColor = me.getColor()
|
82
82
|
}
|
83
83
|
|
84
84
|
if (record) {
|
@@ -456,7 +456,7 @@ class ComboBox extends Picker {
|
|
456
456
|
* @returns {Object}
|
457
457
|
*/
|
458
458
|
getInputHintEl() {
|
459
|
-
return VDomUtil.
|
459
|
+
return VDomUtil.find(this.vdom, this.getInputHintId())?.vdom
|
460
460
|
}
|
461
461
|
|
462
462
|
/**
|
@@ -696,7 +696,7 @@ class ComboBox extends Picker {
|
|
696
696
|
*/
|
697
697
|
updateTypeAhead(silent=false) {
|
698
698
|
let me = this,
|
699
|
-
inputEl = VDomUtil.
|
699
|
+
inputEl = VDomUtil.find(me.vdom, {flag: 'neo-real-input'});
|
700
700
|
|
701
701
|
if (me.typeAhead) {
|
702
702
|
inputEl.parentNode.cn[inputEl.index] = {
|
package/src/form/field/Date.mjs
CHANGED
@@ -136,7 +136,8 @@ class Picker extends Text {
|
|
136
136
|
{pickerWidth} = me,
|
137
137
|
pickerComponent = me.createPickerComponent();
|
138
138
|
|
139
|
-
me.picker = Neo.create(
|
139
|
+
me.picker = Neo.create({
|
140
|
+
module : Container,
|
140
141
|
parentId : 'document.body',
|
141
142
|
floating : true,
|
142
143
|
align : {
|
package/src/form/field/Text.mjs
CHANGED
@@ -410,7 +410,7 @@ class Text extends Base {
|
|
410
410
|
*/
|
411
411
|
afterSetErrorPositionAbsolute(value, oldValue) {
|
412
412
|
let me = this,
|
413
|
-
cls = VDomUtil.
|
413
|
+
cls = VDomUtil.find(me.vdom, {cls: 'neo-textfield-error'}).vdom.cls;
|
414
414
|
|
415
415
|
NeoArray[value ? 'add' : 'remove'](cls, 'neo-absolute');
|
416
416
|
|
@@ -824,10 +824,10 @@ class Text extends Base {
|
|
824
824
|
});
|
825
825
|
|
826
826
|
postTriggers.sort((a, b) => b.weight - a.weight); // DESC
|
827
|
-
preTriggers.sort((a, b) => a.weight - b.weight); // ASC
|
827
|
+
preTriggers.sort( (a, b) => a.weight - b.weight); // ASC
|
828
828
|
|
829
|
-
postTriggers = postTriggers.map(
|
830
|
-
preTriggers = preTriggers.map(
|
829
|
+
postTriggers = postTriggers.map(trigger => trigger.createVdomReference());
|
830
|
+
preTriggers = preTriggers.map( trigger => trigger.createVdomReference());
|
831
831
|
|
832
832
|
if (inputEl.tag === 'input') {
|
833
833
|
// wrap the input tag
|
@@ -1090,14 +1090,14 @@ class Text extends Base {
|
|
1090
1090
|
* @returns {Object|null}
|
1091
1091
|
*/
|
1092
1092
|
getCenterBorderEl() {
|
1093
|
-
return VDomUtil.
|
1093
|
+
return VDomUtil.find(this.vdom, {cls: 'neo-center-border'})?.vdom || null
|
1094
1094
|
}
|
1095
1095
|
|
1096
1096
|
/**
|
1097
1097
|
* @returns {Object|null}
|
1098
1098
|
*/
|
1099
1099
|
getInputEl() {
|
1100
|
-
return VDomUtil.
|
1100
|
+
return VDomUtil.find(this.vdom, {flag: 'neo-real-input'})?.vdom || null
|
1101
1101
|
}
|
1102
1102
|
|
1103
1103
|
/**
|
@@ -1137,7 +1137,7 @@ class Text extends Base {
|
|
1137
1137
|
* @returns {Object|null}
|
1138
1138
|
*/
|
1139
1139
|
getLabelEl() {
|
1140
|
-
return VDomUtil.
|
1140
|
+
return VDomUtil.find(this.vdom, {tag: 'label'})?.vdom || null
|
1141
1141
|
}
|
1142
1142
|
|
1143
1143
|
/**
|
@@ -1486,7 +1486,7 @@ class Text extends Base {
|
|
1486
1486
|
NeoArray[value ? 'add' : 'remove'](cls, 'neo-invalid');
|
1487
1487
|
me.cls = cls;
|
1488
1488
|
|
1489
|
-
errorWrapper = VDomUtil.
|
1489
|
+
errorWrapper = VDomUtil.find(me.vdom, {cls: 'neo-textfield-error-wrapper'}).vdom;
|
1490
1490
|
errorNode = errorWrapper.cn[0];
|
1491
1491
|
|
1492
1492
|
if (value) {
|