neo.mjs 7.15.0 → 8.0.0-alpha.1
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/view/ViewportController.mjs +1 -1
- package/apps/portal/view/about/Container.mjs +2 -2
- 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/scss/src/Global.scss +1 -1
- package/resources/scss/src/apps/portal/home/parts/MainNeo.scss +10 -5
- package/resources/scss/src/global/_all.scss +1 -1
- package/resources/scss/theme-neo-light/Global.scss +1 -1
- package/resources/scss/theme-neo-light/design-tokens/_all.scss +3 -3
- package/src/DefaultConfig.mjs +2 -2
- package/src/button/Base.mjs +41 -48
- package/src/calendar/view/SettingsContainer.mjs +4 -0
- 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 +6 -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 +81 -36
- package/src/component/Circle.mjs +1 -3
- package/src/component/DateSelector.mjs +1 -1
- package/src/component/wrapper/MonacoEditor.mjs +5 -0
- package/src/container/Accordion.mjs +1 -1
- package/src/container/Base.mjs +18 -6
- 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 +1 -0
- 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 +4 -5
- 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/menu/ListModel.mjs +1 -5
- 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 +36 -16
- package/src/vdom/VNode.mjs +1 -1
@@ -190,6 +190,7 @@ class Component extends BaseComponent {
|
|
190
190
|
* @protected
|
191
191
|
*/
|
192
192
|
totalColumns: null,
|
193
|
+
updateDepth: -1,
|
193
194
|
/**
|
194
195
|
* @member {Object} vdom
|
195
196
|
*/
|
@@ -224,17 +225,16 @@ class Component extends BaseComponent {
|
|
224
225
|
{wheel : me.onWheel, scope: me}
|
225
226
|
]);
|
226
227
|
|
227
|
-
me.timeAxis = Neo.create(
|
228
|
+
me.timeAxis = Neo.create({
|
229
|
+
module : TimeAxisComponent,
|
228
230
|
appName : me.appName,
|
229
231
|
parentId : me.id,
|
230
|
-
listeners: {
|
231
|
-
|
232
|
-
scope : me
|
233
|
-
},
|
232
|
+
listeners: {change: me.onTimeAxisChange, scope : me},
|
233
|
+
windowId : me.windowId,
|
234
234
|
...me.timeAxisConfig
|
235
235
|
});
|
236
236
|
|
237
|
-
me.getColumnTimeAxisContainer().cn[me.timeAxisPosition === 'start' ? 'unshift' : 'push'](me.timeAxis.
|
237
|
+
me.getColumnTimeAxisContainer().cn[me.timeAxisPosition === 'start' ? 'unshift' : 'push'](me.timeAxis.createVdomReference());
|
238
238
|
|
239
239
|
if (me.calendarStore.getCount() > 0 && me.eventStore.getCount() > 0) {
|
240
240
|
me.needsEventUpdate = true
|
@@ -686,7 +686,7 @@ class Component extends BaseComponent {
|
|
686
686
|
let me = this,
|
687
687
|
{editEventContainer} = me.owner,
|
688
688
|
eventNode = path[0],
|
689
|
-
eventVdom = VDomUtil.
|
689
|
+
eventVdom = VDomUtil.find(me.vdom, eventNode.id).vdom,
|
690
690
|
record = me.eventStore.get(eventVdom.flag),
|
691
691
|
{style} = editEventContainer;
|
692
692
|
|
@@ -219,7 +219,7 @@ class EventDragZone extends DragZone {
|
|
219
219
|
endDate = me.newEndDate;
|
220
220
|
startDate = me.newStartDate || record.startDate
|
221
221
|
} else {
|
222
|
-
startDate = new Date(VDomUtil.
|
222
|
+
startDate = new Date(VDomUtil.find(owner.vdom, me.proxyParentId).vdom.flag + 'T00:00:00.000Z');
|
223
223
|
startDate.setHours(me.axisStartTime);
|
224
224
|
startDate.setMinutes(me.currentInterval * me.intervalSize);
|
225
225
|
|
@@ -187,8 +187,8 @@ class TimeAxisComponent extends Component {
|
|
187
187
|
html = i === 24 ? '00:00' : (i < 10 ? '0' : '') + i + ':00';
|
188
188
|
|
189
189
|
vdom.cn.push({
|
190
|
-
cls
|
191
|
-
cn
|
190
|
+
cls: ['neo-c-w-timeaxis-item'],
|
191
|
+
cn : [{html}]
|
192
192
|
})
|
193
193
|
}
|
194
194
|
}
|
@@ -188,7 +188,7 @@ class DragDrop extends Base {
|
|
188
188
|
intervalHeight = columnRect.height / intervals,
|
189
189
|
position = Math.min(columnRect.height, data.clientY - columnRect.top),
|
190
190
|
currentInterval = Math.floor(position / intervalHeight),
|
191
|
-
startDate = new Date(VDomUtil.
|
191
|
+
startDate = new Date(VDomUtil.find(owner.vdom, data.path[0].id).vdom.flag + 'T00:00:00.000Z'),
|
192
192
|
dragElement, endDate, eventDragZone, eventId, record;
|
193
193
|
|
194
194
|
me.isDragging = true;
|
@@ -216,7 +216,7 @@ class DragDrop extends Base {
|
|
216
216
|
// wait until the new event got mounted
|
217
217
|
me.timeout(50).then(() => {
|
218
218
|
eventId = owner.getEventId(record.id);
|
219
|
-
dragElement = VDomUtil.
|
219
|
+
dragElement = VDomUtil.find(owner.vdom, eventId).vdom;
|
220
220
|
|
221
221
|
eventDragZone = me.getEventDragZone({
|
222
222
|
dragElement,
|
@@ -294,7 +294,7 @@ class DragDrop extends Base {
|
|
294
294
|
|
295
295
|
me.isDragging = true;
|
296
296
|
|
297
|
-
dragElement = VDomUtil.
|
297
|
+
dragElement = VDomUtil.find(owner.vdom, data.path[0].id).vdom;
|
298
298
|
|
299
299
|
eventDragZone = me.getEventDragZone({
|
300
300
|
dragElement,
|
package/src/collection/Base.mjs
CHANGED
@@ -734,7 +734,8 @@ class Base extends CoreBase {
|
|
734
734
|
}
|
735
735
|
|
736
736
|
/**
|
737
|
-
* Returns items which match the property and value
|
737
|
+
* Returns items which match the property and value.
|
738
|
+
* Properties can contain dots for namespaces => find('vdom.id', 'neo-vnode-1')
|
738
739
|
* @param {Object|String} property
|
739
740
|
* @param {String|Number} [value] Only required in case the first param is a string
|
740
741
|
* @param {Boolean} returnFirstMatch=false
|
@@ -758,7 +759,7 @@ class Base extends CoreBase {
|
|
758
759
|
matchArray = [];
|
759
760
|
|
760
761
|
propertiesArray.forEach(([key, value]) => {
|
761
|
-
if (
|
762
|
+
if (Neo.ns(key, false, item) === value) {
|
762
763
|
matchArray.push(true)
|
763
764
|
}
|
764
765
|
});
|
@@ -770,7 +771,7 @@ class Base extends CoreBase {
|
|
770
771
|
|
771
772
|
items.push(item)
|
772
773
|
}
|
773
|
-
} else if (
|
774
|
+
} else if (Neo.ns(property, false, item) === value) {
|
774
775
|
if (returnFirstMatch) {
|
775
776
|
return item
|
776
777
|
}
|
package/src/component/Base.mjs
CHANGED
@@ -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
|
@@ -713,7 +722,7 @@ class Base extends CoreBase {
|
|
713
722
|
this.changeVdomRootKey('id', value);
|
714
723
|
|
715
724
|
oldValue && ComponentManager.unregister(oldValue);
|
716
|
-
ComponentManager.register(this)
|
725
|
+
value && ComponentManager.register(this)
|
717
726
|
}
|
718
727
|
|
719
728
|
/**
|
@@ -1346,6 +1355,21 @@ class Base extends CoreBase {
|
|
1346
1355
|
return (Neo.isNumber(oldValue) && oldValue > 0) ? (oldValue - 1) : 0
|
1347
1356
|
}
|
1348
1357
|
|
1358
|
+
/**
|
1359
|
+
* Triggered before the updateDepth config gets changed.
|
1360
|
+
* @param {Number} value
|
1361
|
+
* @param {Number} oldValue
|
1362
|
+
* @returns {Number}
|
1363
|
+
* @protected
|
1364
|
+
*/
|
1365
|
+
beforeSetUpdateDepth(value, oldValue) {
|
1366
|
+
if (oldValue === undefined) {
|
1367
|
+
return value
|
1368
|
+
}
|
1369
|
+
|
1370
|
+
return oldValue === -1 || value === -1 ? -1 : Math.max(value, oldValue)
|
1371
|
+
}
|
1372
|
+
|
1349
1373
|
/**
|
1350
1374
|
* Changes the value of a vdom object attribute or removes it in case it has no value
|
1351
1375
|
* @param {String} key
|
@@ -1393,6 +1417,22 @@ class Base extends CoreBase {
|
|
1393
1417
|
}
|
1394
1418
|
}
|
1395
1419
|
|
1420
|
+
/**
|
1421
|
+
* Convenience shortcut to create a component reference
|
1422
|
+
* @returns {Object}
|
1423
|
+
*/
|
1424
|
+
createVdomReference() {
|
1425
|
+
let me = this,
|
1426
|
+
reference = {componentId: me.id},
|
1427
|
+
vdomId = me.vdom.id;
|
1428
|
+
|
1429
|
+
if (vdomId && me.id !== vdomId) {
|
1430
|
+
reference.id = vdomId
|
1431
|
+
}
|
1432
|
+
|
1433
|
+
return reference
|
1434
|
+
}
|
1435
|
+
|
1396
1436
|
/**
|
1397
1437
|
* Unregister this instance from the ComponentManager
|
1398
1438
|
* @param {Boolean} updateParentVdom=false true to remove the component from the parent vdom => real dom
|
@@ -1473,7 +1513,7 @@ class Base extends CoreBase {
|
|
1473
1513
|
*/
|
1474
1514
|
#executeVdomUpdate(vdom, vnode, resolve, reject) {
|
1475
1515
|
let me = this,
|
1476
|
-
opts = {
|
1516
|
+
opts = {},
|
1477
1517
|
deltas;
|
1478
1518
|
|
1479
1519
|
if (Neo.currentWorker.isSharedWorker) {
|
@@ -1488,6 +1528,12 @@ class Base extends CoreBase {
|
|
1488
1528
|
me._needsVdomUpdate = false;
|
1489
1529
|
me.afterSetNeedsVdomUpdate?.(false, true);
|
1490
1530
|
|
1531
|
+
opts.vdom = ComponentManager.getVdomTree(vdom, me.updateDepth);
|
1532
|
+
opts.vnode = ComponentManager.getVnodeTree(vnode, me.updateDepth);
|
1533
|
+
|
1534
|
+
// Reset the updateDepth to the default value for the next update cycle
|
1535
|
+
me._updateDepth = me.constructor.config.updateDepth;
|
1536
|
+
|
1491
1537
|
Neo.vdom.Helper.update(opts).catch(err => {
|
1492
1538
|
me.isVdomUpdating = false;
|
1493
1539
|
console.log('Error attempting to update component dom', err, me);
|
@@ -1495,9 +1541,9 @@ class Base extends CoreBase {
|
|
1495
1541
|
reject?.()
|
1496
1542
|
}).then(data => {
|
1497
1543
|
me.isVdomUpdating = false;
|
1544
|
+
|
1498
1545
|
// checking if the component got destroyed before the update cycle is done
|
1499
1546
|
if (me.id) {
|
1500
|
-
// console.log('Component vnode updated', data);
|
1501
1547
|
me.vnode = data.vnode;
|
1502
1548
|
|
1503
1549
|
deltas = data.deltas;
|
@@ -1763,8 +1809,7 @@ class Base extends CoreBase {
|
|
1763
1809
|
* @returns {Object}
|
1764
1810
|
*/
|
1765
1811
|
getVdomChild(id, vdom=this.vdom) {
|
1766
|
-
|
1767
|
-
return node?.vdom
|
1812
|
+
return VDomUtil.find(vdom, id)?.vdom
|
1768
1813
|
}
|
1769
1814
|
|
1770
1815
|
/**
|
@@ -2206,7 +2251,7 @@ class Base extends CoreBase {
|
|
2206
2251
|
parentId : autoMount ? me.getMountedParentId() : undefined,
|
2207
2252
|
parentIndex: autoMount ? me.getMountedParentIndex() : undefined,
|
2208
2253
|
windowId : me.windowId,
|
2209
|
-
...me.vdom
|
2254
|
+
...ComponentManager.getVdomTree(me.vdom)
|
2210
2255
|
});
|
2211
2256
|
|
2212
2257
|
me.onRender(data, useVdomWorker ? autoMount : false);
|
@@ -2296,7 +2341,7 @@ class Base extends CoreBase {
|
|
2296
2341
|
* hideMode: 'visibility' uses css visibility.
|
2297
2342
|
*/
|
2298
2343
|
show() {
|
2299
|
-
|
2344
|
+
let me = this;
|
2300
2345
|
|
2301
2346
|
if (me.hideMode !== 'visibility') {
|
2302
2347
|
delete me.vdom.removeDom;
|
@@ -2323,7 +2368,7 @@ class Base extends CoreBase {
|
|
2323
2368
|
* @param {Object} [vdom=this.vdom]
|
2324
2369
|
* @param {Boolean} force=false
|
2325
2370
|
*/
|
2326
|
-
syncVdomIds(vnode
|
2371
|
+
syncVdomIds(vnode=this.vnode, vdom=this.vdom, force=false) {
|
2327
2372
|
VDomUtil.syncVdomIds(vnode, vdom, force)
|
2328
2373
|
}
|
2329
2374
|
|
@@ -2335,8 +2380,10 @@ class Base extends CoreBase {
|
|
2335
2380
|
* @param {Neo.vdom.VNode} [vnode=this.vnode]
|
2336
2381
|
*/
|
2337
2382
|
syncVnodeTree(vnode=this.vnode) {
|
2338
|
-
let me
|
2339
|
-
|
2383
|
+
let me = this,
|
2384
|
+
childComponents = ComponentManager.getChildren(me),
|
2385
|
+
debug = false,
|
2386
|
+
map = {},
|
2340
2387
|
childVnode, start;
|
2341
2388
|
|
2342
2389
|
if (debug) {
|
@@ -2345,12 +2392,30 @@ class Base extends CoreBase {
|
|
2345
2392
|
|
2346
2393
|
me.syncVdomIds();
|
2347
2394
|
|
2395
|
+
if (vnode && me.id !== vnode.id) {
|
2396
|
+
ComponentManager.registerWrapperNode(vnode.id, me)
|
2397
|
+
}
|
2398
|
+
|
2399
|
+
// we need one separate iteration first to ensure all wrapper nodes get registered
|
2400
|
+
childComponents.forEach(component => {
|
2401
|
+
childVnode = VNodeUtil.findChildVnode(me.vnode, component.vdom.id)?.vnode;
|
2402
|
+
|
2403
|
+
if (childVnode) {
|
2404
|
+
map[component.id] = childVnode;
|
2405
|
+
|
2406
|
+
if (component.id !== childVnode.id) {
|
2407
|
+
ComponentManager.registerWrapperNode(childVnode.id, component)
|
2408
|
+
}
|
2409
|
+
}
|
2410
|
+
});
|
2411
|
+
|
2348
2412
|
// delegate the latest node updates to all possible child components found inside the vnode tree
|
2349
|
-
|
2350
|
-
childVnode =
|
2413
|
+
childComponents.forEach(component => {
|
2414
|
+
childVnode = map[component.id];
|
2351
2415
|
|
2352
2416
|
if (childVnode) {
|
2353
|
-
|
2417
|
+
// silent update
|
2418
|
+
component._vnode = ComponentManager.addVnodeComponentReferences(childVnode, component.id);
|
2354
2419
|
|
2355
2420
|
if (!component.rendered) {
|
2356
2421
|
component._rendered = true;
|
@@ -2363,28 +2428,8 @@ class Base extends CoreBase {
|
|
2363
2428
|
}
|
2364
2429
|
});
|
2365
2430
|
|
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
|
-
});
|
2431
|
+
// silent update
|
2432
|
+
me._vnode = vnode ? ComponentManager.addVnodeComponentReferences(vnode, me.id) : null;
|
2388
2433
|
|
2389
2434
|
debug && console.log('syncVnodeTree', me.id, performance.now() - start)
|
2390
2435
|
}
|
@@ -2472,7 +2517,7 @@ class Base extends CoreBase {
|
|
2472
2517
|
opts, vdom, vnode, vnodeStyle;
|
2473
2518
|
|
2474
2519
|
if (delta) {
|
2475
|
-
vdom = VDomUtil.
|
2520
|
+
vdom = VDomUtil.find(me.vdom, id);
|
2476
2521
|
vnode = me.vnode && VNodeUtil.findChildVnode(me.vnode, id);
|
2477
2522
|
|
2478
2523
|
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));
|
@@ -358,6 +358,11 @@ class MonacoEditor extends Base {
|
|
358
358
|
scrollBeyondLastLine: me.scrollBeyondLastLine,
|
359
359
|
theme : me.editorTheme,
|
360
360
|
value : me.stringifyValue(me.value),
|
361
|
+
|
362
|
+
scrollbar: {
|
363
|
+
alwaysConsumeMouseWheel: false // enables page scrolling when over-scrolling the content box
|
364
|
+
},
|
365
|
+
|
361
366
|
...me.options
|
362
367
|
}
|
363
368
|
}
|
package/src/container/Base.mjs
CHANGED
@@ -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 : {
|