@formio/js 5.0.0 → 5.1.0-rc.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.
Files changed (80) 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 +120 -109
  5. package/dist/formio.form.min.js +1 -1
  6. package/dist/formio.form.min.js.LICENSE.txt +3 -3
  7. package/dist/formio.full.js +121 -110
  8. package/dist/formio.full.min.js +1 -1
  9. package/dist/formio.full.min.js.LICENSE.txt +3 -3
  10. package/dist/formio.js +3011 -281
  11. package/dist/formio.min.js +1 -1
  12. package/dist/formio.min.js.LICENSE.txt +14 -2
  13. package/dist/formio.utils.js +55 -44
  14. package/dist/formio.utils.min.js +1 -1
  15. package/dist/formio.utils.min.js.LICENSE.txt +3 -3
  16. package/lib/cjs/Webform.d.ts +8 -1
  17. package/lib/cjs/Webform.js +40 -32
  18. package/lib/cjs/WebformBuilder.js +4 -12
  19. package/lib/cjs/Wizard.js +4 -11
  20. package/lib/cjs/components/Components.d.ts +0 -7
  21. package/lib/cjs/components/Components.js +1 -33
  22. package/lib/cjs/components/_classes/component/Component.d.ts +37 -7
  23. package/lib/cjs/components/_classes/component/Component.js +70 -26
  24. package/lib/cjs/components/_classes/componentModal/ComponentModal.d.ts +1 -0
  25. package/lib/cjs/components/_classes/componentModal/ComponentModal.js +1 -0
  26. package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +4 -19
  27. package/lib/cjs/components/_classes/nested/NestedComponent.js +38 -53
  28. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -1
  29. package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +7 -44
  30. package/lib/cjs/components/datagrid/DataGrid.d.ts +0 -1
  31. package/lib/cjs/components/datagrid/DataGrid.js +1 -45
  32. package/lib/cjs/components/datamap/DataMap.js +1 -2
  33. package/lib/cjs/components/editgrid/EditGrid.js +6 -6
  34. package/lib/cjs/components/form/Form.d.ts +8 -3
  35. package/lib/cjs/components/form/Form.js +26 -25
  36. package/lib/cjs/components/selectboxes/SelectBoxes.js +0 -1
  37. package/lib/cjs/components/signature/Signature.d.ts +0 -1
  38. package/lib/cjs/components/signature/Signature.js +1 -1
  39. package/lib/cjs/utils/conditionOperators/DateGreaterThan.js +2 -2
  40. package/lib/cjs/utils/conditionOperators/IsEmptyValue.d.ts +2 -2
  41. package/lib/cjs/utils/conditionOperators/IsEmptyValue.js +2 -2
  42. package/lib/cjs/utils/conditionOperators/IsEqualTo.d.ts +2 -2
  43. package/lib/cjs/utils/conditionOperators/IsEqualTo.js +2 -2
  44. package/lib/cjs/utils/formUtils.d.ts +25 -14
  45. package/lib/cjs/utils/formUtils.js +11 -16
  46. package/lib/cjs/utils/utils.d.ts +1 -3
  47. package/lib/cjs/utils/utils.js +19 -35
  48. package/lib/mjs/Webform.d.ts +8 -1
  49. package/lib/mjs/Webform.js +37 -31
  50. package/lib/mjs/WebformBuilder.js +4 -12
  51. package/lib/mjs/Wizard.js +2 -8
  52. package/lib/mjs/components/Components.d.ts +0 -7
  53. package/lib/mjs/components/Components.js +1 -32
  54. package/lib/mjs/components/_classes/component/Component.d.ts +37 -7
  55. package/lib/mjs/components/_classes/component/Component.js +80 -27
  56. package/lib/mjs/components/_classes/componentModal/ComponentModal.d.ts +1 -0
  57. package/lib/mjs/components/_classes/componentModal/ComponentModal.js +1 -0
  58. package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +4 -19
  59. package/lib/mjs/components/_classes/nested/NestedComponent.js +39 -54
  60. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -1
  61. package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +8 -43
  62. package/lib/mjs/components/datagrid/DataGrid.d.ts +0 -1
  63. package/lib/mjs/components/datagrid/DataGrid.js +1 -45
  64. package/lib/mjs/components/datamap/DataMap.js +1 -2
  65. package/lib/mjs/components/editgrid/EditGrid.js +9 -6
  66. package/lib/mjs/components/form/Form.d.ts +8 -3
  67. package/lib/mjs/components/form/Form.js +27 -25
  68. package/lib/mjs/components/selectboxes/SelectBoxes.js +0 -1
  69. package/lib/mjs/components/signature/Signature.d.ts +0 -1
  70. package/lib/mjs/components/signature/Signature.js +1 -1
  71. package/lib/mjs/utils/conditionOperators/DateGreaterThan.js +2 -2
  72. package/lib/mjs/utils/conditionOperators/IsEmptyValue.d.ts +2 -2
  73. package/lib/mjs/utils/conditionOperators/IsEmptyValue.js +2 -2
  74. package/lib/mjs/utils/conditionOperators/IsEqualTo.d.ts +2 -2
  75. package/lib/mjs/utils/conditionOperators/IsEqualTo.js +2 -2
  76. package/lib/mjs/utils/formUtils.d.ts +25 -14
  77. package/lib/mjs/utils/formUtils.js +2 -12
  78. package/lib/mjs/utils/utils.d.ts +1 -3
  79. package/lib/mjs/utils/utils.js +18 -33
  80. package/package.json +4 -4
@@ -56,18 +56,6 @@ export default class NestedComponent extends Field {
56
56
  * @returns {object} - The current form object.
57
57
  */
58
58
  get currentForm(): object;
59
- /**
60
- * Set Row Index to row and update each component.
61
- * @param {number} value - The row index.
62
- * @returns {void}
63
- */
64
- set rowIndex(value: number);
65
- /**
66
- * Get Row Index.
67
- * @returns {number} - The row index.
68
- */
69
- get rowIndex(): number;
70
- _rowIndex: number | undefined;
71
59
  /**
72
60
  * Get Contextual data of the component.
73
61
  * @returns {object} - The contextual data of the component.
@@ -115,14 +103,11 @@ export default class NestedComponent extends Field {
115
103
  */
116
104
  eachComponent(fn: Function): void;
117
105
  /**
118
- * Returns a component provided a key. This performs a deep search within the
119
- * component tree.
106
+ * Returns a component provided a key. This performs a deep search within the component tree.
120
107
  * @param {string} path - The path to the component.
121
- * @param {Function} [fn] - Called with the component once found.
122
- * @param {string} [originalPath] - The original path to the component.
123
108
  * @returns {any} - The component that is located.
124
109
  */
125
- getComponent(path: string, fn?: Function | undefined, originalPath?: string | undefined): any;
110
+ getComponent(path: string): any;
126
111
  /**
127
112
  * Return a component provided the Id of the component.
128
113
  * @param {string} id - The Id of the component.
@@ -211,12 +196,12 @@ export default class NestedComponent extends Field {
211
196
  calculateValue(data: any, flags: any, row: any): any;
212
197
  isLastPage(): boolean;
213
198
  isValid(data: any, dirty: any): any;
214
- validationProcessor({ scope, data, row, instance, component }: {
199
+ validationProcessor({ scope, data, row, instance, paths }: {
215
200
  scope: any;
216
201
  data: any;
217
202
  row: any;
218
203
  instance: any;
219
- component: any;
204
+ paths: any;
220
205
  }, flags: any): void;
221
206
  /**
222
207
  * Perform a validation on all child components of this nested component.
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const lodash_1 = __importDefault(require("lodash"));
7
7
  const Field_1 = __importDefault(require("../field/Field"));
8
8
  const Components_1 = __importDefault(require("../../Components"));
9
+ '';
9
10
  const utils_1 = require("../../../utils/utils");
10
11
  const process_1 = require("@formio/core/process");
11
12
  /**
@@ -201,7 +202,9 @@ class NestedComponent extends Field_1.default {
201
202
  * @returns {void}
202
203
  */
203
204
  set rowIndex(value) {
205
+ var _a, _b;
204
206
  this._rowIndex = value;
207
+ this.paths = (0, utils_1.getComponentPaths)(this.component, (_a = this.parent) === null || _a === void 0 ? void 0 : _a.component, Object.assign(Object.assign({}, (((_b = this.parent) === null || _b === void 0 ? void 0 : _b.paths) || {})), { dataIndex: value }));
205
208
  this.eachComponent((component) => {
206
209
  component.rowIndex = value;
207
210
  });
@@ -297,56 +300,38 @@ class NestedComponent extends Field_1.default {
297
300
  });
298
301
  }
299
302
  /**
300
- * Returns a component provided a key. This performs a deep search within the
301
- * component tree.
303
+ * Returns a component provided a key. This performs a deep search within the component tree.
302
304
  * @param {string} path - The path to the component.
303
- * @param {Function} [fn] - Called with the component once found.
304
- * @param {string} [originalPath] - The original path to the component.
305
305
  * @returns {any} - The component that is located.
306
306
  */
307
- getComponent(path, fn, originalPath) {
308
- originalPath = originalPath || (0, utils_1.getStringFromComponentPath)(path);
309
- if (this.componentsMap.hasOwnProperty(originalPath)) {
310
- if (fn) {
311
- return fn(this.componentsMap[originalPath]);
312
- }
313
- else {
314
- return this.componentsMap[originalPath];
315
- }
316
- }
317
- path = (0, utils_1.getArrayFromComponentPath)(path);
318
- const pathStr = originalPath;
319
- const newPath = lodash_1.default.clone(path);
320
- let key = newPath.shift();
321
- const remainingPath = newPath;
322
- let comp = null;
323
- let possibleComp = null;
324
- if (lodash_1.default.isNumber(key)) {
325
- key = remainingPath.shift();
326
- }
327
- if (!lodash_1.default.isString(key)) {
328
- return comp;
329
- }
330
- this.everyComponent((component, components) => {
331
- const matchPath = component.hasInput && component.path ? pathStr.includes(component.path) : true;
332
- if (component.component.key === key) {
333
- possibleComp = component;
334
- if (matchPath) {
335
- comp = component;
336
- if (remainingPath.length > 0 && 'getComponent' in component) {
337
- comp = component.getComponent(remainingPath, fn, originalPath);
338
- }
339
- else if (fn) {
340
- fn(component, components);
341
- }
342
- return false;
343
- }
344
- }
307
+ getComponent(path) {
308
+ var _a;
309
+ path = (0, utils_1.getStringFromComponentPath)(path);
310
+ const matches = {
311
+ path: undefined,
312
+ fullPath: undefined,
313
+ localPath: undefined,
314
+ fullLocalPath: undefined,
315
+ dataPath: undefined,
316
+ localDataPath: undefined,
317
+ key: undefined,
318
+ };
319
+ this.everyComponent((component) => {
320
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
321
+ // All searches are relative to this component so replace this path from the child paths.
322
+ (0, utils_1.componentMatches)(component.component, {
323
+ path: (_b = (_a = component.paths) === null || _a === void 0 ? void 0 : _a.path) === null || _b === void 0 ? void 0 : _b.replace(new RegExp(`^${(_c = this.paths) === null || _c === void 0 ? void 0 : _c.path}\\.?`), ''),
324
+ fullPath: (_e = (_d = component.paths) === null || _d === void 0 ? void 0 : _d.fullPath) === null || _e === void 0 ? void 0 : _e.replace(new RegExp(`^${(_f = this.paths) === null || _f === void 0 ? void 0 : _f.fullPath}\\.?`), ''),
325
+ localPath: (_h = (_g = component.paths) === null || _g === void 0 ? void 0 : _g.localPath) === null || _h === void 0 ? void 0 : _h.replace(new RegExp(`^${(_j = this.paths) === null || _j === void 0 ? void 0 : _j.localPath}\\.?`), ''),
326
+ fullLocalPath: (_l = (_k = component.paths) === null || _k === void 0 ? void 0 : _k.fullLocalPath) === null || _l === void 0 ? void 0 : _l.replace(new RegExp(`^${(_m = this.paths) === null || _m === void 0 ? void 0 : _m.fullLocalPath}\\.?`), ''),
327
+ dataPath: (_p = (_o = component.paths) === null || _o === void 0 ? void 0 : _o.dataPath) === null || _p === void 0 ? void 0 : _p.replace(new RegExp(`^${(_q = this.paths) === null || _q === void 0 ? void 0 : _q.dataPath}\\.?`), ''),
328
+ localDataPath: (_s = (_r = component.paths) === null || _r === void 0 ? void 0 : _r.localDataPath) === null || _s === void 0 ? void 0 : _s.replace(new RegExp(`^${(_t = this.paths) === null || _t === void 0 ? void 0 : _t.localDataPath}\\.?`), ''),
329
+ }, path, this.rowIndex, matches, (type, match) => {
330
+ match.instance = component;
331
+ return match;
332
+ });
345
333
  });
346
- if (!comp) {
347
- comp = possibleComp;
348
- }
349
- return comp;
334
+ return (_a = (0, utils_1.getBestMatch)(matches)) === null || _a === void 0 ? void 0 : _a.instance;
350
335
  }
351
336
  /**
352
337
  * Return a component provided the Id of the component.
@@ -682,20 +667,17 @@ class NestedComponent extends Field_1.default {
682
667
  isValid(data, dirty) {
683
668
  return this.getComponents().reduce((valid, comp) => comp.isValid(data, dirty) && valid, super.isValid(data, dirty));
684
669
  }
685
- validationProcessor({ scope, data, row, instance, component }, flags) {
670
+ validationProcessor({ scope, data, row, instance, paths }, flags) {
686
671
  var _a;
687
672
  const { dirty } = flags;
688
673
  if (this.root.hasExtraPages && this.page !== this.root.page) {
689
- instance = ((_a = this.childComponentsMap) === null || _a === void 0 ? void 0 : _a.hasOwnProperty(component.path))
690
- ? this.childComponentsMap[component.path]
691
- : this.getComponent(component.path);
674
+ instance = ((_a = this.componentsMap) === null || _a === void 0 ? void 0 : _a.hasOwnProperty(paths.dataPath))
675
+ ? this.componentsMap[paths.dataPath]
676
+ : this.getComponent(paths.dataPath);
692
677
  }
693
678
  if (!instance) {
694
679
  return;
695
680
  }
696
- if (!instance.component.path) {
697
- instance.component.path = component.path;
698
- }
699
681
  instance.checkComponentValidity(data, dirty, row, flags, scope.errors);
700
682
  if (instance.processOwnValidation) {
701
683
  scope.noRecurse = true;
@@ -727,7 +709,10 @@ class NestedComponent extends Field_1.default {
727
709
  components,
728
710
  instances: this.componentsMap,
729
711
  data: data,
712
+ local: !!flags.local,
730
713
  scope: { errors: [] },
714
+ parent: this.component,
715
+ parentPaths: this.paths,
731
716
  processors: [
732
717
  {
733
718
  process: validationProcessorProcess,
@@ -2,6 +2,8 @@ export default class NestedArrayComponent extends NestedDataComponent {
2
2
  static savedValueTypes(): string[];
3
3
  componentContext(component: any): any;
4
4
  get iteratableRows(): void;
5
+ set rowIndex(value: number | undefined);
6
+ get rowIndex(): number | undefined;
5
7
  prevHasAddButton: any;
6
8
  checkAddButtonChanged(): void;
7
9
  checkData(data: any, flags: any, row: any): any;
@@ -10,7 +12,6 @@ export default class NestedArrayComponent extends NestedDataComponent {
10
12
  checkRow(...args: any[]): any;
11
13
  processRow(method: any, data: any, opts: any, row: any, components: any, silentCheck: any): any;
12
14
  hasAddButton(): any;
13
- getComponent(path: any, fn: any, originalPath: any): any;
14
15
  everyComponent(fn: any, rowIndex: any, options?: {}): void;
15
16
  getComponents(rowIndex: any): any;
16
17
  removeSubmissionMetadataRow(index: any): void;
@@ -4,7 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const lodash_1 = __importDefault(require("lodash"));
7
- const utils_1 = require("../../../utils/utils");
7
+ const utils_1 = require("@formio/core/utils");
8
+ const { getComponentPaths } = utils_1.Utils;
9
+ const utils_2 = require("../../../utils/utils");
8
10
  const Component_1 = __importDefault(require("../component/Component"));
9
11
  const NestedDataComponent_1 = __importDefault(require("../nesteddata/NestedDataComponent"));
10
12
  class NestedArrayComponent extends NestedDataComponent_1.default {
@@ -14,7 +16,7 @@ class NestedArrayComponent extends NestedDataComponent_1.default {
14
16
  }, ...extend);
15
17
  }
16
18
  static savedValueTypes() {
17
- return [utils_1.componentValueTypes.array];
19
+ return [utils_2.componentValueTypes.array];
18
20
  }
19
21
  componentContext(component) {
20
22
  return this.iteratableRows[component.rowIndex].data;
@@ -23,9 +25,11 @@ class NestedArrayComponent extends NestedDataComponent_1.default {
23
25
  throw new Error('Getter #iteratableRows() is not implemented');
24
26
  }
25
27
  get rowIndex() {
26
- return super.rowIndex;
28
+ return this._rowIndex;
27
29
  }
28
30
  set rowIndex(value) {
31
+ var _a, _b;
32
+ this.paths = getComponentPaths(this.component, (_a = this.parent) === null || _a === void 0 ? void 0 : _a.component, Object.assign(Object.assign({}, (((_b = this.parent) === null || _b === void 0 ? void 0 : _b.paths) || {})), { dataIndex: value }));
29
33
  this._rowIndex = value;
30
34
  }
31
35
  init() {
@@ -88,47 +92,6 @@ class NestedArrayComponent extends NestedDataComponent_1.default {
88
92
  value: this.dataValue,
89
93
  }, 'show'));
90
94
  }
91
- getComponent(path, fn, originalPath) {
92
- originalPath = originalPath || (0, utils_1.getStringFromComponentPath)(path);
93
- if (this.componentsMap.hasOwnProperty(originalPath)) {
94
- if (fn) {
95
- return fn(this.componentsMap[originalPath]);
96
- }
97
- else {
98
- return this.componentsMap[originalPath];
99
- }
100
- }
101
- path = Array.isArray(path) ? path : [path];
102
- let key = path.shift();
103
- const remainingPath = path;
104
- let result = [];
105
- let possibleComp = null;
106
- let comp = null;
107
- let rowIndex = null;
108
- if (lodash_1.default.isNumber(key)) {
109
- rowIndex = key;
110
- key = remainingPath.shift();
111
- }
112
- if (!lodash_1.default.isString(key)) {
113
- return result;
114
- }
115
- this.everyComponent((component, components) => {
116
- if (component.component.key === key) {
117
- possibleComp = component;
118
- if (remainingPath.length > 0 && 'getComponent' in component) {
119
- comp = component.getComponent(remainingPath, fn, originalPath);
120
- }
121
- else if (fn) {
122
- fn(component, components);
123
- }
124
- result = rowIndex !== null ? comp : result.concat(comp || possibleComp);
125
- }
126
- }, rowIndex);
127
- if ((!result || result.length === 0) && possibleComp) {
128
- result = rowIndex !== null ? possibleComp : [possibleComp];
129
- }
130
- return result;
131
- }
132
95
  everyComponent(fn, rowIndex, options = {}) {
133
96
  if (lodash_1.default.isObject(rowIndex)) {
134
97
  options = rowIndex;
@@ -85,7 +85,6 @@ export default class DataGridComponent extends NestedArrayComponent {
85
85
  show: boolean;
86
86
  };
87
87
  checkComponentConditions(data: any, flags: any, row: any): boolean;
88
- getComponent(path: any, fn: any): any;
89
88
  toggleGroup(element: any, index: any): void;
90
89
  }
91
90
  import NestedArrayComponent from '../_classes/nestedarray/NestedArrayComponent';
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const lodash_1 = __importDefault(require("lodash"));
7
7
  const NestedArrayComponent_1 = __importDefault(require("../_classes/nestedarray/NestedArrayComponent"));
8
8
  const utils_1 = require("../../utils/utils");
9
- const Components_1 = __importDefault(require("../Components"));
10
9
  const dragula_1 = __importDefault(require("dragula"));
11
10
  class DataGridComponent extends NestedArrayComponent_1.default {
12
11
  static schema(...extend) {
@@ -411,7 +410,6 @@ class DataGridComponent extends NestedArrayComponent_1.default {
411
410
  }
412
411
  component.rowIndex = rowIndex;
413
412
  component.row = `${rowIndex}-${colIndex}`;
414
- component.path = Components_1.default.getComponentPath(component);
415
413
  });
416
414
  }
417
415
  updateRowsComponents(rowIndex) {
@@ -477,6 +475,7 @@ class DataGridComponent extends NestedArrayComponent_1.default {
477
475
  const options = lodash_1.default.clone(this.options);
478
476
  options.name += `[${rowIndex}]`;
479
477
  options.row = `${rowIndex}-${colIndex}`;
478
+ options.rowIndex = rowIndex;
480
479
  let columnComponent;
481
480
  if (this.builderMode) {
482
481
  col.id = col.id + rowIndex;
@@ -599,49 +598,6 @@ class DataGridComponent extends NestedArrayComponent_1.default {
599
598
  restoreComponentsContext() {
600
599
  this.rows.forEach((row, index) => lodash_1.default.forIn(row, (component) => component.data = this.dataValue[index]));
601
600
  }
602
- getComponent(path, fn) {
603
- path = Array.isArray(path) ? path : [path];
604
- const [key, ...remainingPath] = path;
605
- let result = [];
606
- if (lodash_1.default.isNumber(key) && remainingPath.length) {
607
- const compKey = remainingPath.pop();
608
- result = this.rows[key][compKey];
609
- // If the component is inside a Layout Component, try to find it among all the row's components
610
- if (!result) {
611
- Object.entries(this.rows[key]).forEach(([, comp]) => {
612
- if ('getComponent' in comp) {
613
- const possibleResult = comp.getComponent([compKey], fn);
614
- if (possibleResult) {
615
- result = possibleResult;
616
- }
617
- }
618
- });
619
- }
620
- if (result && lodash_1.default.isFunction(fn)) {
621
- fn(result, this.getComponents());
622
- }
623
- if (remainingPath.length && 'getComponent' in result) {
624
- return result.getComponent(remainingPath, fn);
625
- }
626
- return result;
627
- }
628
- if (!lodash_1.default.isString(key)) {
629
- return result;
630
- }
631
- this.everyComponent((component, components) => {
632
- if (component.component.key === key) {
633
- let comp = component;
634
- if (remainingPath.length > 0 && 'getComponent' in component) {
635
- comp = component.getComponent(remainingPath, fn);
636
- }
637
- else if (fn) {
638
- fn(component, components);
639
- }
640
- result = result.concat(comp);
641
- }
642
- });
643
- return result.length > 0 ? result : null;
644
- }
645
601
  toggleGroup(element, index) {
646
602
  element.classList.toggle('collapsed');
647
603
  lodash_1.default.each(this.refs.chunks[index], row => {
@@ -8,7 +8,6 @@ const DataGrid_1 = __importDefault(require("../datagrid/DataGrid"));
8
8
  const lodash_1 = __importDefault(require("lodash"));
9
9
  const eventemitter3_1 = __importDefault(require("eventemitter3"));
10
10
  const utils_1 = require("../../utils/utils");
11
- const Components_1 = __importDefault(require("../Components"));
12
11
  class DataMapComponent extends DataGrid_1.default {
13
12
  static schema(...extend) {
14
13
  return Component_1.default.schema({
@@ -232,6 +231,7 @@ class DataMapComponent extends DataGrid_1.default {
232
231
  options.events = new eventemitter3_1.default();
233
232
  options.name += `[${rowIndex}]`;
234
233
  options.row = `${rowIndex}`;
234
+ options.rowIndex = rowIndex;
235
235
  const components = {};
236
236
  components['__key'] = this.createComponent(this.keySchema, options, { __key: this.builderMode ? this.defaultRowKey : key });
237
237
  components['__key'].on('componentChange', (event) => {
@@ -241,7 +241,6 @@ class DataMapComponent extends DataGrid_1.default {
241
241
  delete dataValue[key];
242
242
  const comp = components[this.valueKey];
243
243
  comp.component.key = newKey;
244
- comp.path = Components_1.default.getComponentPath(comp);
245
244
  key = newKey;
246
245
  });
247
246
  const valueComponent = lodash_1.default.clone(this.component.valueComponent);
@@ -924,6 +924,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
924
924
  const options = lodash_1.default.clone(this.options);
925
925
  options.name += `[${rowIndex}]`;
926
926
  options.row = `${rowIndex}-${colIndex}`;
927
+ options.rowIndex = rowIndex;
927
928
  options.onChange = (flags = {}, changed, modified) => {
928
929
  var _a, _b;
929
930
  if (((_a = changed.instance.root) === null || _a === void 0 ? void 0 : _a.id) && (((_b = this.root) === null || _b === void 0 ? void 0 : _b.id) !== changed.instance.root.id)) {
@@ -938,7 +939,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
938
939
  const editRow = this.editRows[rowIndex];
939
940
  if (editRow) {
940
941
  this.processRow('checkData', null, Object.assign(Object.assign({}, flags), { changed }), editRow.data, editRow.components);
941
- this.validateRow(editRow, false);
942
+ this.validateRow(editRow, false, false);
942
943
  }
943
944
  if (this.variableTypeComponentsIndexes.length) {
944
945
  this.checkRowVariableTypeComponents(editRow, rowIndex);
@@ -980,22 +981,21 @@ class EditGridComponent extends NestedArrayComponent_1.default {
980
981
  var _a;
981
982
  editRow.errors = [];
982
983
  if (this.shouldValidateRow(editRow, dirty, fromSubmission)) {
983
- const silentCheck = (this.component.rowDrafts && !this.shouldValidateDraft(editRow)) || forceSilentCheck;
984
+ const silentCheck = forceSilentCheck === false ? false : ((this.component.rowDrafts && !this.shouldValidateDraft(editRow)) || forceSilentCheck);
984
985
  const rootValue = (0, utils_1.fastCloneDeep)(this.rootValue);
985
986
  const editGridValue = lodash_1.default.get(rootValue, this.path, []);
986
987
  editGridValue[editRow.rowIndex] = editRow.data;
987
988
  lodash_1.default.set(rootValue, this.path, editGridValue);
988
989
  const validationProcessorProcess = (context) => this.validationProcessor(context, { dirty, silentCheck });
989
990
  const errors = (0, process_1.processSync)({
990
- components: (0, utils_1.fastCloneDeep)(this.component.components).map((component) => {
991
- component.parentPath = `${this.path}[${editRow.rowIndex}]`;
992
- return component;
993
- }),
991
+ components: this.component.components,
994
992
  data: rootValue,
995
993
  row: editRow.data,
996
994
  process: 'validateRow',
997
995
  instances: this.componentsMap,
998
996
  scope: { errors: [] },
997
+ parent: this.component,
998
+ parentPaths: Object.assign(Object.assign({}, this.paths), { dataIndex: editRow.rowIndex }),
999
999
  processors: [
1000
1000
  {
1001
1001
  process: validationProcessorProcess,
@@ -21,7 +21,7 @@ export default class FormComponent extends Component {
21
21
  get useOriginalRevision(): any;
22
22
  setFormRevision(rev: any): void;
23
23
  subFormRevision: any;
24
- getComponent(path: any, fn: any): any;
24
+ getComponent(path: any): any;
25
25
  getSubOptions(options?: {}): {};
26
26
  render(): string;
27
27
  asString(value: any): any;
@@ -55,8 +55,6 @@ export default class FormComponent extends Component {
55
55
  */
56
56
  loadSubForm(fromAttach: boolean): Promise<any>;
57
57
  subFormLoading: boolean | undefined;
58
- get subFormData(): any;
59
- checkComponentValidity(data: any, dirty: any, row: any, options: any, errors?: any[]): any;
60
58
  checkComponentConditions(data: any, flags: any, row: any): any;
61
59
  calculateValue(data: any, flags: any, row: any): any;
62
60
  setPristine(pristine: any): void;
@@ -90,6 +88,13 @@ export default class FormComponent extends Component {
90
88
  isHidden(): boolean;
91
89
  setValue(submission: any, flags?: {}): boolean;
92
90
  setSubFormValue(submission: any, flags: any): void;
91
+ /**
92
+ * Sets the subform value
93
+ * @param {object|null|undefined} submission - The submission to set.
94
+ * @param {object|null|undefined} flags - Any flags to apply when setting the submission.
95
+ * @return {void}
96
+ */
97
+ onSetSubFormValue(submission: object | null | undefined, flags: object | null | undefined): void;
93
98
  areAllComponentsEmpty(data: any): boolean;
94
99
  updateSubFormVisibility(): void;
95
100
  /**
@@ -133,15 +133,11 @@ class FormComponent extends Component_1.default {
133
133
  this.subFormRevision = undefined;
134
134
  }
135
135
  }
136
- getComponent(path, fn) {
137
- path = (0, utils_1.getArrayFromComponentPath)(path);
138
- if (path[0] === 'data') {
139
- path.shift();
140
- }
141
- const originalPathStr = `${this.path}.data.${(0, utils_1.getStringFromComponentPath)(path)}`;
142
- if (this.subForm) {
143
- return this.subForm.getComponent(path, fn, originalPathStr);
136
+ getComponent(path) {
137
+ if (!this.subForm) {
138
+ return null;
144
139
  }
140
+ return this.subForm.getComponent(path);
145
141
  }
146
142
  /* eslint-disable max-statements */
147
143
  getSubOptions(options = {}) {
@@ -209,6 +205,7 @@ class FormComponent extends Component_1.default {
209
205
  if (this.options.skipDraftRestore) {
210
206
  options.skipDraftRestore = this.options.skipDraftRestore;
211
207
  }
208
+ options.parent = this;
212
209
  return options;
213
210
  }
214
211
  /* eslint-enable max-statements */
@@ -297,6 +294,7 @@ class FormComponent extends Component_1.default {
297
294
  const modalShouldBeOpened = this.componentModal ? this.componentModal.isOpened : false;
298
295
  const currentValue = modalShouldBeOpened ? this.componentModal.currentValue : this.dataValue;
299
296
  this.componentModal = new ComponentModal_1.default(this, element, modalShouldBeOpened, currentValue, this._referenceAttributeName);
297
+ this.subForm.element = this.componentModal.refs.componentContent || this.subForm.element;
300
298
  this.setOpenModalElement();
301
299
  }
302
300
  this.calculateValue();
@@ -395,6 +393,10 @@ class FormComponent extends Component_1.default {
395
393
  return (new Form_1.default(form, this.getSubOptions())).ready.then((instance) => {
396
394
  this.subForm = instance;
397
395
  this.subForm.currentForm = this;
396
+ const componentsMap = this.componentsMap;
397
+ const formComponentsMap = this.subForm.componentsMap;
398
+ lodash_1.default.assign(componentsMap, formComponentsMap);
399
+ this.component.components = this.subForm.components.map((comp) => comp.component);
398
400
  this.subForm.parent = this;
399
401
  this.subForm.parentVisible = this.visible;
400
402
  this.subForm.on('change', () => {
@@ -413,6 +415,8 @@ class FormComponent extends Component_1.default {
413
415
  this.valueChanged = this.hasSetValue;
414
416
  this.onChange();
415
417
  return this.subForm;
418
+ }).catch((err) => {
419
+ console.log(err);
416
420
  });
417
421
  }).then((subForm) => {
418
422
  this.updateSubWizards(subForm);
@@ -469,18 +473,6 @@ class FormComponent extends Component_1.default {
469
473
  }
470
474
  return Promise.resolve();
471
475
  }
472
- get subFormData() {
473
- var _a;
474
- return ((_a = this.dataValue) === null || _a === void 0 ? void 0 : _a.data) || {};
475
- }
476
- checkComponentValidity(data, dirty, row, options, errors = []) {
477
- options = options || {};
478
- const silentCheck = options.silentCheck || false;
479
- if (this.subForm) {
480
- return this.subForm.checkValidity(this.subFormData, dirty, null, silentCheck, errors);
481
- }
482
- return super.checkComponentValidity(data, dirty, row, options, errors);
483
- }
484
476
  checkComponentConditions(data, flags, row) {
485
477
  const visible = super.checkComponentConditions(data, flags, row);
486
478
  // Return if already hidden
@@ -488,14 +480,14 @@ class FormComponent extends Component_1.default {
488
480
  return visible;
489
481
  }
490
482
  if (this.subForm) {
491
- return this.subForm.checkConditions(this.subFormData);
483
+ return this.subForm.checkConditions(data, flags, row);
492
484
  }
493
485
  // There are few cases when subForm is not loaded when a change is triggered,
494
486
  // so we need to perform checkConditions after it is ready, or some conditional fields might be hidden in View mode
495
487
  else if (this.subFormReady) {
496
488
  this.subFormReady.then(() => {
497
489
  if (this.subForm) {
498
- return this.subForm.checkConditions(this.subFormData);
490
+ return this.subForm.checkConditions(data, flags, row);
499
491
  }
500
492
  });
501
493
  }
@@ -503,7 +495,7 @@ class FormComponent extends Component_1.default {
503
495
  }
504
496
  calculateValue(data, flags, row) {
505
497
  if (this.subForm) {
506
- return this.subForm.calculateValue(this.subFormData, flags);
498
+ return this.subForm.calculateValue(data, flags, row);
507
499
  }
508
500
  return super.calculateValue(data, flags, row);
509
501
  }
@@ -545,7 +537,7 @@ class FormComponent extends Component_1.default {
545
537
  }
546
538
  this.subForm.nosubmit = false;
547
539
  this.subForm.submitted = true;
548
- return this.subForm.submitForm().then(result => {
540
+ return this.subForm.submitForm({}, true).then(result => {
549
541
  this.subForm.loading = false;
550
542
  this.subForm.showAllErrors = false;
551
543
  this.dataValue = result.submission;
@@ -649,9 +641,18 @@ class FormComponent extends Component_1.default {
649
641
  });
650
642
  }
651
643
  else {
652
- this.subForm.setValue(submission, flags);
644
+ this.onSetSubFormValue(submission, flags);
653
645
  }
654
646
  }
647
+ /**
648
+ * Sets the subform value
649
+ * @param {object|null|undefined} submission - The submission to set.
650
+ * @param {object|null|undefined} flags - Any flags to apply when setting the submission.
651
+ * @return {void}
652
+ */
653
+ onSetSubFormValue(submission, flags) {
654
+ this.subForm.setValue(submission, flags);
655
+ }
655
656
  isEmpty(value = this.dataValue) {
656
657
  return value === null || lodash_1.default.isEqual(value, this.emptyValue) || (this.areAllComponentsEmpty(value === null || value === void 0 ? void 0 : value.data) && !(value === null || value === void 0 ? void 0 : value._id));
657
658
  }
@@ -275,7 +275,6 @@ class SelectBoxesComponent extends Radio_1.default {
275
275
  else {
276
276
  return super.setCustomValidity(messages, dirty, external);
277
277
  }
278
- ;
279
278
  }
280
279
  validateValueAvailability(setting, value) {
281
280
  if (!(0, utils_1.boolValue)(setting) || !value) {
@@ -22,7 +22,6 @@ export default class SignatureComponent extends Input {
22
22
  showCanvas(show: any): void;
23
23
  onDisabled(): void;
24
24
  checkSize(force: any, scale: any): void;
25
- getModalPreviewTemplate(): any;
26
25
  signaturePad: SignaturePad | null | undefined;
27
26
  observer: any;
28
27
  getValueAsString(value: any): "" | "Yes" | "No";
@@ -172,7 +172,7 @@ class SignatureComponent extends Input_1.default {
172
172
  return false;
173
173
  }
174
174
  getModalPreviewTemplate() {
175
- return this.renderTemplate('modalPreview', {
175
+ return this.renderModalPreview({
176
176
  previewText: this.dataValue ?
177
177
  `<img src=${this.dataValue} ${this._referenceAttributeName}='openModal' style="width: 100%;height: 100%;" />` :
178
178
  this.t('Click to Sign')
@@ -20,13 +20,13 @@ class DateGeaterThan extends ConditionOperator_1.default {
20
20
  }
21
21
  execute(options, functionName = 'isAfter') {
22
22
  var _a;
23
- const { value, instance, conditionComponentPath } = options;
23
+ const { value, instance, path } = options;
24
24
  if (!value) {
25
25
  return false;
26
26
  }
27
27
  let conditionTriggerComponent = null;
28
28
  if ((_a = instance === null || instance === void 0 ? void 0 : instance.root) === null || _a === void 0 ? void 0 : _a.getComponent) {
29
- conditionTriggerComponent = instance.root.getComponent(conditionComponentPath);
29
+ conditionTriggerComponent = instance.root.getComponent(path);
30
30
  }
31
31
  if (conditionTriggerComponent && conditionTriggerComponent.isPartialDay && conditionTriggerComponent.isPartialDay(value)) {
32
32
  return false;
@@ -1,8 +1,8 @@
1
1
  export default class IsEmptyValue extends ConditionOperator {
2
- execute({ value, instance, conditionComponentPath }: {
2
+ execute({ value, instance, path }: {
3
3
  value: any;
4
4
  instance: any;
5
- conditionComponentPath: any;
5
+ path: any;
6
6
  }): any;
7
7
  getResult(options: any): any;
8
8
  }