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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.38.0'
23
+ * @member {String} version='8.39.1'
24
24
  */
25
- version: '8.38.0'
25
+ version: '8.39.1'
26
26
  }
27
27
 
28
28
  /**
@@ -16,7 +16,7 @@
16
16
  "@type": "Organization",
17
17
  "name": "Neo.mjs"
18
18
  },
19
- "datePublished": "2025-04-03",
19
+ "datePublished": "2025-04-05",
20
20
  "publisher": {
21
21
  "@type": "Organization",
22
22
  "name": "Neo.mjs"
@@ -107,7 +107,7 @@ class FooterContainer extends Container {
107
107
  }, {
108
108
  module: Component,
109
109
  cls : ['neo-version'],
110
- html : 'v8.38.0'
110
+ html : 'v8.39.1'
111
111
  }]
112
112
  }],
113
113
  /**
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.38.0'
23
+ * @member {String} version='8.39.1'
24
24
  */
25
- version: '8.38.0'
25
+ version: '8.39.1'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "8.38.0",
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.0",
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",
@@ -263,12 +263,12 @@ const DefaultConfig = {
263
263
  useVdomWorker: true,
264
264
  /**
265
265
  * buildScripts/injectPackageVersion.mjs will update this value
266
- * @default '8.38.0'
266
+ * @default '8.39.1'
267
267
  * @memberOf! module:Neo
268
268
  * @name config.version
269
269
  * @type String
270
270
  */
271
- version: '8.38.0'
271
+ version: '8.39.1'
272
272
  };
273
273
 
274
274
  Object.assign(DefaultConfig, {
@@ -1,6 +1,5 @@
1
- import Base from '../core/Base.mjs';
2
- import Logger from '../util/Logger.mjs';
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.includes('.')) {
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
- rendererOutput = column.renderer.call(column.rendererScope || column, {
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,
@@ -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 column instance
30
- * @member {Neo.core.Base|null} rendererScope=null
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
@@ -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 = tableContainer.store?.model, // todo: remove as soon as all tables use stores (examples table)
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
  }
@@ -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
- navigator.serviceWorker.addEventListener('controllerchange', function() {
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