neo.mjs 8.36.0 → 8.38.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/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/resources/data/deck/learnneo/pages/tutorials/Earthquakes.md +3 -3
- package/src/DefaultConfig.mjs +2 -2
- package/src/data/Model.mjs +15 -4
- package/src/data/RecordFactory.mjs +38 -33
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.38.0",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -62,7 +62,7 @@
|
|
62
62
|
"neo-jsdoc": "1.0.1",
|
63
63
|
"neo-jsdoc-x": "1.0.5",
|
64
64
|
"postcss": "^8.5.3",
|
65
|
-
"sass": "^1.86.
|
65
|
+
"sass": "^1.86.3",
|
66
66
|
"siesta-lite": "5.5.2",
|
67
67
|
"url": "^0.11.4",
|
68
68
|
"webpack": "^5.98.0",
|
@@ -684,15 +684,15 @@ class Table extends Base {
|
|
684
684
|
columns: [{
|
685
685
|
dataField: "timestamp",
|
686
686
|
text: "Date",
|
687
|
-
renderer: (data) => data.value.toLocaleDateString(undefined, {weekday: "long", year: "numeric", month: "long", day: "numeric"})
|
687
|
+
renderer: (data) => data.value.toLocaleDateString(undefined, {weekday: "long", year: "numeric", month: "long", day: "numeric"})
|
688
688
|
}, {
|
689
689
|
dataField: "location",
|
690
|
-
text: "Location"
|
690
|
+
text: "Location"
|
691
691
|
}, {
|
692
692
|
dataField: "magnitude",
|
693
693
|
text: "Magnitude",
|
694
694
|
align: "right",
|
695
|
-
renderer: (data) => data.value.toLocaleString()
|
695
|
+
renderer: (data) => data.value.toLocaleString()
|
696
696
|
}],
|
697
697
|
}
|
698
698
|
}
|
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.38.0'
|
267
267
|
* @memberOf! module:Neo
|
268
268
|
* @name config.version
|
269
269
|
* @type String
|
270
270
|
*/
|
271
|
-
version: '8.
|
271
|
+
version: '8.38.0'
|
272
272
|
};
|
273
273
|
|
274
274
|
Object.assign(DefaultConfig, {
|
package/src/data/Model.mjs
CHANGED
@@ -40,6 +40,13 @@ class Model extends Base {
|
|
40
40
|
}
|
41
41
|
|
42
42
|
/**
|
43
|
+
* Internally storing all fields, which have a calculate property
|
44
|
+
* @member {Map} calculatedFieldsMap=new Map()
|
45
|
+
* @protected
|
46
|
+
*/
|
47
|
+
calculatedFieldsMap = new Map()
|
48
|
+
/**
|
49
|
+
* Internally storing all fields inside a flat map => nested fields included
|
43
50
|
* @member {Map} fieldsMap=new Map()
|
44
51
|
* @protected
|
45
52
|
*/
|
@@ -85,11 +92,12 @@ class Model extends Base {
|
|
85
92
|
* @param {String} path=''
|
86
93
|
*/
|
87
94
|
updateFieldsMap(fields, isRoot=true, path='') {
|
88
|
-
let me
|
89
|
-
{fieldsMap} = me,
|
95
|
+
let me = this,
|
96
|
+
{calculatedFieldsMap, fieldsMap} = me,
|
90
97
|
fieldName;
|
91
98
|
|
92
99
|
if (isRoot) {
|
100
|
+
calculatedFieldsMap.clear();
|
93
101
|
fieldsMap.clear();
|
94
102
|
me.hasNestedFields = false
|
95
103
|
}
|
@@ -97,12 +105,15 @@ class Model extends Base {
|
|
97
105
|
fields.forEach(field => {
|
98
106
|
fieldName = path + field.name
|
99
107
|
|
100
|
-
// Assuming that nested fields contain the full path as the name, we do not need a prefix.
|
101
108
|
if (field.fields) {
|
102
109
|
me.hasNestedFields = true;
|
103
110
|
me.updateFieldsMap(field.fields, false, field.name + '.')
|
104
111
|
} else {
|
105
|
-
fieldsMap.set(fieldName, field)
|
112
|
+
fieldsMap.set(fieldName, field);
|
113
|
+
|
114
|
+
if (field.calculate) {
|
115
|
+
calculatedFieldsMap.set(fieldName, field)
|
116
|
+
}
|
106
117
|
}
|
107
118
|
})
|
108
119
|
}
|
@@ -82,24 +82,11 @@ class RecordFactory extends Base {
|
|
82
82
|
return this[dataSymbol][fieldName]
|
83
83
|
},
|
84
84
|
set(value) {
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
if (!Neo.isEqual(value, oldValue)) {
|
91
|
-
instance.setRecordData({fieldName: fieldPath, model, record: me, value});
|
92
|
-
|
93
|
-
if (!model.trackModifiedFields) {
|
94
|
-
me[isModifiedSymbol] = true
|
95
|
-
}
|
96
|
-
|
97
|
-
instance.onRecordChange({
|
98
|
-
fields: [{name: fieldPath, oldValue, value}],
|
99
|
-
model,
|
100
|
-
record: me
|
101
|
-
})
|
102
|
-
}
|
85
|
+
instance.setRecordFields({
|
86
|
+
fields: {[fieldPath]: instance.parseRecordValue({record: this, field, value})},
|
87
|
+
model,
|
88
|
+
record: this
|
89
|
+
})
|
103
90
|
}
|
104
91
|
}
|
105
92
|
};
|
@@ -165,10 +152,11 @@ class RecordFactory extends Base {
|
|
165
152
|
if (model.trackModifiedFields) {
|
166
153
|
me[originalDataSymbol] = {};
|
167
154
|
me.setOriginal(config)
|
155
|
+
} else {
|
156
|
+
me[isModifiedSymbol] = false
|
168
157
|
}
|
169
158
|
|
170
159
|
me.setSilent(config); // We do not want to fire change events when constructing
|
171
|
-
me[isModifiedSymbol] = false
|
172
160
|
}
|
173
161
|
|
174
162
|
/**
|
@@ -285,16 +273,17 @@ class RecordFactory extends Base {
|
|
285
273
|
}
|
286
274
|
|
287
275
|
/**
|
288
|
-
*
|
289
|
-
* @param {Object}
|
290
|
-
* @param {Object}
|
291
|
-
* @param {*}
|
292
|
-
* @param {Object}
|
276
|
+
* @param {Object} data
|
277
|
+
* @param {Object} data.record
|
278
|
+
* @param {Object} data.field
|
279
|
+
* @param {*} [data.value=null]
|
280
|
+
* @param {Object} [data.recordConfig=null]
|
281
|
+
* @param {Boolean} [data.useOriginalData=false]
|
293
282
|
* @returns {*}
|
294
283
|
*/
|
295
|
-
parseRecordValue(record, field, value, recordConfig=null) {
|
284
|
+
parseRecordValue({record, field, value=null, recordConfig=null, useOriginalData=false}) {
|
296
285
|
if (field.calculate) {
|
297
|
-
return field.calculate(record, field
|
286
|
+
return field.calculate(record[useOriginalData ? originalDataSymbol : dataSymbol], field)
|
298
287
|
}
|
299
288
|
|
300
289
|
if (field.convert) {
|
@@ -400,8 +389,9 @@ class RecordFactory extends Base {
|
|
400
389
|
* @param {Boolean} data.useOriginalData=false true will apply changes to the originalData symbol
|
401
390
|
*/
|
402
391
|
setRecordFields({changedFields=[], fields, model, record, silent=false, useOriginalData=false}) {
|
403
|
-
let
|
404
|
-
|
392
|
+
let me = this,
|
393
|
+
{calculatedFieldsMap, fieldsMap, trackModifiedFields} = model,
|
394
|
+
fieldExists, hasChangedFields, oldValue;
|
405
395
|
|
406
396
|
if (!trackModifiedFields && useOriginalData) {
|
407
397
|
return
|
@@ -412,7 +402,7 @@ class RecordFactory extends Base {
|
|
412
402
|
|
413
403
|
if (Neo.isObject(value) && !fieldExists) {
|
414
404
|
Object.entries(value).forEach(([childKey, childValue]) => {
|
415
|
-
|
405
|
+
me.setRecordFields({
|
416
406
|
changedFields,
|
417
407
|
fields: {[`${key}.${childKey}`]: childValue},
|
418
408
|
model,
|
@@ -423,10 +413,10 @@ class RecordFactory extends Base {
|
|
423
413
|
})
|
424
414
|
} else if (fieldExists) {
|
425
415
|
oldValue = record[key];
|
426
|
-
value =
|
416
|
+
value = me.parseRecordValue({record, field: model.getField(key), value});
|
427
417
|
|
428
418
|
if (!Neo.isEqual(oldValue, value)) {
|
429
|
-
|
419
|
+
me.setRecordData({fieldName: key, model, record, useOriginalData, value});
|
430
420
|
|
431
421
|
if (!trackModifiedFields && !useOriginalData) {
|
432
422
|
record[isModifiedSymbol] = true
|
@@ -437,8 +427,23 @@ class RecordFactory extends Base {
|
|
437
427
|
}
|
438
428
|
});
|
439
429
|
|
440
|
-
|
441
|
-
|
430
|
+
hasChangedFields = Object.keys(changedFields).length > 0;
|
431
|
+
|
432
|
+
if (hasChangedFields) {
|
433
|
+
calculatedFieldsMap.forEach((value, key) => {
|
434
|
+
oldValue = record[key];
|
435
|
+
value = me.parseRecordValue({record, field: model.getField(key), useOriginalData});
|
436
|
+
|
437
|
+
if (!Neo.isEqual(oldValue, value)) {
|
438
|
+
me.setRecordData({fieldName: key, model, record, useOriginalData, value});
|
439
|
+
|
440
|
+
changedFields.push({name: key, oldValue, value})
|
441
|
+
}
|
442
|
+
})
|
443
|
+
}
|
444
|
+
|
445
|
+
if (!silent && !useOriginalData && hasChangedFields) {
|
446
|
+
me.onRecordChange({fields: changedFields, model, record})
|
442
447
|
}
|
443
448
|
}
|
444
449
|
}
|