neo.mjs 8.37.0 → 8.39.0
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/home/FooterContainer.mjs +1 -1
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +1 -1
- package/src/DefaultConfig.mjs +2 -2
- package/src/data/RecordFactory.mjs +25 -21
- package/src/grid/View.mjs +12 -0
- package/src/grid/column/Base.mjs +0 -4
- package/src/table/View.mjs +9 -1
- package/src/worker/Manager.mjs +2 -1
package/apps/ServiceWorker.mjs
CHANGED
package/package.json
CHANGED
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.0'
|
267
267
|
* @memberOf! module:Neo
|
268
268
|
* @name config.version
|
269
269
|
* @type String
|
270
270
|
*/
|
271
|
-
version: '8.
|
271
|
+
version: '8.39.0'
|
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'),
|
@@ -83,9 +82,9 @@ class RecordFactory extends Base {
|
|
83
82
|
},
|
84
83
|
set(value) {
|
85
84
|
instance.setRecordFields({
|
86
|
-
fields: {[fieldPath]: instance.parseRecordValue(this, field, value)},
|
85
|
+
fields: {[fieldPath]: instance.parseRecordValue({record: this, field, value})},
|
87
86
|
model,
|
88
|
-
record: this
|
87
|
+
record: this
|
89
88
|
})
|
90
89
|
}
|
91
90
|
}
|
@@ -152,10 +151,11 @@ class RecordFactory extends Base {
|
|
152
151
|
if (model.trackModifiedFields) {
|
153
152
|
me[originalDataSymbol] = {};
|
154
153
|
me.setOriginal(config)
|
154
|
+
} else {
|
155
|
+
me[isModifiedSymbol] = false
|
155
156
|
}
|
156
157
|
|
157
158
|
me.setSilent(config); // We do not want to fire change events when constructing
|
158
|
-
me[isModifiedSymbol] = false
|
159
159
|
}
|
160
160
|
|
161
161
|
/**
|
@@ -165,15 +165,10 @@ class RecordFactory extends Base {
|
|
165
165
|
isModifiedField(fieldName) {
|
166
166
|
let me = this;
|
167
167
|
|
168
|
-
// Check if the field getter does exist
|
169
|
-
if (!Object.hasOwn(me.__proto__, fieldName)) {
|
170
|
-
Logger.logError('The record does not contain the field', fieldName, me)
|
171
|
-
}
|
172
|
-
|
173
168
|
if (model.trackModifiedFields) {
|
174
169
|
let dataScope, originalDataScope;
|
175
170
|
|
176
|
-
if (model.hasNestedFields && fieldName
|
171
|
+
if (model.hasNestedFields && fieldName?.includes('.')) {
|
177
172
|
let nsArray = fieldName.split('.');
|
178
173
|
|
179
174
|
fieldName = nsArray.pop();
|
@@ -184,6 +179,14 @@ class RecordFactory extends Base {
|
|
184
179
|
originalDataScope = me[originalDataSymbol]
|
185
180
|
}
|
186
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
|
+
|
187
190
|
return !Neo.isEqual(dataScope[fieldName], originalDataScope[fieldName])
|
188
191
|
}
|
189
192
|
|
@@ -272,16 +275,17 @@ class RecordFactory extends Base {
|
|
272
275
|
}
|
273
276
|
|
274
277
|
/**
|
275
|
-
*
|
276
|
-
* @param {Object}
|
277
|
-
* @param {Object}
|
278
|
-
* @param {*}
|
279
|
-
* @param {Object}
|
278
|
+
* @param {Object} data
|
279
|
+
* @param {Object} data.record
|
280
|
+
* @param {Object} data.field
|
281
|
+
* @param {*} [data.value=null]
|
282
|
+
* @param {Object} [data.recordConfig=null]
|
283
|
+
* @param {Boolean} [data.useOriginalData=false]
|
280
284
|
* @returns {*}
|
281
285
|
*/
|
282
|
-
parseRecordValue(record, field, value=null, recordConfig=null) {
|
286
|
+
parseRecordValue({record, field, value=null, recordConfig=null, useOriginalData=false}) {
|
283
287
|
if (field.calculate) {
|
284
|
-
return field.calculate(record, field
|
288
|
+
return field.calculate(record[useOriginalData ? originalDataSymbol : dataSymbol], field)
|
285
289
|
}
|
286
290
|
|
287
291
|
if (field.convert) {
|
@@ -411,7 +415,7 @@ class RecordFactory extends Base {
|
|
411
415
|
})
|
412
416
|
} else if (fieldExists) {
|
413
417
|
oldValue = record[key];
|
414
|
-
value = me.parseRecordValue(record, model.getField(key), value);
|
418
|
+
value = me.parseRecordValue({record, field: model.getField(key), value});
|
415
419
|
|
416
420
|
if (!Neo.isEqual(oldValue, value)) {
|
417
421
|
me.setRecordData({fieldName: key, model, record, useOriginalData, value});
|
@@ -430,7 +434,7 @@ class RecordFactory extends Base {
|
|
430
434
|
if (hasChangedFields) {
|
431
435
|
calculatedFieldsMap.forEach((value, key) => {
|
432
436
|
oldValue = record[key];
|
433
|
-
value = me.parseRecordValue(record, model.getField(key));
|
437
|
+
value = me.parseRecordValue({record, field: model.getField(key), useOriginalData});
|
434
438
|
|
435
439
|
if (!Neo.isEqual(oldValue, value)) {
|
436
440
|
me.setRecordData({fieldName: key, model, record, useOriginalData, value});
|
package/src/grid/View.mjs
CHANGED
@@ -431,9 +431,21 @@ 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
|
|
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
|
+
|
437
449
|
rendererOutput = column.renderer.call(column.rendererScope || column, {
|
438
450
|
column,
|
439
451
|
columnIndex,
|
package/src/grid/column/Base.mjs
CHANGED
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
|
|