@formio/js 5.0.0-rc.80 → 5.0.0-rc.82

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.
Files changed (44) hide show
  1. package/dist/formio.embed.js +1 -1
  2. package/dist/formio.embed.min.js +1 -1
  3. package/dist/formio.embed.min.js.LICENSE.txt +1 -1
  4. package/dist/formio.form.js +8 -8
  5. package/dist/formio.form.min.js +1 -1
  6. package/dist/formio.form.min.js.LICENSE.txt +1 -1
  7. package/dist/formio.full.js +9 -9
  8. package/dist/formio.full.min.js +1 -1
  9. package/dist/formio.full.min.js.LICENSE.txt +1 -1
  10. package/dist/formio.js +2 -2
  11. package/dist/formio.min.js +1 -1
  12. package/dist/formio.min.js.LICENSE.txt +1 -1
  13. package/dist/formio.utils.js +3 -3
  14. package/dist/formio.utils.min.js +1 -1
  15. package/dist/formio.utils.min.js.LICENSE.txt +1 -1
  16. package/lib/cjs/components/_classes/component/Component.js +1 -1
  17. package/lib/cjs/components/_classes/multivalue/Multivalue.js +3 -0
  18. package/lib/cjs/components/editgrid/fixtures/comp18.d.ts +38 -0
  19. package/lib/cjs/components/editgrid/fixtures/comp18.js +74 -0
  20. package/lib/cjs/components/editgrid/fixtures/index.d.ts +8 -7
  21. package/lib/cjs/components/editgrid/fixtures/index.js +7 -1
  22. package/lib/cjs/components/select/Select.d.ts +1 -0
  23. package/lib/cjs/components/select/Select.js +24 -24
  24. package/lib/cjs/components/select/editForm/Select.edit.data.d.ts +36 -2
  25. package/lib/cjs/components/select/editForm/Select.edit.data.js +29 -10
  26. package/lib/cjs/components/select/fixtures/comp4.d.ts +5 -2
  27. package/lib/cjs/components/select/fixtures/comp4.js +4 -0
  28. package/lib/cjs/utils/utils.d.ts +8 -0
  29. package/lib/cjs/utils/utils.js +13 -0
  30. package/lib/mjs/components/_classes/component/Component.js +1 -1
  31. package/lib/mjs/components/_classes/multivalue/Multivalue.js +3 -0
  32. package/lib/mjs/components/editgrid/fixtures/comp18.d.ts +38 -0
  33. package/lib/mjs/components/editgrid/fixtures/comp18.js +72 -0
  34. package/lib/mjs/components/editgrid/fixtures/index.d.ts +8 -7
  35. package/lib/mjs/components/editgrid/fixtures/index.js +4 -1
  36. package/lib/mjs/components/select/Select.d.ts +1 -0
  37. package/lib/mjs/components/select/Select.js +24 -24
  38. package/lib/mjs/components/select/editForm/Select.edit.data.d.ts +36 -2
  39. package/lib/mjs/components/select/editForm/Select.edit.data.js +27 -8
  40. package/lib/mjs/components/select/fixtures/comp4.d.ts +5 -2
  41. package/lib/mjs/components/select/fixtures/comp4.js +4 -0
  42. package/lib/mjs/utils/utils.d.ts +8 -0
  43. package/lib/mjs/utils/utils.js +13 -0
  44. package/package.json +2 -2
@@ -136,6 +136,7 @@ export default class SelectComponent extends ListComponent {
136
136
  normalizeSingleValue(value: any): any;
137
137
  setMetadata(value: any): any;
138
138
  updateValue(value: any, flags: any): boolean;
139
+ undoValueTyping(value: any): any;
139
140
  setValue(value: any, flags?: {}): boolean;
140
141
  lazyLoadInit: boolean | undefined;
141
142
  isInitApiCallNeeded(hasValue: any): any;
@@ -238,10 +238,9 @@ export default class SelectComponent extends ListComponent {
238
238
  }
239
239
  selectValueAndLabel(data) {
240
240
  const value = this.getOptionValue((this.isEntireObjectDisplay() && !this.itemValue(data)) ? data : this.itemValue(data));
241
- const readOnlyResourceLabelData = this.options.readOnly && (this.component.dataSrc === 'resource' || this.component.dataSrc === 'url') && this.selectData;
242
241
  return {
243
242
  value,
244
- label: this.itemTemplate((this.isEntireObjectDisplay() && !_.isObject(data.data)) ? { data: data } : readOnlyResourceLabelData || data, value)
243
+ label: this.itemTemplate((this.isEntireObjectDisplay() && !_.isObject(data.data)) ? { data: data } : data, value)
245
244
  };
246
245
  }
247
246
  itemTemplate(data, value) {
@@ -258,7 +257,7 @@ export default class SelectComponent extends ListComponent {
258
257
  const value = (typeof itemLabel === 'string') ? this.t(itemLabel, { _userInput: true }) : itemLabel;
259
258
  return this.sanitize(value, this.shouldSanitizeValue);
260
259
  }
261
- if (this.component.multiple && _.isArray(this.dataValue) ? this.dataValue.find((val) => value === val) : (this.dataValue === value)) {
260
+ if (this.component.multiple && _.isArray(this.dataValue) ? this.dataValue.find((val) => this.normalizeSingleValue(value) === val) : (this.dataValue === this.normalizeSingleValue(value))) {
262
261
  const selectData = this.selectData;
263
262
  if (selectData) {
264
263
  const templateValue = this.component.reference && value?._id ? value._id.toString() : value;
@@ -1288,6 +1287,23 @@ export default class SelectComponent extends ListComponent {
1288
1287
  }
1289
1288
  return changed;
1290
1289
  }
1290
+ undoValueTyping(value) {
1291
+ let untypedValue = value;
1292
+ if (this.component.multiple && Array.isArray(value)) {
1293
+ untypedValue = value.map(v => {
1294
+ if (typeof v === 'boolean' || typeof v === 'number') {
1295
+ return v.toString();
1296
+ }
1297
+ return v;
1298
+ });
1299
+ }
1300
+ else {
1301
+ if (typeof value === 'boolean' || typeof value === 'number') {
1302
+ untypedValue = value.toString();
1303
+ }
1304
+ }
1305
+ return untypedValue;
1306
+ }
1291
1307
  setValue(value, flags = {}) {
1292
1308
  const previousValue = this.dataValue;
1293
1309
  const changed = this.updateValue(value, flags);
@@ -1298,19 +1314,7 @@ export default class SelectComponent extends ListComponent {
1298
1314
  const hasPreviousValue = !this.isEmpty(previousValue);
1299
1315
  const hasValue = !this.isEmpty(value);
1300
1316
  // Undo typing when searching to set the value.
1301
- if (this.component.multiple && Array.isArray(value)) {
1302
- value = value.map(value => {
1303
- if (typeof value === 'boolean' || typeof value === 'number') {
1304
- return value.toString();
1305
- }
1306
- return value;
1307
- });
1308
- }
1309
- else {
1310
- if (typeof value === 'boolean' || typeof value === 'number') {
1311
- value = value.toString();
1312
- }
1313
- }
1317
+ value = this.undoValueTyping(value);
1314
1318
  if (this.isHtmlRenderMode() && flags && flags.fromSubmission && changed) {
1315
1319
  this.itemsLoaded.then(() => {
1316
1320
  this.redraw();
@@ -1508,9 +1512,9 @@ export default class SelectComponent extends ListComponent {
1508
1512
  }
1509
1513
  asString(value, options = {}) {
1510
1514
  value = value ?? this.getValue();
1511
- if (options.modalPreview && this.selectData) {
1512
- const { label } = this.selectValueAndLabel(value);
1513
- return label;
1515
+ if (options.modalPreview) {
1516
+ const template = this.itemTemplate(value, value);
1517
+ return template;
1514
1518
  }
1515
1519
  //need to convert values to strings to be able to compare values with available options that are strings
1516
1520
  const convertToString = (data, valueProperty) => {
@@ -1527,11 +1531,7 @@ export default class SelectComponent extends ListComponent {
1527
1531
  data = data.toString();
1528
1532
  }
1529
1533
  if (Array.isArray(data) && data.some(item => this.isBooleanOrNumber(item))) {
1530
- data = data.map(item => {
1531
- if (this.isBooleanOrNumber(item)) {
1532
- item = item.toString();
1533
- }
1534
- });
1534
+ data = data.map(item => this.isBooleanOrNumber(item) ? item.toString() : item);
1535
1535
  }
1536
1536
  return data;
1537
1537
  };
@@ -1102,13 +1102,47 @@ declare const _default: ({
1102
1102
  conditional: {
1103
1103
  json: {
1104
1104
  and: ({
1105
- '!==': ({
1105
+ var: string;
1106
+ '==='?: undefined;
1107
+ '!=='?: undefined;
1108
+ or?: undefined;
1109
+ } | {
1110
+ '===': (boolean | {
1106
1111
  var: string;
1107
- } | null)[];
1112
+ })[];
1113
+ var?: undefined;
1114
+ '!=='?: undefined;
1115
+ or?: undefined;
1108
1116
  } | {
1109
1117
  '!==': (string | {
1110
1118
  var: string;
1111
1119
  })[];
1120
+ var?: undefined;
1121
+ '==='?: undefined;
1122
+ or?: undefined;
1123
+ } | {
1124
+ or: ({
1125
+ '===': (string | {
1126
+ var: string;
1127
+ })[];
1128
+ and?: undefined;
1129
+ } | {
1130
+ and: ({
1131
+ '===': (string | {
1132
+ var: string;
1133
+ })[];
1134
+ '!=='?: undefined;
1135
+ } | {
1136
+ '!==': (string | {
1137
+ var: string;
1138
+ })[];
1139
+ '==='?: undefined;
1140
+ })[];
1141
+ '==='?: undefined;
1142
+ })[];
1143
+ var?: undefined;
1144
+ '==='?: undefined;
1145
+ '!=='?: undefined;
1112
1146
  })[];
1113
1147
  '==='?: undefined;
1114
1148
  in?: undefined;
@@ -27,16 +27,20 @@ const setSelectData = (context) => {
27
27
  // Wait before downloadedResources will be set
28
28
  setTimeout(() => {
29
29
  const { instance, data } = context;
30
- const selectDataComponent = instance?.root.getComponent('selectData');
30
+ const selectDataComponent = instance?.root?.getComponent('selectData');
31
+ // clear selectData if conditions are not met or clearing default value
32
+ if (selectDataComponent && (!selectDataComponent.visible || !data.defaultValue)) {
33
+ selectDataComponent.setValue(null, { resetValue: true });
34
+ return;
35
+ }
31
36
  // nothing can set if don't have downloaded resources
32
37
  if (!selectDataComponent || !instance.getValue() || !instance.downloadedResources?.length) {
33
38
  return;
34
39
  }
35
- // if valueProperty is not provided, we have entire object
36
40
  const shouldCalculateUrlData = data.dataSrc === 'url' && data.data.url && data.valueProperty;
37
41
  const shouldCalculateResourceData = data.dataSrc === 'resource' && data.data.resource && data.valueProperty;
38
- const newValue = shouldCalculateUrlData || shouldCalculateResourceData ? calculateSelectData(context) : undefined;
39
- selectDataComponent.setValue(newValue);
42
+ const newValue = shouldCalculateUrlData || shouldCalculateResourceData ? calculateSelectData(context) : null;
43
+ selectDataComponent.setValue(newValue, { resetValue: newValue === null });
40
44
  }, 0);
41
45
  };
42
46
  export default [
@@ -678,10 +682,25 @@ export default [
678
682
  {
679
683
  key: 'selectData',
680
684
  conditional: {
681
- json: { 'and': [
682
- { '!==': [{ var: 'data.valueProperty' }, null] },
683
- { '!==': [{ var: 'data.valueProperty' }, ''] },
684
- ] },
685
+ json: {
686
+ and: [
687
+ { var: 'data.valueProperty' },
688
+ { '===': [{ var: 'data.lazyLoad' }, true] },
689
+ { '!==': [{ var: 'data.widget' }, 'html5'] },
690
+ {
691
+ or: [
692
+ { '===': [{ var: 'data.dataSrc' }, 'url'] },
693
+ {
694
+ and: [
695
+ { '===': [{ var: 'data.dataSrc' }, 'resource'] },
696
+ // 'data' means entire object from resource will be used
697
+ { '!==': [{ var: 'data.valueProperty' }, 'data'] },
698
+ ],
699
+ }
700
+ ]
701
+ }
702
+ ]
703
+ },
685
704
  },
686
705
  },
687
706
  {
@@ -7,10 +7,13 @@ declare namespace _default {
7
7
  export let multiple: boolean;
8
8
  export let dataSrc: string;
9
9
  export namespace data {
10
- let values: {
10
+ let values: ({
11
11
  label: string;
12
12
  value: string;
13
- }[];
13
+ } | {
14
+ label: string;
15
+ value: number[];
16
+ })[];
14
17
  let resource: string;
15
18
  let json: string;
16
19
  let url: string;
@@ -19,6 +19,10 @@ export default {
19
19
  }, {
20
20
  'label': 'test',
21
21
  'value': 'test'
22
+ },
23
+ {
24
+ 'label': '1',
25
+ 'value': [1, 2, 3]
22
26
  }],
23
27
  'resource': '',
24
28
  'json': '',
@@ -56,6 +56,14 @@ export function isMongoId(text: string): boolean;
56
56
  * @param {*} rowData - The contextual row data for the component.
57
57
  */
58
58
  export function checkCalculated(component: import('@formio/core').Component, submission: import('@formio/core').Submission, rowData: any): void;
59
+ /**
60
+ *
61
+ * @param component
62
+ * @param condition
63
+ * @param row
64
+ * @param data
65
+ * @param instance
66
+ */
59
67
  export function checkSimpleConditional(component: any, condition: any, row: any, data: any, instance: any): boolean;
60
68
  /**
61
69
  * Returns a components normalized value.
@@ -145,6 +145,11 @@ export function checkCalculated(component, submission, rowData) {
145
145
  * @param {import('../../src/components/_classes/component/Component').Component} instance - The instance of the component.
146
146
  * @returns {boolean} - TRUE if the condition is true; FALSE otherwise.
147
147
  */
148
+ /**
149
+ *
150
+ * @param conditionPaths
151
+ * @param data
152
+ */
148
153
  function getConditionalPathsRecursive(conditionPaths, data) {
149
154
  let currentGlobalIndex = 0;
150
155
  const conditionalPathsArray = [];
@@ -183,6 +188,14 @@ function getConditionalPathsRecursive(conditionPaths, data) {
183
188
  getConditionalPaths(data);
184
189
  return conditionalPathsArray;
185
190
  }
191
+ /**
192
+ *
193
+ * @param component
194
+ * @param condition
195
+ * @param row
196
+ * @param data
197
+ * @param instance
198
+ */
186
199
  export function checkSimpleConditional(component, condition, row, data, instance) {
187
200
  if (condition.when) {
188
201
  const value = getComponentActualValue(condition.when, data, row);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@formio/js",
3
- "version": "5.0.0-rc.80",
3
+ "version": "5.0.0-rc.82",
4
4
  "description": "JavaScript powered Forms with JSON Form Builder",
5
5
  "main": "lib/cjs/index.js",
6
6
  "exports": {
@@ -81,7 +81,7 @@
81
81
  "dependencies": {
82
82
  "@formio/bootstrap": "3.0.0-rc.37",
83
83
  "@formio/choices.js": "^10.2.1",
84
- "@formio/core": "2.2.3-rc.2",
84
+ "@formio/core": "2.3.0-rc.3",
85
85
  "@formio/text-mask-addons": "^3.8.0-formio.2",
86
86
  "@formio/vanilla-text-mask": "^5.1.1-formio.1",
87
87
  "abortcontroller-polyfill": "^1.7.5",