@formio/js 5.0.0-dev.5944.74e70b0 → 5.0.0-dev.5948.072adfa
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/Changelog.md +1 -0
- package/dist/formio.form.js +583 -593
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +1 -3
- package/dist/formio.full.js +584 -594
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +1 -3
- package/dist/formio.js +3006 -287
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +12 -0
- package/dist/formio.utils.js +41 -51
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +1 -3
- package/lib/cjs/Webform.d.ts +1 -1
- package/lib/cjs/Webform.js +27 -28
- package/lib/cjs/WebformBuilder.js +6 -13
- 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 +39 -7
- package/lib/cjs/components/_classes/component/Component.js +97 -29
- 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 +9 -46
- 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 +13 -13
- package/lib/cjs/components/form/Form.d.ts +1 -3
- package/lib/cjs/components/form/Form.js +21 -28
- package/lib/cjs/components/html/HTML.js +15 -3
- package/lib/cjs/components/selectboxes/SelectBoxes.js +0 -1
- package/lib/cjs/formio.form.js +1 -0
- 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 -2
- package/lib/cjs/utils/utils.js +15 -31
- package/lib/mjs/Webform.d.ts +1 -1
- package/lib/mjs/Webform.js +24 -27
- package/lib/mjs/WebformBuilder.js +6 -13
- 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 +39 -7
- package/lib/mjs/components/_classes/component/Component.js +99 -30
- 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 +15 -12
- package/lib/mjs/components/form/Form.d.ts +1 -3
- package/lib/mjs/components/form/Form.js +22 -28
- package/lib/mjs/components/html/HTML.js +15 -3
- package/lib/mjs/components/selectboxes/SelectBoxes.js +0 -1
- package/lib/mjs/formio.form.js +1 -0
- 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 -2
- package/lib/mjs/utils/utils.js +14 -29
- package/package.json +4 -4
@@ -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("
|
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 [
|
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
|
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;
|
@@ -163,7 +126,7 @@ class NestedArrayComponent extends NestedDataComponent_1.default {
|
|
163
126
|
if (component.isInputComponent) {
|
164
127
|
row += getHeaderCell(component);
|
165
128
|
}
|
166
|
-
else if ((0,
|
129
|
+
else if ((0, utils_2.isLayoutComponent)(component) && typeof component.everyComponent === 'function') {
|
167
130
|
component.everyComponent((comp) => {
|
168
131
|
row += getHeaderCell(comp);
|
169
132
|
}, options);
|
@@ -185,7 +148,7 @@ class NestedArrayComponent extends NestedDataComponent_1.default {
|
|
185
148
|
if (component.isInputComponent) {
|
186
149
|
row += getBodyCell(component);
|
187
150
|
}
|
188
|
-
else if ((0,
|
151
|
+
else if ((0, utils_2.isLayoutComponent)(component) && typeof component.everyComponent === 'function') {
|
189
152
|
component.everyComponent((comp) => {
|
190
153
|
row += getBodyCell(comp);
|
191
154
|
}, options);
|
@@ -87,7 +87,6 @@ export default class DataGridComponent extends NestedArrayComponent {
|
|
87
87
|
show: boolean;
|
88
88
|
};
|
89
89
|
checkComponentConditions(data: any, flags: any, row: any): boolean;
|
90
|
-
getComponent(path: any, fn: any): any;
|
91
90
|
toggleGroup(element: any, index: any): void;
|
92
91
|
}
|
93
92
|
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
|
class DataGridComponent extends NestedArrayComponent_1.default {
|
11
10
|
static schema(...extend) {
|
12
11
|
return NestedArrayComponent_1.default.schema({
|
@@ -426,7 +425,6 @@ class DataGridComponent extends NestedArrayComponent_1.default {
|
|
426
425
|
}
|
427
426
|
component.rowIndex = rowIndex;
|
428
427
|
component.row = `${rowIndex}-${colIndex}`;
|
429
|
-
component.path = Components_1.default.getComponentPath(component);
|
430
428
|
});
|
431
429
|
}
|
432
430
|
updateRowsComponents(rowIndex) {
|
@@ -492,6 +490,7 @@ class DataGridComponent extends NestedArrayComponent_1.default {
|
|
492
490
|
const options = lodash_1.default.clone(this.options);
|
493
491
|
options.name += `[${rowIndex}]`;
|
494
492
|
options.row = `${rowIndex}-${colIndex}`;
|
493
|
+
options.rowIndex = rowIndex;
|
495
494
|
let columnComponent;
|
496
495
|
if (this.builderMode) {
|
497
496
|
col.id = col.id + rowIndex;
|
@@ -614,49 +613,6 @@ class DataGridComponent extends NestedArrayComponent_1.default {
|
|
614
613
|
restoreComponentsContext() {
|
615
614
|
this.rows.forEach((row, index) => lodash_1.default.forIn(row, (component) => component.data = this.dataValue[index]));
|
616
615
|
}
|
617
|
-
getComponent(path, fn) {
|
618
|
-
path = Array.isArray(path) ? path : [path];
|
619
|
-
const [key, ...remainingPath] = path;
|
620
|
-
let result = [];
|
621
|
-
if (lodash_1.default.isNumber(key) && remainingPath.length) {
|
622
|
-
const compKey = remainingPath.pop();
|
623
|
-
result = this.rows[key][compKey];
|
624
|
-
// If the component is inside a Layout Component, try to find it among all the row's components
|
625
|
-
if (!result) {
|
626
|
-
Object.entries(this.rows[key]).forEach(([, comp]) => {
|
627
|
-
if ('getComponent' in comp) {
|
628
|
-
const possibleResult = comp.getComponent([compKey], fn);
|
629
|
-
if (possibleResult) {
|
630
|
-
result = possibleResult;
|
631
|
-
}
|
632
|
-
}
|
633
|
-
});
|
634
|
-
}
|
635
|
-
if (result && lodash_1.default.isFunction(fn)) {
|
636
|
-
fn(result, this.getComponents());
|
637
|
-
}
|
638
|
-
if (remainingPath.length && 'getComponent' in result) {
|
639
|
-
return result.getComponent(remainingPath, fn);
|
640
|
-
}
|
641
|
-
return result;
|
642
|
-
}
|
643
|
-
if (!lodash_1.default.isString(key)) {
|
644
|
-
return result;
|
645
|
-
}
|
646
|
-
this.everyComponent((component, components) => {
|
647
|
-
if (component.component.key === key) {
|
648
|
-
let comp = component;
|
649
|
-
if (remainingPath.length > 0 && 'getComponent' in component) {
|
650
|
-
comp = component.getComponent(remainingPath, fn);
|
651
|
-
}
|
652
|
-
else if (fn) {
|
653
|
-
fn(component, components);
|
654
|
-
}
|
655
|
-
result = result.concat(comp);
|
656
|
-
}
|
657
|
-
});
|
658
|
-
return result.length > 0 ? result : null;
|
659
|
-
}
|
660
616
|
toggleGroup(element, index) {
|
661
617
|
element.classList.toggle('collapsed');
|
662
618
|
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({
|
@@ -75,7 +74,7 @@ class DataMapComponent extends DataGrid_1.default {
|
|
75
74
|
}
|
76
75
|
get dataValue() {
|
77
76
|
if (!this.key ||
|
78
|
-
(
|
77
|
+
(this.conditionallyHidden && this.component.clearOnHide)) {
|
79
78
|
return this.emptyValue;
|
80
79
|
}
|
81
80
|
if (!this.hasValue() && this.shouldAddDefaultValue) {
|
@@ -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);
|
@@ -937,6 +937,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
|
|
937
937
|
const options = lodash_1.default.clone(this.options);
|
938
938
|
options.name += `[${rowIndex}]`;
|
939
939
|
options.row = `${rowIndex}-${colIndex}`;
|
940
|
+
options.rowIndex = rowIndex;
|
940
941
|
options.onChange = (flags = {}, changed, modified) => {
|
941
942
|
var _a, _b;
|
942
943
|
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)) {
|
@@ -951,7 +952,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
|
|
951
952
|
const editRow = this.editRows[rowIndex];
|
952
953
|
if (editRow) {
|
953
954
|
this.processRow('checkData', null, Object.assign(Object.assign({}, flags), { changed }), editRow.data, editRow.components);
|
954
|
-
this.validateRow(editRow, false);
|
955
|
+
this.validateRow(editRow, false, false);
|
955
956
|
}
|
956
957
|
if (this.variableTypeComponentsIndexes.length) {
|
957
958
|
const typeChanged = this.checkRowVariableTypeComponents(editRow, rowIndex);
|
@@ -992,25 +993,24 @@ class EditGridComponent extends NestedArrayComponent_1.default {
|
|
992
993
|
dirty;
|
993
994
|
}
|
994
995
|
validateRow(editRow, dirty, forceSilentCheck, fromSubmission) {
|
995
|
-
var _a;
|
996
|
+
var _a, _b;
|
996
997
|
editRow.errors = [];
|
997
998
|
if (this.shouldValidateRow(editRow, dirty, fromSubmission)) {
|
998
|
-
const silentCheck = (this.component.rowDrafts && !this.shouldValidateDraft(editRow)) || forceSilentCheck;
|
999
|
+
const silentCheck = forceSilentCheck === false ? false : ((this.component.rowDrafts && !this.shouldValidateDraft(editRow)) || forceSilentCheck);
|
999
1000
|
const rootValue = (0, utils_1.fastCloneDeep)(this.rootValue);
|
1000
1001
|
const editGridValue = lodash_1.default.get(rootValue, this.path, []);
|
1001
1002
|
editGridValue[editRow.rowIndex] = editRow.data;
|
1002
1003
|
lodash_1.default.set(rootValue, this.path, editGridValue);
|
1003
1004
|
const validationProcessorProcess = (context) => this.validationProcessor(context, { dirty, silentCheck });
|
1004
1005
|
const errors = (0, process_1.processSync)({
|
1005
|
-
components:
|
1006
|
-
component.parentPath = `${this.path}[${editRow.rowIndex}]`;
|
1007
|
-
return component;
|
1008
|
-
}),
|
1006
|
+
components: this.component.components,
|
1009
1007
|
data: rootValue,
|
1010
1008
|
row: editRow.data,
|
1011
1009
|
process: 'validateRow',
|
1012
1010
|
instances: this.componentsMap,
|
1013
1011
|
scope: { errors: [] },
|
1012
|
+
parent: this.component,
|
1013
|
+
parentPaths: Object.assign(Object.assign({}, this.paths), { dataIndex: editRow.rowIndex }),
|
1014
1014
|
processors: [
|
1015
1015
|
{
|
1016
1016
|
process: validationProcessorProcess,
|
@@ -1042,9 +1042,12 @@ class EditGridComponent extends NestedArrayComponent_1.default {
|
|
1042
1042
|
});
|
1043
1043
|
}
|
1044
1044
|
}
|
1045
|
-
if (!this.component.rowDrafts || ((_a = this.root) === null || _a === void 0 ? void 0 : _a.submitted)) {
|
1045
|
+
if (editRow.alerts && (!this.component.rowDrafts || ((_a = this.root) === null || _a === void 0 ? void 0 : _a.submitted))) {
|
1046
1046
|
this.showRowErrorAlerts(editRow, editRow.errors);
|
1047
1047
|
}
|
1048
|
+
else if ((_b = editRow.errors) === null || _b === void 0 ? void 0 : _b.length) {
|
1049
|
+
this.setCustomValidity(editRow.errors, dirty);
|
1050
|
+
}
|
1048
1051
|
return editRow.errors;
|
1049
1052
|
}
|
1050
1053
|
showRowErrorAlerts(editRow, errors) {
|
@@ -1156,7 +1159,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
|
|
1156
1159
|
}
|
1157
1160
|
}
|
1158
1161
|
const changed = this.hasChanged(value, this.dataValue);
|
1159
|
-
if (this.parent
|
1162
|
+
if (this.parent) {
|
1160
1163
|
this.parent.checkComponentConditions();
|
1161
1164
|
}
|
1162
1165
|
this.dataValue = value;
|
@@ -1189,10 +1192,7 @@ class EditGridComponent extends NestedArrayComponent_1.default {
|
|
1189
1192
|
this.editRows = this.editRows.slice(0, dataLength);
|
1190
1193
|
this.openWhenEmpty();
|
1191
1194
|
this.updateOnChange(flags, changed);
|
1192
|
-
|
1193
|
-
if (!this.options.server) {
|
1194
|
-
this.checkData();
|
1195
|
-
}
|
1195
|
+
this.checkData();
|
1196
1196
|
this.changeState(changed, flags);
|
1197
1197
|
return changed;
|
1198
1198
|
}
|
@@ -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;
|
@@ -133,15 +133,11 @@ class FormComponent extends Component_1.default {
|
|
133
133
|
this.subFormRevision = undefined;
|
134
134
|
}
|
135
135
|
}
|
136
|
-
getComponent(path
|
137
|
-
|
138
|
-
|
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);
|
@@ -421,10 +425,11 @@ class FormComponent extends Component_1.default {
|
|
421
425
|
return this.subFormReady;
|
422
426
|
}
|
423
427
|
hideSubmitButton(component) {
|
424
|
-
const isSubmitButton =
|
425
|
-
((component.action === 'submit') || !component.action);
|
428
|
+
const isSubmitButton = component.type === 'button' && (component.action === 'submit' || !component.action);
|
426
429
|
if (isSubmitButton) {
|
427
430
|
component.hidden = true;
|
431
|
+
// clearOnHide no longer clears from the JSON `hidden` flag, so we make the button conditionally hidden to clear its data
|
432
|
+
component.customConditional = 'show = false';
|
428
433
|
}
|
429
434
|
}
|
430
435
|
/**
|
@@ -434,7 +439,7 @@ class FormComponent extends Component_1.default {
|
|
434
439
|
*/
|
435
440
|
loadSubForm(fromAttach) {
|
436
441
|
var _a, _b, _c, _d, _e;
|
437
|
-
if (this.builderMode || this.
|
442
|
+
if (this.builderMode || this.conditionallyHidden || (this.isSubFormLazyLoad() && !fromAttach)) {
|
438
443
|
return Promise.resolve();
|
439
444
|
}
|
440
445
|
if (this.hasLoadedForm && !this.isRevisionChanged &&
|
@@ -469,18 +474,6 @@ class FormComponent extends Component_1.default {
|
|
469
474
|
}
|
470
475
|
return Promise.resolve();
|
471
476
|
}
|
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
477
|
checkComponentConditions(data, flags, row) {
|
485
478
|
const visible = super.checkComponentConditions(data, flags, row);
|
486
479
|
// Return if already hidden
|
@@ -488,14 +481,14 @@ class FormComponent extends Component_1.default {
|
|
488
481
|
return visible;
|
489
482
|
}
|
490
483
|
if (this.subForm) {
|
491
|
-
return this.subForm.checkConditions(
|
484
|
+
return this.subForm.checkConditions(data, flags, row);
|
492
485
|
}
|
493
486
|
// There are few cases when subForm is not loaded when a change is triggered,
|
494
487
|
// so we need to perform checkConditions after it is ready, or some conditional fields might be hidden in View mode
|
495
488
|
else if (this.subFormReady) {
|
496
489
|
this.subFormReady.then(() => {
|
497
490
|
if (this.subForm) {
|
498
|
-
return this.subForm.checkConditions(
|
491
|
+
return this.subForm.checkConditions(data, flags, row);
|
499
492
|
}
|
500
493
|
});
|
501
494
|
}
|
@@ -503,7 +496,7 @@ class FormComponent extends Component_1.default {
|
|
503
496
|
}
|
504
497
|
calculateValue(data, flags, row) {
|
505
498
|
if (this.subForm) {
|
506
|
-
return this.subForm.calculateValue(
|
499
|
+
return this.subForm.calculateValue(data, flags, row);
|
507
500
|
}
|
508
501
|
return super.calculateValue(data, flags, row);
|
509
502
|
}
|
@@ -518,7 +511,7 @@ class FormComponent extends Component_1.default {
|
|
518
511
|
* @returns {*|boolean} - TRUE if the subform should be submitted, FALSE if it should not.
|
519
512
|
*/
|
520
513
|
get shouldSubmit() {
|
521
|
-
return this.subFormReady && (!this.component.hasOwnProperty('reference') || this.component.reference) && !this.
|
514
|
+
return this.subFormReady && (!this.component.hasOwnProperty('reference') || this.component.reference) && !this.conditionallyHidden;
|
522
515
|
}
|
523
516
|
/**
|
524
517
|
* Returns the data for the subform.
|
@@ -545,7 +538,7 @@ class FormComponent extends Component_1.default {
|
|
545
538
|
}
|
546
539
|
this.subForm.nosubmit = false;
|
547
540
|
this.subForm.submitted = true;
|
548
|
-
return this.subForm.submitForm().then(result => {
|
541
|
+
return this.subForm.submitForm({}, true).then(result => {
|
549
542
|
this.subForm.loading = false;
|
550
543
|
this.subForm.showAllErrors = false;
|
551
544
|
this.dataValue = result.submission;
|
@@ -56,9 +56,21 @@ class HTMLComponent extends Component_1.default {
|
|
56
56
|
}
|
57
57
|
checkRefreshOn(changed) {
|
58
58
|
super.checkRefreshOn(changed);
|
59
|
-
|
60
|
-
|
61
|
-
this.
|
59
|
+
let visible;
|
60
|
+
if (this.hasCondition()) {
|
61
|
+
this._conditionallyHidden = this.checkConditionallyHidden();
|
62
|
+
visible = !this.conditionallyHidden;
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
visible = !this.component.hidden;
|
66
|
+
}
|
67
|
+
const shouldSetContent = !this.builderMode
|
68
|
+
&& this.component.refreshOnChange
|
69
|
+
&& this.element
|
70
|
+
&& !lodash_1.default.isUndefined(changed)
|
71
|
+
&& ((lodash_1.default.isBoolean(changed) && changed) || !lodash_1.default.isEmpty(changed))
|
72
|
+
&& visible;
|
73
|
+
if (shouldSetContent) {
|
62
74
|
this.setContent(this.element, this.renderContent());
|
63
75
|
}
|
64
76
|
}
|
package/lib/cjs/formio.form.js
CHANGED
@@ -73,6 +73,7 @@ function registerModule(mod, defaultFn = null, options = {}) {
|
|
73
73
|
case 'templates':
|
74
74
|
for (const framework of Object.keys(mod.templates)) {
|
75
75
|
Formio_1.Formio.Templates.extendTemplate(framework, mod.templates[framework]);
|
76
|
+
Formio_1.Formio.Templates.defaultTemplates = lodash_1.default.defaults(mod.templates[framework], Formio_1.Formio.Templates.defaultTemplates);
|
76
77
|
}
|
77
78
|
if (mod.templates[current]) {
|
78
79
|
Formio_1.Formio.Templates.current = mod.templates[current];
|
@@ -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,
|
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(
|
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,
|
2
|
+
execute({ value, instance, path }: {
|
3
3
|
value: any;
|
4
4
|
instance: any;
|
5
|
-
|
5
|
+
path: any;
|
6
6
|
}): any;
|
7
7
|
getResult(options: any): any;
|
8
8
|
}
|
@@ -15,11 +15,11 @@ class IsEmptyValue extends ConditionOperator_1.default {
|
|
15
15
|
static get requireValue() {
|
16
16
|
return false;
|
17
17
|
}
|
18
|
-
execute({ value, instance,
|
18
|
+
execute({ value, instance, path }) {
|
19
19
|
var _a;
|
20
20
|
const isEmptyValue = lodash_1.default.isEmpty(lodash_1.default.isNumber(value) ? String(value) : value);
|
21
21
|
if ((_a = instance === null || instance === void 0 ? void 0 : instance.root) === null || _a === void 0 ? void 0 : _a.getComponent) {
|
22
|
-
const conditionTriggerComponent = instance.root.getComponent(
|
22
|
+
const conditionTriggerComponent = instance.root.getComponent(path);
|
23
23
|
return (conditionTriggerComponent === null || conditionTriggerComponent === void 0 ? void 0 : conditionTriggerComponent.isEmpty) ? conditionTriggerComponent.isEmpty() : isEmptyValue;
|
24
24
|
}
|
25
25
|
return isEmptyValue;
|
@@ -1,9 +1,9 @@
|
|
1
1
|
export default class IsEqualTo extends ConditionOperator {
|
2
|
-
execute({ value, comparedValue, instance,
|
2
|
+
execute({ value, comparedValue, instance, path }: {
|
3
3
|
value: any;
|
4
4
|
comparedValue: any;
|
5
5
|
instance: any;
|
6
|
-
|
6
|
+
path: any;
|
7
7
|
}): any;
|
8
8
|
}
|
9
9
|
import ConditionOperator from './ConditionOperator';
|
@@ -13,7 +13,7 @@ class IsEqualTo extends ConditionOperator_1.default {
|
|
13
13
|
static get displayedName() {
|
14
14
|
return 'Is Equal To';
|
15
15
|
}
|
16
|
-
execute({ value, comparedValue, instance,
|
16
|
+
execute({ value, comparedValue, instance, path }) {
|
17
17
|
var _a, _b;
|
18
18
|
if ((value || value === false) && comparedValue && typeof value !== typeof comparedValue && lodash_1.default.isString(comparedValue)) {
|
19
19
|
try {
|
@@ -23,7 +23,7 @@ class IsEqualTo extends ConditionOperator_1.default {
|
|
23
23
|
catch (e) { }
|
24
24
|
}
|
25
25
|
if ((_a = instance === null || instance === void 0 ? void 0 : instance.root) === null || _a === void 0 ? void 0 : _a.getComponent) {
|
26
|
-
const conditionTriggerComponent = instance.root.getComponent(
|
26
|
+
const conditionTriggerComponent = instance.root.getComponent(path);
|
27
27
|
if (conditionTriggerComponent
|
28
28
|
&& (0, utils_1.isSelectResourceWithObjectValue)(conditionTriggerComponent.component)
|
29
29
|
&& ((_b = conditionTriggerComponent.component) === null || _b === void 0 ? void 0 : _b.template)) {
|
@@ -1,22 +1,33 @@
|
|
1
|
-
/**
|
2
|
-
* Deprecated version of findComponents. Renamed to searchComponents.
|
3
|
-
* @param {import('@formio/core').Component[]} components - The components to find components within.
|
4
|
-
* @param {object} query - The query to use when searching for the components.
|
5
|
-
* @returns {import('@formio/core').Component[]} - The result of the component that is found.
|
6
|
-
*/
|
7
|
-
export function findComponents(components: import('@formio/core').Component[], query: object): import('@formio/core').Component[];
|
8
1
|
export const flattenComponents: typeof Utils.flattenComponents;
|
9
2
|
export const guid: typeof Utils.guid;
|
10
3
|
export const uniqueName: typeof Utils.uniqueName;
|
11
|
-
export const
|
4
|
+
export const MODEL_TYPES_OF_KNOWN_COMPONENTS: {
|
5
|
+
nestedArray: string[];
|
6
|
+
nestedDataArray: string[];
|
7
|
+
dataObject: string[];
|
8
|
+
object: string[];
|
9
|
+
map: string[];
|
10
|
+
content: string[];
|
11
|
+
string: string[];
|
12
|
+
number: string[];
|
13
|
+
boolean: string[];
|
14
|
+
none: string[];
|
15
|
+
any: string[];
|
16
|
+
};
|
12
17
|
export const getModelType: typeof Utils.getModelType;
|
13
|
-
export const
|
14
|
-
export const
|
18
|
+
export const getComponentPath: any;
|
19
|
+
export const setComponentScope: typeof Utils.setComponentScope;
|
20
|
+
export const resetComponentScope: typeof Utils.resetComponentScope;
|
15
21
|
export const isComponentNestedDataType: typeof Utils.isComponentNestedDataType;
|
16
22
|
export const componentPath: typeof Utils.componentPath;
|
17
|
-
export const
|
18
|
-
export const
|
19
|
-
export const
|
23
|
+
export const getComponentPaths: typeof Utils.getComponentPaths;
|
24
|
+
export const componentMatches: typeof Utils.componentMatches;
|
25
|
+
export const getBestMatch: typeof Utils.getBestMatch;
|
26
|
+
export const getComponentFromPath: typeof Utils.getComponentFromPath;
|
27
|
+
export const getComponentValue: typeof Utils.getComponentValue;
|
28
|
+
export const findComponents: typeof Utils.findComponents;
|
29
|
+
export const eachComponentDataAsync: (components: Component[], data: DataObject, fn: EachComponentDataAsyncCallback, includeAll?: boolean | undefined, local?: boolean | undefined, parent?: any, parentPaths?: any) => Promise<void>;
|
30
|
+
export const eachComponentData: (components: Component[], data: DataObject, fn: EachComponentDataCallback, includeAll?: boolean | undefined, local?: boolean | undefined, parent?: any, parentPaths?: any) => void;
|
20
31
|
export const getComponentKey: typeof Utils.getComponentKey;
|
21
32
|
export const getContextualRowPath: typeof Utils.getContextualRowPath;
|
22
33
|
export const getContextualRowData: typeof Utils.getContextualRowData;
|
@@ -24,7 +35,7 @@ export const componentInfo: typeof Utils.componentInfo;
|
|
24
35
|
export const eachComponent: typeof Utils.eachComponent;
|
25
36
|
export const eachComponentAsync: typeof Utils.eachComponentAsync;
|
26
37
|
export const getComponentData: typeof Utils.getComponentData;
|
27
|
-
export const getComponentActualValue:
|
38
|
+
export const getComponentActualValue: any;
|
28
39
|
export const isLayoutComponent: typeof Utils.isLayoutComponent;
|
29
40
|
export const matchComponent: typeof Utils.matchComponent;
|
30
41
|
export const getComponent: typeof Utils.getComponent;
|