@formio/js 5.0.0 → 5.1.0-rc.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.
- package/dist/formio.embed.js +1 -1
- package/dist/formio.embed.min.js +1 -1
- package/dist/formio.embed.min.js.LICENSE.txt +1 -1
- package/dist/formio.form.js +127 -116
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +3 -3
- package/dist/formio.full.js +128 -117
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +3 -3
- package/dist/formio.js +3013 -283
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +14 -2
- package/dist/formio.utils.js +60 -49
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +3 -3
- package/lib/cjs/Webform.d.ts +8 -1
- package/lib/cjs/Webform.js +40 -32
- package/lib/cjs/WebformBuilder.js +4 -12
- package/lib/cjs/Wizard.js +4 -11
- package/lib/cjs/components/Components.d.ts +0 -7
- package/lib/cjs/components/Components.js +1 -33
- package/lib/cjs/components/_classes/component/Component.d.ts +52 -7
- package/lib/cjs/components/_classes/component/Component.js +120 -42
- package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +2 -2
- package/lib/cjs/components/_classes/componentModal/ComponentModal.d.ts +1 -0
- package/lib/cjs/components/_classes/componentModal/ComponentModal.js +1 -0
- package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +4 -19
- package/lib/cjs/components/_classes/nested/NestedComponent.js +54 -60
- package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -1
- package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +7 -44
- package/lib/cjs/components/datagrid/DataGrid.d.ts +0 -1
- package/lib/cjs/components/datagrid/DataGrid.js +1 -45
- package/lib/cjs/components/datamap/DataMap.js +2 -3
- package/lib/cjs/components/editgrid/EditGrid.js +8 -11
- package/lib/cjs/components/form/Form.d.ts +8 -3
- package/lib/cjs/components/form/Form.js +31 -29
- package/lib/cjs/components/html/HTML.js +15 -3
- package/lib/cjs/components/selectboxes/SelectBoxes.js +0 -1
- package/lib/cjs/components/signature/Signature.d.ts +0 -1
- package/lib/cjs/components/signature/Signature.js +1 -1
- package/lib/cjs/utils/conditionOperators/DateGreaterThan.js +2 -2
- package/lib/cjs/utils/conditionOperators/IsEmptyValue.d.ts +2 -2
- package/lib/cjs/utils/conditionOperators/IsEmptyValue.js +2 -2
- package/lib/cjs/utils/conditionOperators/IsEqualTo.d.ts +2 -2
- package/lib/cjs/utils/conditionOperators/IsEqualTo.js +2 -2
- package/lib/cjs/utils/formUtils.d.ts +25 -14
- package/lib/cjs/utils/formUtils.js +11 -16
- package/lib/cjs/utils/utils.d.ts +1 -3
- package/lib/cjs/utils/utils.js +19 -35
- package/lib/mjs/Webform.d.ts +8 -1
- package/lib/mjs/Webform.js +37 -31
- package/lib/mjs/WebformBuilder.js +4 -12
- package/lib/mjs/Wizard.js +2 -8
- package/lib/mjs/components/Components.d.ts +0 -7
- package/lib/mjs/components/Components.js +1 -32
- package/lib/mjs/components/_classes/component/Component.d.ts +52 -7
- package/lib/mjs/components/_classes/component/Component.js +130 -43
- package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +2 -2
- package/lib/mjs/components/_classes/componentModal/ComponentModal.d.ts +1 -0
- package/lib/mjs/components/_classes/componentModal/ComponentModal.js +1 -0
- package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +4 -19
- package/lib/mjs/components/_classes/nested/NestedComponent.js +55 -61
- package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -1
- package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +8 -43
- package/lib/mjs/components/datagrid/DataGrid.d.ts +0 -1
- package/lib/mjs/components/datagrid/DataGrid.js +1 -45
- package/lib/mjs/components/datamap/DataMap.js +2 -3
- package/lib/mjs/components/editgrid/EditGrid.js +11 -11
- package/lib/mjs/components/form/Form.d.ts +8 -3
- package/lib/mjs/components/form/Form.js +32 -29
- package/lib/mjs/components/html/HTML.js +15 -3
- package/lib/mjs/components/selectboxes/SelectBoxes.js +0 -1
- package/lib/mjs/components/signature/Signature.d.ts +0 -1
- package/lib/mjs/components/signature/Signature.js +1 -1
- package/lib/mjs/utils/conditionOperators/DateGreaterThan.js +2 -2
- package/lib/mjs/utils/conditionOperators/IsEmptyValue.d.ts +2 -2
- package/lib/mjs/utils/conditionOperators/IsEmptyValue.js +2 -2
- package/lib/mjs/utils/conditionOperators/IsEqualTo.d.ts +2 -2
- package/lib/mjs/utils/conditionOperators/IsEqualTo.js +2 -2
- package/lib/mjs/utils/formUtils.d.ts +25 -14
- package/lib/mjs/utils/formUtils.js +2 -12
- package/lib/mjs/utils/utils.d.ts +1 -3
- package/lib/mjs/utils/utils.js +18 -33
- package/package.json +4 -4
@@ -2,7 +2,8 @@
|
|
2
2
|
import _ from 'lodash';
|
3
3
|
import Field from '../field/Field';
|
4
4
|
import Components from '../../Components';
|
5
|
-
|
5
|
+
'';
|
6
|
+
import { getComponentPaths, getRandomComponentId, componentMatches, getBestMatch, getStringFromComponentPath } from '../../../utils/utils';
|
6
7
|
import { process as processAsync, processSync } from '@formio/core/process';
|
7
8
|
/**
|
8
9
|
* NestedComponent class.
|
@@ -80,17 +81,26 @@ export default class NestedComponent extends Field {
|
|
80
81
|
const visibilityChanged = this._visible !== value;
|
81
82
|
this._visible = value;
|
82
83
|
const isVisible = this.visible;
|
84
|
+
const isConditionallyHidden = this.checkConditionallyHidden();
|
83
85
|
const forceShow = this.shouldForceShow();
|
84
86
|
const forceHide = this.shouldForceHide();
|
85
|
-
this.components.forEach(component => {
|
87
|
+
this.components.forEach((component) => {
|
86
88
|
// Set the parent visibility first since we may have nested components within nested components
|
87
89
|
// and they need to be able to determine their visibility based on the parent visibility.
|
88
90
|
component.parentVisible = isVisible;
|
89
|
-
|
90
|
-
|
91
|
+
component._parentConditionallyHidden = isConditionallyHidden;
|
92
|
+
let visible;
|
93
|
+
if (component.hasCondition()) {
|
94
|
+
component._conditionallyHidden = component.checkConditionallyHidden() || component._parentConditionallyHidden;
|
95
|
+
visible = !component.conditionallyHidden;
|
96
|
+
}
|
97
|
+
else {
|
98
|
+
visible = !component.component.hidden;
|
99
|
+
}
|
100
|
+
if (forceShow || visible) {
|
91
101
|
component.visible = true;
|
92
102
|
}
|
93
|
-
else if (forceHide || !isVisible || !
|
103
|
+
else if (forceHide || !isVisible || !visible) {
|
94
104
|
component.visible = false;
|
95
105
|
}
|
96
106
|
// If hiding a nested component, clear all errors below.
|
@@ -99,7 +109,6 @@ export default class NestedComponent extends Field {
|
|
99
109
|
}
|
100
110
|
});
|
101
111
|
if (visibilityChanged) {
|
102
|
-
this.clearOnHide();
|
103
112
|
this.redraw();
|
104
113
|
}
|
105
114
|
}
|
@@ -198,6 +207,10 @@ export default class NestedComponent extends Field {
|
|
198
207
|
*/
|
199
208
|
set rowIndex(value) {
|
200
209
|
this._rowIndex = value;
|
210
|
+
this.paths = getComponentPaths(this.component, this.parent?.component, {
|
211
|
+
...(this.parent?.paths || {}),
|
212
|
+
...{ dataIndex: value }
|
213
|
+
});
|
201
214
|
this.eachComponent((component) => {
|
202
215
|
component.rowIndex = value;
|
203
216
|
});
|
@@ -293,56 +306,36 @@ export default class NestedComponent extends Field {
|
|
293
306
|
});
|
294
307
|
}
|
295
308
|
/**
|
296
|
-
* Returns a component provided a key. This performs a deep search within the
|
297
|
-
* component tree.
|
309
|
+
* Returns a component provided a key. This performs a deep search within the component tree.
|
298
310
|
* @param {string} path - The path to the component.
|
299
|
-
* @param {Function} [fn] - Called with the component once found.
|
300
|
-
* @param {string} [originalPath] - The original path to the component.
|
301
311
|
* @returns {any} - The component that is located.
|
302
312
|
*/
|
303
|
-
getComponent(path
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
const matchPath = component.hasInput && component.path ? pathStr.includes(component.path) : true;
|
328
|
-
if (component.component.key === key) {
|
329
|
-
possibleComp = component;
|
330
|
-
if (matchPath) {
|
331
|
-
comp = component;
|
332
|
-
if (remainingPath.length > 0 && 'getComponent' in component) {
|
333
|
-
comp = component.getComponent(remainingPath, fn, originalPath);
|
334
|
-
}
|
335
|
-
else if (fn) {
|
336
|
-
fn(component, components);
|
337
|
-
}
|
338
|
-
return false;
|
339
|
-
}
|
340
|
-
}
|
313
|
+
getComponent(path) {
|
314
|
+
path = getStringFromComponentPath(path);
|
315
|
+
const matches = {
|
316
|
+
path: undefined,
|
317
|
+
fullPath: undefined,
|
318
|
+
localPath: undefined,
|
319
|
+
fullLocalPath: undefined,
|
320
|
+
dataPath: undefined,
|
321
|
+
localDataPath: undefined,
|
322
|
+
key: undefined,
|
323
|
+
};
|
324
|
+
this.everyComponent((component) => {
|
325
|
+
// All searches are relative to this component so replace this path from the child paths.
|
326
|
+
componentMatches(component.component, {
|
327
|
+
path: component.paths?.path?.replace(new RegExp(`^${this.paths?.path}\\.?`), ''),
|
328
|
+
fullPath: component.paths?.fullPath?.replace(new RegExp(`^${this.paths?.fullPath}\\.?`), ''),
|
329
|
+
localPath: component.paths?.localPath?.replace(new RegExp(`^${this.paths?.localPath}\\.?`), ''),
|
330
|
+
fullLocalPath: component.paths?.fullLocalPath?.replace(new RegExp(`^${this.paths?.fullLocalPath}\\.?`), ''),
|
331
|
+
dataPath: component.paths?.dataPath?.replace(new RegExp(`^${this.paths?.dataPath}\\.?`), ''),
|
332
|
+
localDataPath: component.paths?.localDataPath?.replace(new RegExp(`^${this.paths?.localDataPath}\\.?`), ''),
|
333
|
+
}, path, this.rowIndex, matches, (type, match) => {
|
334
|
+
match.instance = component;
|
335
|
+
return match;
|
336
|
+
});
|
341
337
|
});
|
342
|
-
|
343
|
-
comp = possibleComp;
|
344
|
-
}
|
345
|
-
return comp;
|
338
|
+
return getBestMatch(matches)?.instance;
|
346
339
|
}
|
347
340
|
/**
|
348
341
|
* Return a component provided the Id of the component.
|
@@ -380,6 +373,7 @@ export default class NestedComponent extends Field {
|
|
380
373
|
data = data || this.data;
|
381
374
|
options.parent = this;
|
382
375
|
options.parentVisible = this.visible;
|
376
|
+
options.parentConditionallyHidden = this.conditionallyHidden;
|
383
377
|
options.root = options?.root || this.root || this;
|
384
378
|
options.localRoot = this.localRoot;
|
385
379
|
options.skipInit = true;
|
@@ -638,7 +632,7 @@ export default class NestedComponent extends Field {
|
|
638
632
|
clearOnHide(show) {
|
639
633
|
super.clearOnHide(show);
|
640
634
|
if (this.component.clearOnHide) {
|
641
|
-
if (this.allowData && !this.hasValue() && !
|
635
|
+
if (this.allowData && !this.hasValue() && !this.conditionallyHidden) {
|
642
636
|
this.dataValue = this.defaultValue;
|
643
637
|
}
|
644
638
|
if (this.hasValue()) {
|
@@ -667,7 +661,7 @@ export default class NestedComponent extends Field {
|
|
667
661
|
}
|
668
662
|
calculateValue(data, flags, row) {
|
669
663
|
// Do not iterate into children and calculateValues if this nested component is conditionally hidden.
|
670
|
-
if (
|
664
|
+
if (this.conditionallyHidden) {
|
671
665
|
return false;
|
672
666
|
}
|
673
667
|
return this.getComponents().reduce((changed, comp) => comp.calculateValue(data, flags, row) || changed, super.calculateValue(data, flags, row));
|
@@ -678,19 +672,16 @@ export default class NestedComponent extends Field {
|
|
678
672
|
isValid(data, dirty) {
|
679
673
|
return this.getComponents().reduce((valid, comp) => comp.isValid(data, dirty) && valid, super.isValid(data, dirty));
|
680
674
|
}
|
681
|
-
validationProcessor({ scope, data, row, instance,
|
675
|
+
validationProcessor({ scope, data, row, instance, paths }, flags) {
|
682
676
|
const { dirty } = flags;
|
683
677
|
if (this.root.hasExtraPages && this.page !== this.root.page) {
|
684
|
-
instance = this.
|
685
|
-
? this.
|
686
|
-
: this.getComponent(
|
678
|
+
instance = this.componentsMap?.hasOwnProperty(paths.dataPath)
|
679
|
+
? this.componentsMap[paths.dataPath]
|
680
|
+
: this.getComponent(paths.dataPath);
|
687
681
|
}
|
688
682
|
if (!instance) {
|
689
683
|
return;
|
690
684
|
}
|
691
|
-
if (!instance.component.path) {
|
692
|
-
instance.component.path = component.path;
|
693
|
-
}
|
694
685
|
instance.checkComponentValidity(data, dirty, row, flags, scope.errors);
|
695
686
|
if (instance.processOwnValidation) {
|
696
687
|
scope.noRecurse = true;
|
@@ -722,7 +713,10 @@ export default class NestedComponent extends Field {
|
|
722
713
|
components,
|
723
714
|
instances: this.componentsMap,
|
724
715
|
data: data,
|
716
|
+
local: !!flags.local,
|
725
717
|
scope: { errors: [] },
|
718
|
+
parent: this.component,
|
719
|
+
parentPaths: this.paths,
|
726
720
|
processors: [
|
727
721
|
{
|
728
722
|
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;
|
@@ -1,6 +1,8 @@
|
|
1
1
|
'use strict';
|
2
2
|
import _ from 'lodash';
|
3
|
-
import {
|
3
|
+
import { Utils } from '@formio/core/utils';
|
4
|
+
const { getComponentPaths } = Utils;
|
5
|
+
import { componentValueTypes, isLayoutComponent } from '../../../utils/utils';
|
4
6
|
import Component from '../component/Component';
|
5
7
|
import NestedDataComponent from '../nesteddata/NestedDataComponent';
|
6
8
|
export default class NestedArrayComponent extends NestedDataComponent {
|
@@ -19,9 +21,13 @@ export default class NestedArrayComponent extends NestedDataComponent {
|
|
19
21
|
throw new Error('Getter #iteratableRows() is not implemented');
|
20
22
|
}
|
21
23
|
get rowIndex() {
|
22
|
-
return
|
24
|
+
return this._rowIndex;
|
23
25
|
}
|
24
26
|
set rowIndex(value) {
|
27
|
+
this.paths = getComponentPaths(this.component, this.parent?.component, {
|
28
|
+
...(this.parent?.paths || {}),
|
29
|
+
...{ dataIndex: value }
|
30
|
+
});
|
25
31
|
this._rowIndex = value;
|
26
32
|
}
|
27
33
|
init() {
|
@@ -84,47 +90,6 @@ export default class NestedArrayComponent extends NestedDataComponent {
|
|
84
90
|
value: this.dataValue,
|
85
91
|
}, 'show'));
|
86
92
|
}
|
87
|
-
getComponent(path, fn, originalPath) {
|
88
|
-
originalPath = originalPath || getStringFromComponentPath(path);
|
89
|
-
if (this.componentsMap.hasOwnProperty(originalPath)) {
|
90
|
-
if (fn) {
|
91
|
-
return fn(this.componentsMap[originalPath]);
|
92
|
-
}
|
93
|
-
else {
|
94
|
-
return this.componentsMap[originalPath];
|
95
|
-
}
|
96
|
-
}
|
97
|
-
path = Array.isArray(path) ? path : [path];
|
98
|
-
let key = path.shift();
|
99
|
-
const remainingPath = path;
|
100
|
-
let result = [];
|
101
|
-
let possibleComp = null;
|
102
|
-
let comp = null;
|
103
|
-
let rowIndex = null;
|
104
|
-
if (_.isNumber(key)) {
|
105
|
-
rowIndex = key;
|
106
|
-
key = remainingPath.shift();
|
107
|
-
}
|
108
|
-
if (!_.isString(key)) {
|
109
|
-
return result;
|
110
|
-
}
|
111
|
-
this.everyComponent((component, components) => {
|
112
|
-
if (component.component.key === key) {
|
113
|
-
possibleComp = component;
|
114
|
-
if (remainingPath.length > 0 && 'getComponent' in component) {
|
115
|
-
comp = component.getComponent(remainingPath, fn, originalPath);
|
116
|
-
}
|
117
|
-
else if (fn) {
|
118
|
-
fn(component, components);
|
119
|
-
}
|
120
|
-
result = rowIndex !== null ? comp : result.concat(comp || possibleComp);
|
121
|
-
}
|
122
|
-
}, rowIndex);
|
123
|
-
if ((!result || result.length === 0) && possibleComp) {
|
124
|
-
result = rowIndex !== null ? possibleComp : [possibleComp];
|
125
|
-
}
|
126
|
-
return result;
|
127
|
-
}
|
128
93
|
everyComponent(fn, rowIndex, options = {}) {
|
129
94
|
if (_.isObject(rowIndex)) {
|
130
95
|
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';
|
@@ -1,7 +1,6 @@
|
|
1
1
|
import _ from 'lodash';
|
2
2
|
import NestedArrayComponent from '../_classes/nestedarray/NestedArrayComponent';
|
3
3
|
import { fastCloneDeep, getFocusableElements } from '../../utils/utils';
|
4
|
-
import Components from '../Components';
|
5
4
|
import dragula from 'dragula';
|
6
5
|
export default class DataGridComponent extends NestedArrayComponent {
|
7
6
|
static schema(...extend) {
|
@@ -407,7 +406,6 @@ export default class DataGridComponent extends NestedArrayComponent {
|
|
407
406
|
}
|
408
407
|
component.rowIndex = rowIndex;
|
409
408
|
component.row = `${rowIndex}-${colIndex}`;
|
410
|
-
component.path = Components.getComponentPath(component);
|
411
409
|
});
|
412
410
|
}
|
413
411
|
updateRowsComponents(rowIndex) {
|
@@ -473,6 +471,7 @@ export default class DataGridComponent extends NestedArrayComponent {
|
|
473
471
|
const options = _.clone(this.options);
|
474
472
|
options.name += `[${rowIndex}]`;
|
475
473
|
options.row = `${rowIndex}-${colIndex}`;
|
474
|
+
options.rowIndex = rowIndex;
|
476
475
|
let columnComponent;
|
477
476
|
if (this.builderMode) {
|
478
477
|
col.id = col.id + rowIndex;
|
@@ -595,49 +594,6 @@ export default class DataGridComponent extends NestedArrayComponent {
|
|
595
594
|
restoreComponentsContext() {
|
596
595
|
this.rows.forEach((row, index) => _.forIn(row, (component) => component.data = this.dataValue[index]));
|
597
596
|
}
|
598
|
-
getComponent(path, fn) {
|
599
|
-
path = Array.isArray(path) ? path : [path];
|
600
|
-
const [key, ...remainingPath] = path;
|
601
|
-
let result = [];
|
602
|
-
if (_.isNumber(key) && remainingPath.length) {
|
603
|
-
const compKey = remainingPath.pop();
|
604
|
-
result = this.rows[key][compKey];
|
605
|
-
// If the component is inside a Layout Component, try to find it among all the row's components
|
606
|
-
if (!result) {
|
607
|
-
Object.entries(this.rows[key]).forEach(([, comp]) => {
|
608
|
-
if ('getComponent' in comp) {
|
609
|
-
const possibleResult = comp.getComponent([compKey], fn);
|
610
|
-
if (possibleResult) {
|
611
|
-
result = possibleResult;
|
612
|
-
}
|
613
|
-
}
|
614
|
-
});
|
615
|
-
}
|
616
|
-
if (result && _.isFunction(fn)) {
|
617
|
-
fn(result, this.getComponents());
|
618
|
-
}
|
619
|
-
if (remainingPath.length && 'getComponent' in result) {
|
620
|
-
return result.getComponent(remainingPath, fn);
|
621
|
-
}
|
622
|
-
return result;
|
623
|
-
}
|
624
|
-
if (!_.isString(key)) {
|
625
|
-
return result;
|
626
|
-
}
|
627
|
-
this.everyComponent((component, components) => {
|
628
|
-
if (component.component.key === key) {
|
629
|
-
let comp = component;
|
630
|
-
if (remainingPath.length > 0 && 'getComponent' in component) {
|
631
|
-
comp = component.getComponent(remainingPath, fn);
|
632
|
-
}
|
633
|
-
else if (fn) {
|
634
|
-
fn(component, components);
|
635
|
-
}
|
636
|
-
result = result.concat(comp);
|
637
|
-
}
|
638
|
-
});
|
639
|
-
return result.length > 0 ? result : null;
|
640
|
-
}
|
641
597
|
toggleGroup(element, index) {
|
642
598
|
element.classList.toggle('collapsed');
|
643
599
|
_.each(this.refs.chunks[index], row => {
|
@@ -3,7 +3,6 @@ import DataGridComponent from '../datagrid/DataGrid';
|
|
3
3
|
import _ from 'lodash';
|
4
4
|
import EventEmitter from 'eventemitter3';
|
5
5
|
import { componentValueTypes, getComponentSavedTypes, uniqueKey } from '../../utils/utils';
|
6
|
-
import Components from '../Components';
|
7
6
|
export default class DataMapComponent extends DataGridComponent {
|
8
7
|
static schema(...extend) {
|
9
8
|
return Component.schema({
|
@@ -70,7 +69,7 @@ export default class DataMapComponent extends DataGridComponent {
|
|
70
69
|
}
|
71
70
|
get dataValue() {
|
72
71
|
if (!this.key ||
|
73
|
-
(
|
72
|
+
(this.conditionallyHidden && this.component.clearOnHide)) {
|
74
73
|
return this.emptyValue;
|
75
74
|
}
|
76
75
|
if (!this.hasValue() && this.shouldAddDefaultValue) {
|
@@ -227,6 +226,7 @@ export default class DataMapComponent extends DataGridComponent {
|
|
227
226
|
options.events = new EventEmitter();
|
228
227
|
options.name += `[${rowIndex}]`;
|
229
228
|
options.row = `${rowIndex}`;
|
229
|
+
options.rowIndex = rowIndex;
|
230
230
|
const components = {};
|
231
231
|
components['__key'] = this.createComponent(this.keySchema, options, { __key: this.builderMode ? this.defaultRowKey : key });
|
232
232
|
components['__key'].on('componentChange', (event) => {
|
@@ -236,7 +236,6 @@ export default class DataMapComponent extends DataGridComponent {
|
|
236
236
|
delete dataValue[key];
|
237
237
|
const comp = components[this.valueKey];
|
238
238
|
comp.component.key = newKey;
|
239
|
-
comp.path = Components.getComponentPath(comp);
|
240
239
|
key = newKey;
|
241
240
|
});
|
242
241
|
const valueComponent = _.clone(this.component.valueComponent);
|
@@ -913,6 +913,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
913
913
|
const options = _.clone(this.options);
|
914
914
|
options.name += `[${rowIndex}]`;
|
915
915
|
options.row = `${rowIndex}-${colIndex}`;
|
916
|
+
options.rowIndex = rowIndex;
|
916
917
|
options.onChange = (flags = {}, changed, modified) => {
|
917
918
|
if (changed.instance.root?.id && (this.root?.id !== changed.instance.root.id)) {
|
918
919
|
changed.instance.root.triggerChange(flags, changed, modified);
|
@@ -929,7 +930,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
929
930
|
...flags,
|
930
931
|
changed,
|
931
932
|
}, editRow.data, editRow.components);
|
932
|
-
this.validateRow(editRow, false);
|
933
|
+
this.validateRow(editRow, false, false);
|
933
934
|
}
|
934
935
|
if (this.variableTypeComponentsIndexes.length) {
|
935
936
|
this.checkRowVariableTypeComponents(editRow, rowIndex);
|
@@ -969,22 +970,24 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
969
970
|
validateRow(editRow, dirty, forceSilentCheck, fromSubmission) {
|
970
971
|
editRow.errors = [];
|
971
972
|
if (this.shouldValidateRow(editRow, dirty, fromSubmission)) {
|
972
|
-
const silentCheck = (this.component.rowDrafts && !this.shouldValidateDraft(editRow)) || forceSilentCheck;
|
973
|
+
const silentCheck = forceSilentCheck === false ? false : ((this.component.rowDrafts && !this.shouldValidateDraft(editRow)) || forceSilentCheck);
|
973
974
|
const rootValue = fastCloneDeep(this.rootValue);
|
974
975
|
const editGridValue = _.get(rootValue, this.path, []);
|
975
976
|
editGridValue[editRow.rowIndex] = editRow.data;
|
976
977
|
_.set(rootValue, this.path, editGridValue);
|
977
978
|
const validationProcessorProcess = (context) => this.validationProcessor(context, { dirty, silentCheck });
|
978
979
|
const errors = processSync({
|
979
|
-
components:
|
980
|
-
component.parentPath = `${this.path}[${editRow.rowIndex}]`;
|
981
|
-
return component;
|
982
|
-
}),
|
980
|
+
components: this.component.components,
|
983
981
|
data: rootValue,
|
984
982
|
row: editRow.data,
|
985
983
|
process: 'validateRow',
|
986
984
|
instances: this.componentsMap,
|
987
985
|
scope: { errors: [] },
|
986
|
+
parent: this.component,
|
987
|
+
parentPaths: {
|
988
|
+
...this.paths,
|
989
|
+
dataIndex: editRow.rowIndex
|
990
|
+
},
|
988
991
|
processors: [
|
989
992
|
{
|
990
993
|
process: validationProcessorProcess,
|
@@ -1129,7 +1132,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
1129
1132
|
}
|
1130
1133
|
}
|
1131
1134
|
const changed = this.hasChanged(value, this.dataValue);
|
1132
|
-
if (this.parent
|
1135
|
+
if (this.parent) {
|
1133
1136
|
this.parent.checkComponentConditions();
|
1134
1137
|
}
|
1135
1138
|
this.dataValue = value;
|
@@ -1162,10 +1165,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
1162
1165
|
this.editRows = this.editRows.slice(0, dataLength);
|
1163
1166
|
this.openWhenEmpty();
|
1164
1167
|
this.updateOnChange(flags, changed);
|
1165
|
-
|
1166
|
-
if (!this.options.server) {
|
1167
|
-
this.checkData();
|
1168
|
-
}
|
1168
|
+
this.checkData();
|
1169
1169
|
this.changeState(changed, flags);
|
1170
1170
|
return changed;
|
1171
1171
|
}
|
@@ -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
|
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
|
/**
|