neo.mjs 10.0.0-alpha.5 → 10.0.0-beta.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/ServiceWorker.mjs +2 -2
- package/apps/portal/index.html +1 -1
- package/apps/portal/resources/data/examples_devmode.json +26 -27
- package/apps/portal/resources/data/examples_dist_dev.json +26 -27
- package/apps/portal/resources/data/examples_dist_esm.json +26 -27
- package/apps/portal/resources/data/examples_dist_prod.json +27 -28
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/portal/view/learn/ContentComponent.mjs +102 -111
- package/examples/table/cellEditing/MainContainer.mjs +1 -1
- package/examples/table/container/MainContainer.mjs +3 -3
- package/examples/table/nestedRecordFields/Viewport.mjs +6 -6
- package/examples/tableFiltering/MainContainer.mjs +1 -1
- package/examples/tablePerformance/MainContainer.mjs +1 -1
- package/examples/tablePerformance/MainContainer2.mjs +1 -1
- package/examples/tablePerformance/MainContainer3.mjs +2 -2
- package/examples/tableStore/MainContainer.mjs +2 -2
- package/learn/UsingTheseTopics.md +2 -2
- package/learn/benefits/ConfigSystem.md +2 -2
- package/learn/benefits/FormsEngine.md +14 -14
- package/learn/benefits/MultiWindow.md +2 -2
- package/learn/benefits/OffTheMainThread.md +2 -2
- package/learn/benefits/Speed.md +2 -2
- package/learn/gettingstarted/ComponentModels.md +4 -4
- package/learn/gettingstarted/Config.md +6 -6
- package/learn/gettingstarted/DescribingTheUI.md +4 -4
- package/learn/gettingstarted/Events.md +6 -6
- package/learn/gettingstarted/Extending.md +4 -4
- package/learn/gettingstarted/References.md +6 -6
- package/learn/gettingstarted/Workspaces.md +6 -6
- package/learn/guides/ApplicationBootstrap.md +26 -26
- package/learn/guides/ComponentsAndContainers.md +12 -12
- package/learn/guides/CustomComponents.md +2 -2
- package/learn/guides/MainThreadAddonIntro.md +2 -2
- package/learn/guides/PortalApp.md +2 -2
- package/learn/guides/StateProviders.md +12 -12
- package/learn/guides/events/CustomEvents.md +16 -16
- package/learn/guides/events/DomEvents.md +12 -12
- package/learn/javascript/ClassFeatures.md +3 -2
- package/learn/javascript/Classes.md +8 -8
- package/learn/javascript/NewNode.md +4 -4
- package/learn/javascript/Overrides.md +8 -8
- package/learn/javascript/Super.md +10 -8
- package/learn/tutorials/Earthquakes.md +54 -57
- package/learn/tutorials/TodoList.md +4 -4
- package/package.json +1 -1
- package/resources/scss/src/apps/portal/learn/ContentComponent.scss +12 -0
- package/resources/scss/src/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/src/table/plugin/CellEditing.scss +1 -1
- package/resources/scss/theme-dark/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/theme-light/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/theme-neo-light/Global.scss +1 -2
- package/resources/scss/theme-neo-light/table/{View.scss → Body.scss} +1 -1
- package/src/DefaultConfig.mjs +2 -2
- package/src/core/Base.mjs +59 -12
- package/src/core/Util.mjs +14 -2
- package/src/draggable/grid/header/toolbar/SortZone.mjs +21 -21
- package/src/draggable/table/header/toolbar/SortZone.mjs +1 -1
- package/src/grid/Body.mjs +2 -3
- package/src/grid/_export.mjs +1 -1
- package/src/main/addon/AmCharts.mjs +8 -11
- package/src/main/addon/Base.mjs +150 -42
- package/src/main/addon/GoogleMaps.mjs +9 -16
- package/src/main/addon/HighlightJS.mjs +2 -13
- package/src/main/addon/IntersectionObserver.mjs +21 -21
- package/src/main/addon/MonacoEditor.mjs +1 -6
- package/src/table/{View.mjs → Body.mjs} +19 -20
- package/src/table/Container.mjs +43 -43
- package/src/table/_export.mjs +2 -2
- package/src/table/plugin/CellEditing.mjs +19 -19
- package/src/vdom/Helper.mjs +9 -12
- package/src/worker/Base.mjs +1 -1
- package/src/worker/mixin/RemoteMethodAccess.mjs +1 -1
@@ -5,25 +5,25 @@ import RowModel from '../selection/table/RowModel.mjs';
|
|
5
5
|
import VDomUtil from '../util/VDom.mjs';
|
6
6
|
|
7
7
|
/**
|
8
|
-
* @class Neo.table.
|
8
|
+
* @class Neo.table.Body
|
9
9
|
* @extends Neo.component.Base
|
10
10
|
*/
|
11
|
-
class
|
11
|
+
class TableBody extends Component {
|
12
12
|
static config = {
|
13
13
|
/**
|
14
|
-
* @member {String} className='Neo.table.
|
14
|
+
* @member {String} className='Neo.table.Body'
|
15
15
|
* @protected
|
16
16
|
*/
|
17
|
-
className: 'Neo.table.
|
17
|
+
className: 'Neo.table.Body',
|
18
18
|
/**
|
19
|
-
* @member {String} ntype='table-
|
19
|
+
* @member {String} ntype='table-body'
|
20
20
|
* @protected
|
21
21
|
*/
|
22
|
-
ntype: 'table-
|
22
|
+
ntype: 'table-body',
|
23
23
|
/**
|
24
|
-
* @member {String[]} baseCls=['neo-table-
|
24
|
+
* @member {String[]} baseCls=['neo-table-body']
|
25
25
|
*/
|
26
|
-
baseCls: ['neo-table-
|
26
|
+
baseCls: ['neo-table-body'],
|
27
27
|
/**
|
28
28
|
* Define which model field contains the value of colspan definitions
|
29
29
|
* @member {String} colspanField='colspan'
|
@@ -132,18 +132,17 @@ class View extends Component {
|
|
132
132
|
}
|
133
133
|
|
134
134
|
/**
|
135
|
-
* @param {Object}
|
136
|
-
* @param {String}
|
137
|
-
* @param {Object}
|
138
|
-
* @param {Number}
|
139
|
-
* @param {Object}
|
140
|
-
* @param {Number}
|
135
|
+
* @param {Object} data
|
136
|
+
* @param {String} [data.cellId]
|
137
|
+
* @param {Object} data.column
|
138
|
+
* @param {Number} data.columnIndex
|
139
|
+
* @param {Object} data.record
|
140
|
+
* @param {Number} data.rowIndex
|
141
141
|
* @param {Neo.table.Container} data.tableContainer
|
142
142
|
* @returns {Object}
|
143
143
|
*/
|
144
|
-
applyRendererOutput(
|
145
|
-
let
|
146
|
-
me = this,
|
144
|
+
applyRendererOutput({cellId, column, columnIndex, record, rowIndex, tableContainer}) {
|
145
|
+
let me = this,
|
147
146
|
cellCls = ['neo-table-cell'],
|
148
147
|
colspan = record[me.colspanField],
|
149
148
|
{dataField} = column,
|
@@ -382,7 +381,7 @@ class View extends Component {
|
|
382
381
|
dataField = me.getCellDataField(id),
|
383
382
|
record = me.getRecord(id);
|
384
383
|
|
385
|
-
me.parent.fire(eventName, {data, dataField, record
|
384
|
+
me.parent.fire(eventName, {body: me, data, dataField, record})
|
386
385
|
}
|
387
386
|
|
388
387
|
/**
|
@@ -394,7 +393,7 @@ class View extends Component {
|
|
394
393
|
id = data.currentTarget,
|
395
394
|
record = me.getRecord(id);
|
396
395
|
|
397
|
-
me.parent.fire(eventName, {data, record
|
396
|
+
me.parent.fire(eventName, {body: me, data, record})
|
398
397
|
}
|
399
398
|
|
400
399
|
/**
|
@@ -619,4 +618,4 @@ class View extends Component {
|
|
619
618
|
}
|
620
619
|
}
|
621
620
|
|
622
|
-
export default Neo.setupClass(
|
621
|
+
export default Neo.setupClass(TableBody);
|
package/src/table/Container.mjs
CHANGED
@@ -3,7 +3,7 @@ import ClassSystemUtil from '../util/ClassSystem.mjs';
|
|
3
3
|
import CssUtil from '../util/Css.mjs';
|
4
4
|
import NeoArray from '../util/Array.mjs';
|
5
5
|
import Store from '../data/Store.mjs';
|
6
|
-
import
|
6
|
+
import TableBody from './Body.mjs';
|
7
7
|
import * as header from './header/_export.mjs';
|
8
8
|
|
9
9
|
/**
|
@@ -26,6 +26,16 @@ class Container extends BaseContainer {
|
|
26
26
|
* @member {String[]} baseCls=['neo-table-container']
|
27
27
|
*/
|
28
28
|
baseCls: ['neo-table-container'],
|
29
|
+
/**
|
30
|
+
* Configs for Neo.table.Body
|
31
|
+
* @member {Object|null} [bodyConfig=null]
|
32
|
+
*/
|
33
|
+
bodyConfig: null,
|
34
|
+
/**
|
35
|
+
* @member {String|null} bodyId_=null
|
36
|
+
* @protected
|
37
|
+
*/
|
38
|
+
bodyId_: null,
|
29
39
|
/**
|
30
40
|
* true uses table.plugin.CellEditing
|
31
41
|
* @member {Boolean} cellEditing_=false
|
@@ -75,16 +85,6 @@ class Container extends BaseContainer {
|
|
75
85
|
* @member {Boolean} useCustomScrollbars_=true
|
76
86
|
*/
|
77
87
|
useCustomScrollbars_: true,
|
78
|
-
/**
|
79
|
-
* Configs for Neo.table.View
|
80
|
-
* @member {Object|null} [viewConfig=null]
|
81
|
-
*/
|
82
|
-
viewConfig: null,
|
83
|
-
/**
|
84
|
-
* @member {String|null} viewId_=null
|
85
|
-
* @protected
|
86
|
-
*/
|
87
|
-
viewId_: null,
|
88
88
|
/**
|
89
89
|
* @member {Array|null} items=null
|
90
90
|
* @protected
|
@@ -100,19 +100,19 @@ class Container extends BaseContainer {
|
|
100
100
|
}
|
101
101
|
|
102
102
|
/**
|
103
|
-
* Convenience method to access the Neo.table.
|
104
|
-
* @returns {Neo.table.
|
103
|
+
* Convenience method to access the Neo.table.Body
|
104
|
+
* @returns {Neo.table.Body|null}
|
105
105
|
*/
|
106
|
-
get
|
107
|
-
return Neo.getComponent(this.
|
106
|
+
get body() {
|
107
|
+
return Neo.getComponent(this.bodyId) || Neo.get(this.bodyId)
|
108
108
|
}
|
109
109
|
|
110
110
|
/**
|
111
|
-
* Convenience method to access the Neo.table.
|
112
|
-
* @returns {Neo.table.
|
111
|
+
* Convenience method to access the Neo.table.header.Toolbar
|
112
|
+
* @returns {Neo.table.header.Toolbar|null}
|
113
113
|
*/
|
114
|
-
get
|
115
|
-
return Neo.getComponent(this.
|
114
|
+
get headerToolbar() {
|
115
|
+
return Neo.getComponent(this.headerToolbarId) || Neo.get(this.headerToolbarId)
|
116
116
|
}
|
117
117
|
|
118
118
|
/**
|
@@ -123,8 +123,8 @@ class Container extends BaseContainer {
|
|
123
123
|
|
124
124
|
let me = this;
|
125
125
|
|
126
|
+
me.bodyId = Neo.getId('table-body');
|
126
127
|
me.headerToolbarId = Neo.getId('table-header-toolbar');
|
127
|
-
me.viewId = Neo.getId('table-view');
|
128
128
|
|
129
129
|
me.items = [{
|
130
130
|
module : header.Toolbar,
|
@@ -133,11 +133,11 @@ class Container extends BaseContainer {
|
|
133
133
|
sortable : me.sortable,
|
134
134
|
...me.headerToolbarConfig
|
135
135
|
}, {
|
136
|
-
module :
|
136
|
+
module : TableBody,
|
137
137
|
containerId: me.id,
|
138
|
-
id : me.
|
138
|
+
id : me.bodyId,
|
139
139
|
store : me.store,
|
140
|
-
...me.
|
140
|
+
...me.bodyConfig
|
141
141
|
}];
|
142
142
|
|
143
143
|
me.vdom.id = me.getWrapperId();
|
@@ -184,7 +184,7 @@ class Container extends BaseContainer {
|
|
184
184
|
headerToolbar.createItems()
|
185
185
|
}
|
186
186
|
|
187
|
-
me.
|
187
|
+
me.body?.createViewData()
|
188
188
|
}
|
189
189
|
}
|
190
190
|
|
@@ -229,9 +229,9 @@ class Container extends BaseContainer {
|
|
229
229
|
value ?.on(listeners);
|
230
230
|
oldValue?.un(listeners);
|
231
231
|
|
232
|
-
// in case we dynamically change the store, the
|
233
|
-
if (me.
|
234
|
-
me.
|
232
|
+
// in case we dynamically change the store, the body needs to get the new reference
|
233
|
+
if (me.body) {
|
234
|
+
me.body.store = value
|
235
235
|
}
|
236
236
|
}
|
237
237
|
|
@@ -270,6 +270,16 @@ class Container extends BaseContainer {
|
|
270
270
|
me.scrollbarsCssApplied = true
|
271
271
|
}
|
272
272
|
|
273
|
+
/**
|
274
|
+
* Triggered before the bodyId config gets changed.
|
275
|
+
* @param {String} value
|
276
|
+
* @param {String} oldValue
|
277
|
+
* @protected
|
278
|
+
*/
|
279
|
+
beforeSetBodyId(value, oldValue) {
|
280
|
+
return value || oldValue
|
281
|
+
}
|
282
|
+
|
273
283
|
/**
|
274
284
|
* Triggered before the columns config gets changed.
|
275
285
|
* @param {Object[]} value
|
@@ -308,16 +318,6 @@ class Container extends BaseContainer {
|
|
308
318
|
return value
|
309
319
|
}
|
310
320
|
|
311
|
-
/**
|
312
|
-
* Triggered before the viewId config gets changed.
|
313
|
-
* @param {String} value
|
314
|
-
* @param {String} oldValue
|
315
|
-
* @protected
|
316
|
-
*/
|
317
|
-
beforeSetViewId(value, oldValue) {
|
318
|
-
return value || oldValue
|
319
|
-
}
|
320
|
-
|
321
321
|
/**
|
322
322
|
* In case you want to update multiple existing records in parallel,
|
323
323
|
* using this method is faster than updating each record one by one.
|
@@ -325,19 +325,19 @@ class Container extends BaseContainer {
|
|
325
325
|
* @param {Object[]} records
|
326
326
|
*/
|
327
327
|
bulkUpdateRecords(records) {
|
328
|
-
let {
|
328
|
+
let {body, store} = this,
|
329
329
|
{keyProperty} = store;
|
330
330
|
|
331
|
-
if (
|
332
|
-
|
331
|
+
if (body) {
|
332
|
+
body.silentVdomUpdate = true;
|
333
333
|
|
334
334
|
records.forEach(item => {
|
335
335
|
store.get(item[keyProperty])?.set(item)
|
336
336
|
});
|
337
337
|
|
338
|
-
|
338
|
+
body.silentVdomUpdate = false;
|
339
339
|
|
340
|
-
|
340
|
+
body.update()
|
341
341
|
}
|
342
342
|
}
|
343
343
|
|
@@ -426,7 +426,7 @@ class Container extends BaseContainer {
|
|
426
426
|
|
427
427
|
me.store.sort(opts);
|
428
428
|
me.removeSortingCss(opts.property);
|
429
|
-
opts.direction && me.
|
429
|
+
opts.direction && me.body.onStoreLoad()
|
430
430
|
}
|
431
431
|
|
432
432
|
/**
|
package/src/table/_export.mjs
CHANGED
@@ -69,7 +69,7 @@ class CellEditing extends Plugin {
|
|
69
69
|
me.onSelectionModelChange({value: selectionModel})
|
70
70
|
}
|
71
71
|
|
72
|
-
owner.
|
72
|
+
owner.body.keys.add({
|
73
73
|
Enter: 'onTableKeyDown',
|
74
74
|
Space: 'onTableKeyDown',
|
75
75
|
scope: me
|
@@ -109,9 +109,9 @@ class CellEditing extends Plugin {
|
|
109
109
|
|
110
110
|
let me = this,
|
111
111
|
{appName, windowId} = me,
|
112
|
-
{
|
113
|
-
cellId =
|
114
|
-
cellNode = VdomUtil.find(
|
112
|
+
{body} = me.owner,
|
113
|
+
cellId = body.getCellId(record, dataField),
|
114
|
+
cellNode = VdomUtil.find(body.vdom, cellId).vdom,
|
115
115
|
column = me.owner.headerToolbar.getColumn(dataField),
|
116
116
|
editor = me.editors[dataField],
|
117
117
|
value = record[dataField],
|
@@ -133,7 +133,7 @@ class CellEditing extends Plugin {
|
|
133
133
|
cls : me.editorCls,
|
134
134
|
dataField,
|
135
135
|
hideLabel: true,
|
136
|
-
parentId :
|
136
|
+
parentId : body.id,
|
137
137
|
record,
|
138
138
|
value,
|
139
139
|
windowId,
|
@@ -163,9 +163,9 @@ class CellEditing extends Plugin {
|
|
163
163
|
cellNode.cn = [editor.createVdomReference()];
|
164
164
|
delete cellNode.html;
|
165
165
|
|
166
|
-
|
166
|
+
body.updateDepth = -1;
|
167
167
|
|
168
|
-
await
|
168
|
+
await body.promiseUpdate();
|
169
169
|
|
170
170
|
await me.timeout(30);
|
171
171
|
|
@@ -175,13 +175,13 @@ class CellEditing extends Plugin {
|
|
175
175
|
/**
|
176
176
|
*
|
177
177
|
* @param {Object} data
|
178
|
-
* @param {
|
179
|
-
* @param {
|
180
|
-
* @param {
|
181
|
-
* @param {
|
178
|
+
* @param {Neo.table.Body} data.body
|
179
|
+
* @param {Object} data.data
|
180
|
+
* @param {String} data.dataField
|
181
|
+
* @param {Object} data.record
|
182
182
|
* @returns {Promise<void>}
|
183
183
|
*/
|
184
|
-
async onCellDoubleClick({data, dataField, record
|
184
|
+
async onCellDoubleClick({body, data, dataField, record}) {
|
185
185
|
await this.mountEditor(record, dataField)
|
186
186
|
}
|
187
187
|
|
@@ -262,12 +262,12 @@ class CellEditing extends Plugin {
|
|
262
262
|
async onTableKeyDown(data) {
|
263
263
|
let me = this,
|
264
264
|
{target} = data,
|
265
|
-
{
|
265
|
+
{body} = me.owner,
|
266
266
|
dataField, record;
|
267
267
|
|
268
268
|
if (!me.mountedEditor && target.cls?.includes('neo-selected')) {
|
269
|
-
dataField =
|
270
|
-
record =
|
269
|
+
dataField = body.getCellDataField(target.id);
|
270
|
+
record = body.getRecord(target.id);
|
271
271
|
|
272
272
|
await me.mountEditor(record, dataField)
|
273
273
|
}
|
@@ -328,13 +328,13 @@ class CellEditing extends Plugin {
|
|
328
328
|
|
329
329
|
let me = this,
|
330
330
|
record = me.mountedEditor.record,
|
331
|
-
{
|
332
|
-
rowIndex =
|
331
|
+
{body} = me.owner,
|
332
|
+
rowIndex = body.store.indexOf(record);
|
333
333
|
|
334
334
|
me.mountedEditor = null;
|
335
335
|
|
336
|
-
|
337
|
-
await
|
336
|
+
body.getVdomRoot().cn[rowIndex] = body.createRow({record, rowIndex});
|
337
|
+
await body.promiseUpdate()
|
338
338
|
}
|
339
339
|
}
|
340
340
|
|
package/src/vdom/Helper.mjs
CHANGED
@@ -38,23 +38,20 @@ class Helper extends Base {
|
|
38
38
|
}
|
39
39
|
|
40
40
|
/**
|
41
|
-
* @
|
41
|
+
* @returns {Promise<void>}
|
42
42
|
*/
|
43
|
-
|
44
|
-
super.
|
43
|
+
async initAsync() {
|
44
|
+
super.initAsync();
|
45
45
|
|
46
46
|
let me = this;
|
47
47
|
|
48
|
-
//
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
scope : me
|
54
|
-
});
|
48
|
+
// Subscribe to global Neo.config changes for dynamic renderer switching.
|
49
|
+
Neo.currentWorker.on({
|
50
|
+
neoConfigChange: me.onNeoConfigChange,
|
51
|
+
scope : me
|
52
|
+
});
|
55
53
|
|
56
|
-
|
57
|
-
})
|
54
|
+
await me.importUtil()
|
58
55
|
}
|
59
56
|
|
60
57
|
/**
|
package/src/worker/Base.mjs
CHANGED
@@ -4,7 +4,7 @@ import Message from './Message.mjs';
|
|
4
4
|
import RemoteMethodAccess from './mixin/RemoteMethodAccess.mjs';
|
5
5
|
|
6
6
|
/**
|
7
|
-
* The abstract base class for the App, Data & VDom worker
|
7
|
+
* The abstract base class for e.g. the App, Data & VDom worker
|
8
8
|
* @class Neo.worker.Base
|
9
9
|
* @extends Neo.core.Base
|
10
10
|
* @abstract
|