neo.mjs 8.38.0 → 8.39.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/home/FooterContainer.mjs +1 -1
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +2 -2
- package/src/DefaultConfig.mjs +2 -2
- package/src/data/RecordFactory.mjs +11 -9
- package/src/grid/View.mjs +17 -1
- package/src/grid/column/Base.mjs +3 -6
- package/src/grid/column/Component.mjs +5 -0
- package/src/table/View.mjs +9 -1
- package/src/worker/Manager.mjs +2 -1
package/apps/ServiceWorker.mjs
CHANGED
package/apps/portal/index.html
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "8.
|
3
|
+
"version": "8.39.1",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -56,7 +56,7 @@
|
|
56
56
|
"envinfo": "^7.14.0",
|
57
57
|
"fs-extra": "^11.3.0",
|
58
58
|
"highlightjs-line-numbers.js": "^2.9.0",
|
59
|
-
"inquirer": "^12.5.
|
59
|
+
"inquirer": "^12.5.2",
|
60
60
|
"marked": "^15.0.7",
|
61
61
|
"monaco-editor": "0.50.0",
|
62
62
|
"neo-jsdoc": "1.0.1",
|
package/src/DefaultConfig.mjs
CHANGED
@@ -263,12 +263,12 @@ const DefaultConfig = {
|
|
263
263
|
useVdomWorker: true,
|
264
264
|
/**
|
265
265
|
* buildScripts/injectPackageVersion.mjs will update this value
|
266
|
-
* @default '8.
|
266
|
+
* @default '8.39.1'
|
267
267
|
* @memberOf! module:Neo
|
268
268
|
* @name config.version
|
269
269
|
* @type String
|
270
270
|
*/
|
271
|
-
version: '8.
|
271
|
+
version: '8.39.1'
|
272
272
|
};
|
273
273
|
|
274
274
|
Object.assign(DefaultConfig, {
|
@@ -1,6 +1,5 @@
|
|
1
|
-
import Base
|
2
|
-
import
|
3
|
-
import Model from './Model.mjs';
|
1
|
+
import Base from '../core/Base.mjs';
|
2
|
+
import Model from './Model.mjs';
|
4
3
|
|
5
4
|
const
|
6
5
|
dataSymbol = Symbol.for('data'),
|
@@ -166,15 +165,10 @@ class RecordFactory extends Base {
|
|
166
165
|
isModifiedField(fieldName) {
|
167
166
|
let me = this;
|
168
167
|
|
169
|
-
// Check if the field getter does exist
|
170
|
-
if (!Object.hasOwn(me.__proto__, fieldName)) {
|
171
|
-
Logger.logError('The record does not contain the field', fieldName, me)
|
172
|
-
}
|
173
|
-
|
174
168
|
if (model.trackModifiedFields) {
|
175
169
|
let dataScope, originalDataScope;
|
176
170
|
|
177
|
-
if (model.hasNestedFields && fieldName
|
171
|
+
if (model.hasNestedFields && fieldName?.includes('.')) {
|
178
172
|
let nsArray = fieldName.split('.');
|
179
173
|
|
180
174
|
fieldName = nsArray.pop();
|
@@ -185,6 +179,14 @@ class RecordFactory extends Base {
|
|
185
179
|
originalDataScope = me[originalDataSymbol]
|
186
180
|
}
|
187
181
|
|
182
|
+
// Check if the field exists
|
183
|
+
if (
|
184
|
+
!model.getField(fieldName) && // Check for leaf fields (could be excluded inside the real data)
|
185
|
+
!Object.hasOwn(dataScope, fieldName) // Check the data tree
|
186
|
+
) {
|
187
|
+
console.error('The record does not contain the field', fieldName, me)
|
188
|
+
}
|
189
|
+
|
188
190
|
return !Neo.isEqual(dataScope[fieldName], originalDataScope[fieldName])
|
189
191
|
}
|
190
192
|
|
package/src/grid/View.mjs
CHANGED
@@ -431,10 +431,26 @@ class GridView extends Component {
|
|
431
431
|
cellCls = ['neo-grid-cell'],
|
432
432
|
colspan = record[me.colspanField],
|
433
433
|
{dataField} = column,
|
434
|
+
{model} = store,
|
434
435
|
fieldValue = record[dataField],
|
435
436
|
cellConfig, rendererOutput;
|
436
437
|
|
437
|
-
|
438
|
+
if (!model.getField(dataField)) {
|
439
|
+
let nsArray = dataField.split('.'),
|
440
|
+
fieldName = nsArray.pop();
|
441
|
+
|
442
|
+
fieldValue = Neo.ns(nsArray, false, record[Symbol.for('data')])?.[fieldName]
|
443
|
+
}
|
444
|
+
|
445
|
+
if (fieldValue === null || fieldValue === undefined) {
|
446
|
+
fieldValue = ''
|
447
|
+
}
|
448
|
+
|
449
|
+
if (column.rendererScope === 'me' || column.rendererScope === 'this') {
|
450
|
+
column.rendererScope = column;
|
451
|
+
}
|
452
|
+
|
453
|
+
rendererOutput = column.renderer.call(column.rendererScope || me, {
|
438
454
|
column,
|
439
455
|
columnIndex,
|
440
456
|
dataField,
|
package/src/grid/column/Base.mjs
CHANGED
@@ -26,8 +26,9 @@ class Column extends Base {
|
|
26
26
|
renderer_: 'cellRenderer',
|
27
27
|
/**
|
28
28
|
* Scope to execute the column renderer.
|
29
|
-
* Defaults to the
|
30
|
-
*
|
29
|
+
* Defaults to the grid.View.
|
30
|
+
* You can pass the strings 'this' or 'me'
|
31
|
+
* @member {Neo.core.Base|String|null} rendererScope=null
|
31
32
|
*/
|
32
33
|
rendererScope: null,
|
33
34
|
/**
|
@@ -74,10 +75,6 @@ class Column extends Base {
|
|
74
75
|
* @returns {*}
|
75
76
|
*/
|
76
77
|
cellRenderer({value}) {
|
77
|
-
if (value === null || value === undefined) {
|
78
|
-
return ''
|
79
|
-
}
|
80
|
-
|
81
78
|
return value
|
82
79
|
}
|
83
80
|
}
|
@@ -29,6 +29,11 @@ class Component extends Column {
|
|
29
29
|
* @member {String} recordProperty='record'
|
30
30
|
*/
|
31
31
|
recordProperty: 'record',
|
32
|
+
/**
|
33
|
+
* @member {String} rendererScope='this'
|
34
|
+
* @protected
|
35
|
+
*/
|
36
|
+
rendererScope: 'this',
|
32
37
|
/**
|
33
38
|
* @member {String} type='component'
|
34
39
|
* @protected
|
package/src/table/View.mjs
CHANGED
@@ -128,11 +128,19 @@ class View extends Component {
|
|
128
128
|
cellCls = ['neo-table-cell'],
|
129
129
|
colspan = record[me.colspanField],
|
130
130
|
{dataField} = column,
|
131
|
+
{model} = me.store,
|
131
132
|
fieldValue = record[dataField],
|
132
|
-
hasStore =
|
133
|
+
hasStore = !!model, // todo: remove as soon as all tables use stores (examples table)
|
133
134
|
{vdom} = me,
|
134
135
|
cellConfig, rendererOutput;
|
135
136
|
|
137
|
+
if (!model?.getField(dataField)) {
|
138
|
+
let nsArray = dataField.split('.'),
|
139
|
+
fieldName = nsArray.pop();
|
140
|
+
|
141
|
+
fieldValue = Neo.ns(nsArray, false, record[Symbol.for('data')])?.[fieldName]
|
142
|
+
}
|
143
|
+
|
136
144
|
if (fieldValue === null || fieldValue === undefined) {
|
137
145
|
fieldValue = ''
|
138
146
|
}
|
package/src/worker/Manager.mjs
CHANGED
@@ -8,7 +8,8 @@ import RemoteMethodAccess from './mixin/RemoteMethodAccess.mjs';
|
|
8
8
|
const NeoConfig = Neo.config,
|
9
9
|
devMode = NeoConfig.environment === 'development';
|
10
10
|
|
11
|
-
|
11
|
+
// Using ?. since SWs do not exist for http (only https)
|
12
|
+
navigator.serviceWorker?.addEventListener('controllerchange', function() {
|
12
13
|
window.location.reload()
|
13
14
|
}, {once: true});
|
14
15
|
|