neo.mjs 5.2.0 → 5.2.2

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='5.2.0'
23
+ * @member {String} version='5.2.2'
24
24
  */
25
- version: '5.2.0'
25
+ version: '5.2.2'
26
26
  }
27
27
 
28
28
  /**
@@ -66,7 +66,11 @@ class FormContainer extends BaseFormContainer {
66
66
  {module: () => import('./pages/Page7.mjs')},
67
67
  {module: () => import('./pages/Page8.mjs')},
68
68
  {module: () => import('./pages/Page9.mjs')},
69
- {module: () => import('./pages/Page10.mjs')}
69
+ {module: () => import('./pages/Page10.mjs')},
70
+ {module: () => import('./pages/Page11.mjs')},
71
+ {module: () => import('./pages/Page12.mjs')},
72
+ {module: () => import('./pages/Page13.mjs')},
73
+ {module: () => import('./pages/Page14.mjs')}
70
74
  ]
71
75
  }, {
72
76
  module: Toolbar,
@@ -22,7 +22,7 @@ class ViewportController extends Component {
22
22
  isValid = await form.validate(),
23
23
  formValues = await form.getValues();
24
24
 
25
- console.log({isValid, formValues});
25
+ console.log('All pages', {isValid, formValues});
26
26
 
27
27
  await me.updateRecordValidityState()
28
28
  }
@@ -0,0 +1,32 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page11
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page11 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page11'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page11',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 11 Field 1',
21
+ name : 'page11field1'
22
+ }, {
23
+ module : TextField,
24
+ labelText: 'Page 11 Field 2',
25
+ name : 'page11field2'
26
+ }]
27
+ }
28
+ }
29
+
30
+ Neo.applyClassConfig(Page11);
31
+
32
+ export default Page11;
@@ -0,0 +1,32 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page12
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page12 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page12'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page12',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 12 Field 1',
21
+ name : 'page12field1'
22
+ }, {
23
+ module : TextField,
24
+ labelText: 'Page 12 Field 2',
25
+ name : 'page12field2'
26
+ }]
27
+ }
28
+ }
29
+
30
+ Neo.applyClassConfig(Page12);
31
+
32
+ export default Page12;
@@ -0,0 +1,32 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page13
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page13 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page13'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page13',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 13 Field 1',
21
+ name : 'page13field1'
22
+ }, {
23
+ module : TextField,
24
+ labelText: 'Page 13 Field 2',
25
+ name : 'page13field2'
26
+ }]
27
+ }
28
+ }
29
+
30
+ Neo.applyClassConfig(Page13);
31
+
32
+ export default Page13;
@@ -0,0 +1,32 @@
1
+ import FormPageContainer from '../FormPageContainer.mjs';
2
+ import TextField from '../../../../src/form/field/Text.mjs';
3
+
4
+ /**
5
+ * @class Form.view.pages.Page14
6
+ * @extends Form.view.FormPageContainer
7
+ */
8
+ class Page14 extends FormPageContainer {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Form.view.pages.Page14'
12
+ * @protected
13
+ */
14
+ className: 'Form.view.pages.Page14',
15
+ /**
16
+ * @member {Object[]} items
17
+ */
18
+ items: [{
19
+ module : TextField,
20
+ labelText: 'Page 14 Field 1',
21
+ name : 'page14field1'
22
+ }, {
23
+ module : TextField,
24
+ labelText: 'Page 14 Field 2',
25
+ name : 'page14field2'
26
+ }]
27
+ }
28
+ }
29
+
30
+ Neo.applyClassConfig(Page14);
31
+
32
+ export default Page14;
@@ -18,12 +18,13 @@ class Page3 extends FormPageContainer {
18
18
  items: [{
19
19
  module : TextField,
20
20
  labelText: 'Page 3 Field 1',
21
- name : 'page3field1',
22
- required : true
21
+ name : 'page3.field1',
22
+ required : true,
23
+ value : 'foo'
23
24
  }, {
24
25
  module : TextField,
25
26
  labelText: 'Page 3 Field 2',
26
- name : 'page3field2'
27
+ name : 'page3.field2'
27
28
  }]
28
29
  }
29
30
  }
@@ -1,5 +1,5 @@
1
+ import CheckBox from '../../../../src/form/field/CheckBox.mjs';
1
2
  import FormPageContainer from '../FormPageContainer.mjs';
2
- import TextField from '../../../../src/form/field/Text.mjs';
3
3
 
4
4
  /**
5
5
  * @class Form.view.pages.Page4
@@ -12,18 +12,36 @@ class Page4 extends FormPageContainer {
12
12
  * @protected
13
13
  */
14
14
  className: 'Form.view.pages.Page4',
15
+ /**
16
+ * @member {Object} itemDefaults
17
+ */
18
+ itemDefaults: {
19
+ module : CheckBox,
20
+ labelText : null,
21
+ labelWidth: 70,
22
+ name : 'fruits'
23
+ },
15
24
  /**
16
25
  * @member {Object[]} items
17
26
  */
18
27
  items: [{
19
- module : TextField,
20
- labelText: 'Page 4 Field 1',
21
- name : 'page4field1',
22
- required : true
28
+ labelText : 'Fruits',
29
+ value : 'apple',
30
+ valueLabelText: 'Apple'
31
+ }, {
32
+ value : 'banana',
33
+ valueLabelText: 'Banana'
34
+ }, {
35
+ checked : true,
36
+ value : 'lemon',
37
+ valueLabelText: 'Lemon'
38
+ }, {
39
+ checked : true,
40
+ value : 'orange',
41
+ valueLabelText: 'Orange'
23
42
  }, {
24
- module : TextField,
25
- labelText: 'Page 4 Field 2',
26
- name : 'page4field2'
43
+ value : 'strawberry',
44
+ valueLabelText: 'Strawberry'
27
45
  }]
28
46
  }
29
47
  }
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.2.0'
23
+ * @member {String} version='5.2.2'
24
24
  */
25
- version: '5.2.0'
25
+ version: '5.2.2'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "5.2.0",
3
+ "version": "5.2.2",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -7,13 +7,18 @@
7
7
  {"id": 3, "cardIndex": 1, "isHeader": false, "isValid": null, "name": "Page 2"},
8
8
  {"id": 4, "cardIndex": 2, "isHeader": false, "isValid": null, "name": "Page 3"},
9
9
  {"id": 5, "cardIndex": null, "isHeader": true, "isValid": null, "name": "2. Personal data"},
10
- {"id": 6, "cardIndex": 3, "isHeader": false, "isValid": null, "name": "Page 4"},
10
+ {"id": 6, "cardIndex": 3, "isHeader": false, "isValid": null, "name": "CheckBoxes"},
11
11
  {"id": 7, "cardIndex": 4, "isHeader": false, "isValid": null, "name": "Page 5"},
12
12
  {"id": 8, "cardIndex": 5, "isHeader": false, "isValid": null, "name": "Page 6"},
13
13
  {"id": 9, "cardIndex": 6, "isHeader": false, "isValid": null, "name": "Page 7"},
14
14
  {"id": 10, "cardIndex": null, "isHeader": true, "isValid": null, "name": "3. More data"},
15
15
  {"id": 11, "cardIndex": 7, "isHeader": false, "isValid": null, "name": "Page 8"},
16
16
  {"id": 12, "cardIndex": 8, "isHeader": false, "isValid": null, "name": "Page 9"},
17
- {"id": 13, "cardIndex": 9, "isHeader": false, "isValid": null, "name": "Page 10"}
17
+ {"id": 13, "cardIndex": 9, "isHeader": false, "isValid": null, "name": "Page 10"},
18
+ {"id": 14, "cardIndex": null, "isHeader": true, "isValid": null, "name": "3. Optional data"},
19
+ {"id": 15, "cardIndex": 14, "isHeader": false, "isValid": null, "name": "Page 11"},
20
+ {"id": 16, "cardIndex": 14, "isHeader": false, "isValid": null, "name": "Page 12"},
21
+ {"id": 17, "cardIndex": 14, "isHeader": false, "isValid": null, "name": "Page 13"},
22
+ {"id": 18, "cardIndex": 14, "isHeader": false, "isValid": null, "name": "Page 14"}
18
23
  ]
19
24
  }
@@ -237,12 +237,12 @@ const DefaultConfig = {
237
237
  useVdomWorker: true,
238
238
  /**
239
239
  * buildScripts/injectPackageVersion.mjs will update this value
240
- * @default '5.2.0'
240
+ * @default '5.2.2'
241
241
  * @memberOf! module:Neo
242
242
  * @name config.version
243
243
  * @type String
244
244
  */
245
- version: '5.2.0'
245
+ version: '5.2.2'
246
246
  };
247
247
 
248
248
  Object.assign(DefaultConfig, {
@@ -87,26 +87,34 @@ class Container extends BaseContainer {
87
87
  /**
88
88
  * @returns {Promise<Object>}
89
89
  */
90
- async getSubmitValues() {
90
+ async getValues() {
91
91
  let fields = await this.getFields(),
92
- values = {};
92
+ values = {},
93
+ key, ns, nsArray, value;
93
94
 
94
95
  fields.forEach(item => {
95
- values[item.name || item.id] = item.getSubmitValue();
96
- });
96
+ value = item.getValue();
97
97
 
98
- return values;
99
- }
98
+ if (item.name) {
99
+ nsArray = item.name.split('.');
100
+ key = nsArray.pop();
101
+ ns = Neo.ns(nsArray, true, values);
102
+ } else {
103
+ key = item.id;
104
+ ns = values;
105
+ }
100
106
 
101
- /**
102
- * @returns {Promise<Object>}
103
- */
104
- async getValues() {
105
- let fields = await this.getFields(),
106
- values = {};
107
+ if (Object.hasOwn(ns, key)) {
108
+ if (ns[key] === null) {
109
+ ns[key] = []
110
+ } else if (!Array.isArray(ns[key])) {
111
+ ns[key] = [ns[key]]
112
+ }
107
113
 
108
- fields.forEach(item => {
109
- values[item.name || item.id] = item.value;
114
+ value !== null && ns[key].unshift(value)
115
+ } else {
116
+ ns[key] = value;
117
+ }
110
118
  });
111
119
 
112
120
  return values;
@@ -48,9 +48,9 @@ class Base extends Component {
48
48
  }
49
49
 
50
50
  /**
51
- * @returns {*} this.value
51
+ * @returns {*}
52
52
  */
53
- getSubmitValue() {
53
+ getValue() {
54
54
  return this.value;
55
55
  }
56
56
 
@@ -63,9 +63,9 @@ class Base extends Component {
63
63
 
64
64
  /**
65
65
  * Resets the field to a new value or null
66
- * @param {*} [value=null]
66
+ * @param {*} value=null
67
67
  */
68
- reset(value) {
68
+ reset(value=null) {
69
69
  this.value = value;
70
70
  }
71
71
 
@@ -316,6 +316,13 @@ class CheckBox extends Base {
316
316
  return `${this.id}__label`;
317
317
  }
318
318
 
319
+ /**
320
+ * @returns {String|null}
321
+ */
322
+ getValue() {
323
+ return this.checked ? this.value : null
324
+ }
325
+
319
326
  /**
320
327
  * @returns {String}
321
328
  */
@@ -356,7 +356,7 @@ class Select extends Picker {
356
356
  /**
357
357
  * @returns {Number|String}
358
358
  */
359
- getSubmitValue() {
359
+ getValue() {
360
360
  let me = this;
361
361
 
362
362
  return me.record?.[me.valueField] || me.value
@@ -175,6 +175,12 @@ class Text extends Base {
175
175
  ]}
176
176
  }
177
177
 
178
+ /**
179
+ * Set this value to false, in case a field should display errors up front.
180
+ * Otherwise, errors will stay hidden on mounting, unless you trigger validate(false).
181
+ * @member {Boolean} clean=true
182
+ */
183
+ clean = true
178
184
  /**
179
185
  * data passes maxLength, minLength & valueLength properties
180
186
  * @member {Function} errorTextMaxLength=data=>`Max length violation: ${valueLength} / ${maxLength}`
@@ -189,11 +195,6 @@ class Text extends Base {
189
195
  * @member {String} errorTextRequired='Required'
190
196
  */
191
197
  errorTextRequired = 'Required'
192
- /**
193
- * Set this value to false, in case a field should display errors up front
194
- * @member {Boolean} validBeforeMount=true
195
- */
196
- validBeforeMount = true
197
198
 
198
199
  /**
199
200
  * @param {Object} config
@@ -1204,7 +1205,7 @@ class Text extends Base {
1204
1205
 
1205
1206
  super.reset(value);
1206
1207
 
1207
- if (value === null && me.validBeforeMount) {
1208
+ if (value === null && me.clean) {
1208
1209
  me.updateError(null);
1209
1210
  }
1210
1211
  }
@@ -1236,7 +1237,7 @@ class Text extends Base {
1236
1237
  cls = me.cls,
1237
1238
  errorNode, isValid;
1238
1239
 
1239
- if (!(me.validBeforeMount && !me.mounted)) {
1240
+ if (!(me.clean && !me.mounted)) {
1240
1241
  me._error = value;
1241
1242
 
1242
1243
  isValid = !value || value === '';
@@ -1314,6 +1315,11 @@ class Text extends Base {
1314
1315
  errorParam = {maxLength, minLength, valueLength},
1315
1316
  errorText;
1316
1317
 
1318
+ if (!silent) {
1319
+ // in case we manually call validate(false) on a form or field before it is mounted, we do want to see errors.
1320
+ me.clean = false;
1321
+ }
1322
+
1317
1323
  if (Neo.isFunction(me.validator)) {
1318
1324
  errorText = me.validator(me);
1319
1325