@formio/js 5.4.0 → 5.4.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/README.md +11 -5
- package/dist/formio.builder.css +12 -5
- package/dist/formio.builder.min.css +1 -1
- 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.css +12 -5
- package/dist/formio.form.js +2883 -2867
- package/dist/formio.form.min.css +1 -1
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +2 -2
- package/dist/formio.full.css +12 -5
- package/dist/formio.full.js +3507 -3491
- package/dist/formio.full.min.css +1 -1
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +2 -2
- package/dist/formio.js +1139 -1145
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +2 -2
- package/dist/formio.utils.js +1066 -1072
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +2 -2
- package/lib/cjs/Embed.js +8 -16
- package/lib/cjs/Form.js +4 -4
- package/lib/cjs/Formio.js +2 -9
- package/lib/cjs/InlineEmbed.js +1 -4
- package/lib/cjs/PDF.js +28 -8
- package/lib/cjs/PDFBuilder.js +6 -10
- package/lib/cjs/Webform.d.ts +1 -0
- package/lib/cjs/Webform.js +19 -34
- package/lib/cjs/WebformBuilder.js +27 -68
- package/lib/cjs/Wizard.d.ts +1 -0
- package/lib/cjs/Wizard.js +44 -31
- package/lib/cjs/WizardBuilder.js +5 -15
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +2 -6
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.js +3 -9
- package/lib/cjs/addons/index.js +1 -3
- package/lib/cjs/components/_classes/component/Component.d.ts +10 -5
- package/lib/cjs/components/_classes/component/Component.js +76 -134
- package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +2 -4
- package/lib/cjs/components/_classes/component/editForm/Component.edit.display.js +4 -16
- package/lib/cjs/components/_classes/component/editForm/Component.edit.validation.js +1 -4
- package/lib/cjs/components/_classes/field/Field.js +1 -4
- package/lib/cjs/components/_classes/input/Input.js +2 -2
- package/lib/cjs/components/_classes/list/ListComponent.js +4 -4
- package/lib/cjs/components/_classes/list/editForm/ListComponent.edit.data.js +6 -28
- package/lib/cjs/components/_classes/multivalue/Multivalue.js +8 -26
- package/lib/cjs/components/_classes/nested/NestedComponent.js +1 -4
- package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +5 -9
- package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +1 -3
- package/lib/cjs/components/address/Address.js +10 -30
- package/lib/cjs/components/address/editForm/Address.edit.provider.js +8 -32
- package/lib/cjs/components/alert/Alert.js +3 -6
- package/lib/cjs/components/button/Button.d.ts +1 -0
- package/lib/cjs/components/button/Button.js +31 -17
- package/lib/cjs/components/button/editForm/Button.edit.display.js +8 -32
- package/lib/cjs/components/checkbox/Checkbox.js +4 -10
- package/lib/cjs/components/checkbox/editForm/Checkbox.edit.display.js +2 -8
- package/lib/cjs/components/columns/Columns.js +5 -17
- package/lib/cjs/components/container/Container.js +1 -3
- package/lib/cjs/components/currency/Currency.js +2 -7
- package/lib/cjs/components/datagrid/DataGrid.js +27 -68
- package/lib/cjs/components/datamap/DataMap.js +4 -16
- package/lib/cjs/components/datetime/DateTime.js +2 -6
- package/lib/cjs/components/datetime/editForm/DateTime.edit.display.js +1 -4
- package/lib/cjs/components/day/Day.js +12 -70
- package/lib/cjs/components/day/editForm/Day.edit.day.js +1 -3
- package/lib/cjs/components/day/editForm/Day.edit.month.js +1 -3
- package/lib/cjs/components/editgrid/EditGrid.d.ts +1 -0
- package/lib/cjs/components/editgrid/EditGrid.js +18 -44
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -4
- package/lib/cjs/components/file/File.js +40 -70
- package/lib/cjs/components/file/editForm/File.edit.display.js +1 -5
- package/lib/cjs/components/file/editForm/File.edit.file.js +8 -30
- package/lib/cjs/components/form/Form.js +5 -7
- package/lib/cjs/components/html/HTML.js +1 -5
- package/lib/cjs/components/number/Number.js +2 -4
- package/lib/cjs/components/panel/editForm/Panel.edit.display.js +3 -12
- package/lib/cjs/components/password/Password.js +1 -4
- package/lib/cjs/components/radio/Radio.js +7 -17
- package/lib/cjs/components/radio/editForm/Radio.edit.data.js +4 -14
- package/lib/cjs/components/recaptcha/ReCaptcha.js +3 -6
- package/lib/cjs/components/select/Select.js +49 -94
- package/lib/cjs/components/select/editForm/Select.edit.data.js +37 -182
- package/lib/cjs/components/select/editForm/Select.edit.validation.js +1 -9
- package/lib/cjs/components/selectboxes/SelectBoxes.js +3 -6
- package/lib/cjs/components/signature/Signature.d.ts +1 -1
- package/lib/cjs/components/signature/Signature.js +5 -10
- package/lib/cjs/components/signature/editForm/Signature.edit.display.js +2 -6
- package/lib/cjs/components/survey/Survey.js +6 -17
- package/lib/cjs/components/survey/editForm/Survey.edit.data.js +4 -12
- package/lib/cjs/components/table/editForm/Table.edit.display.js +3 -3
- package/lib/cjs/components/tabs/Tabs.js +4 -19
- package/lib/cjs/components/tabs/editForm/Tabs.edit.display.js +1 -3
- package/lib/cjs/components/tags/Tags.js +4 -14
- package/lib/cjs/components/textarea/TextArea.js +8 -15
- package/lib/cjs/components/textarea/editForm/TextArea.edit.display.js +14 -56
- package/lib/cjs/components/textfield/TextField.js +4 -4
- package/lib/cjs/components/textfield/editForm/TextField.edit.display.js +2 -8
- package/lib/cjs/components/time/Time.js +1 -4
- package/lib/cjs/components/time/editForm/Time.edit.display.js +1 -4
- package/lib/cjs/formio.form.js +5 -5
- package/lib/cjs/package.json +1 -1
- package/lib/cjs/providers/address/AddressProvider.js +1 -1
- package/lib/cjs/providers/address/GoogleAddressProvider.js +2 -4
- package/lib/cjs/providers/processor/fileProcessor.js +1 -3
- package/lib/cjs/providers/storage/azure.js +5 -6
- package/lib/cjs/providers/storage/indexeddb.js +5 -15
- package/lib/cjs/providers/storage/s3.js +3 -14
- package/lib/cjs/providers/storage/xhr.js +19 -28
- package/lib/cjs/templates/Templates.js +1 -0
- package/lib/cjs/translations/en.d.ts +237 -81
- package/lib/cjs/translations/en.js +10 -81
- package/lib/cjs/utils/ChoicesWrapper.js +1 -1
- package/lib/cjs/utils/builder.js +5 -26
- package/lib/cjs/utils/i18n.d.ts +5 -2
- package/lib/cjs/utils/i18n.js +33 -12
- package/lib/cjs/utils/utils.js +42 -52
- package/lib/cjs/widgets/CalendarWidget.js +2 -6
- package/lib/mjs/Embed.js +8 -16
- package/lib/mjs/Form.js +4 -4
- package/lib/mjs/Formio.js +2 -9
- package/lib/mjs/InlineEmbed.js +1 -4
- package/lib/mjs/PDF.js +27 -8
- package/lib/mjs/PDFBuilder.js +6 -10
- package/lib/mjs/Webform.d.ts +1 -0
- package/lib/mjs/Webform.js +19 -31
- package/lib/mjs/WebformBuilder.js +27 -68
- package/lib/mjs/Wizard.d.ts +1 -0
- package/lib/mjs/Wizard.js +39 -27
- package/lib/mjs/WizardBuilder.js +5 -15
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +2 -6
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.js +3 -9
- package/lib/mjs/addons/index.js +1 -3
- package/lib/mjs/components/_classes/component/Component.d.ts +10 -5
- package/lib/mjs/components/_classes/component/Component.js +75 -134
- package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +2 -4
- package/lib/mjs/components/_classes/component/editForm/Component.edit.display.js +4 -16
- package/lib/mjs/components/_classes/component/editForm/Component.edit.validation.js +1 -4
- package/lib/mjs/components/_classes/field/Field.js +1 -4
- package/lib/mjs/components/_classes/input/Input.js +2 -2
- package/lib/mjs/components/_classes/list/ListComponent.js +4 -4
- package/lib/mjs/components/_classes/list/editForm/ListComponent.edit.data.js +6 -28
- package/lib/mjs/components/_classes/multivalue/Multivalue.js +8 -26
- package/lib/mjs/components/_classes/nested/NestedComponent.js +1 -4
- package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +5 -9
- package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +1 -3
- package/lib/mjs/components/address/Address.js +10 -30
- package/lib/mjs/components/address/editForm/Address.edit.provider.js +8 -32
- package/lib/mjs/components/alert/Alert.js +3 -6
- package/lib/mjs/components/button/Button.d.ts +1 -0
- package/lib/mjs/components/button/Button.js +29 -16
- package/lib/mjs/components/button/editForm/Button.edit.display.js +8 -32
- package/lib/mjs/components/checkbox/Checkbox.js +4 -10
- package/lib/mjs/components/checkbox/editForm/Checkbox.edit.display.js +2 -8
- package/lib/mjs/components/columns/Columns.js +5 -17
- package/lib/mjs/components/container/Container.js +1 -3
- package/lib/mjs/components/currency/Currency.js +2 -7
- package/lib/mjs/components/datagrid/DataGrid.js +28 -69
- package/lib/mjs/components/datamap/DataMap.js +12 -18
- package/lib/mjs/components/datetime/DateTime.js +2 -6
- package/lib/mjs/components/datetime/editForm/DateTime.edit.display.js +1 -4
- package/lib/mjs/components/day/Day.js +12 -70
- package/lib/mjs/components/day/editForm/Day.edit.day.js +1 -3
- package/lib/mjs/components/day/editForm/Day.edit.month.js +1 -3
- package/lib/mjs/components/editgrid/EditGrid.d.ts +1 -0
- package/lib/mjs/components/editgrid/EditGrid.js +18 -44
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -4
- package/lib/mjs/components/file/File.js +40 -70
- package/lib/mjs/components/file/editForm/File.edit.display.js +1 -5
- package/lib/mjs/components/file/editForm/File.edit.file.js +8 -30
- package/lib/mjs/components/form/Form.js +5 -7
- package/lib/mjs/components/html/HTML.js +1 -5
- package/lib/mjs/components/number/Number.js +2 -4
- package/lib/mjs/components/panel/editForm/Panel.edit.display.js +3 -12
- package/lib/mjs/components/password/Password.js +1 -4
- package/lib/mjs/components/radio/Radio.js +7 -17
- package/lib/mjs/components/radio/editForm/Radio.edit.data.js +4 -14
- package/lib/mjs/components/recaptcha/ReCaptcha.js +3 -6
- package/lib/mjs/components/select/Select.js +52 -97
- package/lib/mjs/components/select/editForm/Select.edit.data.js +37 -182
- package/lib/mjs/components/select/editForm/Select.edit.validation.js +1 -9
- package/lib/mjs/components/selectboxes/SelectBoxes.js +3 -6
- package/lib/mjs/components/signature/Signature.d.ts +1 -1
- package/lib/mjs/components/signature/Signature.js +5 -10
- package/lib/mjs/components/signature/editForm/Signature.edit.display.js +2 -6
- package/lib/mjs/components/survey/Survey.js +6 -17
- package/lib/mjs/components/survey/editForm/Survey.edit.data.js +4 -12
- package/lib/mjs/components/table/editForm/Table.edit.display.js +3 -3
- package/lib/mjs/components/tabs/Tabs.js +4 -19
- package/lib/mjs/components/tabs/editForm/Tabs.edit.display.js +1 -3
- package/lib/mjs/components/tags/Tags.js +4 -14
- package/lib/mjs/components/textarea/TextArea.js +8 -15
- package/lib/mjs/components/textarea/editForm/TextArea.edit.display.js +14 -56
- package/lib/mjs/components/textfield/TextField.js +4 -4
- package/lib/mjs/components/textfield/editForm/TextField.edit.display.js +2 -8
- package/lib/mjs/components/time/Time.js +1 -4
- package/lib/mjs/components/time/editForm/Time.edit.display.js +1 -4
- package/lib/mjs/formio.form.js +6 -6
- package/lib/mjs/package.json +1 -1
- package/lib/mjs/providers/address/AddressProvider.js +1 -1
- package/lib/mjs/providers/address/GoogleAddressProvider.js +2 -4
- package/lib/mjs/providers/processor/fileProcessor.js +1 -3
- package/lib/mjs/providers/storage/azure.js +5 -6
- package/lib/mjs/providers/storage/indexeddb.js +5 -15
- package/lib/mjs/providers/storage/s3.js +3 -14
- package/lib/mjs/providers/storage/xhr.js +19 -32
- package/lib/mjs/templates/Templates.js +1 -0
- package/lib/mjs/translations/en.d.ts +237 -81
- package/lib/mjs/translations/en.js +91 -1
- package/lib/mjs/utils/ChoicesWrapper.js +1 -1
- package/lib/mjs/utils/builder.js +5 -26
- package/lib/mjs/utils/i18n.d.ts +5 -2
- package/lib/mjs/utils/i18n.js +33 -12
- package/lib/mjs/utils/utils.js +42 -52
- package/lib/mjs/widgets/CalendarWidget.js +2 -6
- package/package.json +8 -6
|
@@ -4,7 +4,7 @@ import { editgrid as templates } from '@formio/bootstrap/components';
|
|
|
4
4
|
import NestedArrayComponent from '../_classes/nestedarray/NestedArrayComponent';
|
|
5
5
|
import Component from '../_classes/component/Component';
|
|
6
6
|
import Alert from '../alert/Alert';
|
|
7
|
-
import { fastCloneDeep, Evaluator, getArrayFromComponentPath, eachComponent, screenReaderSpeech } from '../../utils';
|
|
7
|
+
import { fastCloneDeep, Evaluator, getArrayFromComponentPath, eachComponent, screenReaderSpeech, } from '../../utils';
|
|
8
8
|
const EditRowState = {
|
|
9
9
|
New: 'new',
|
|
10
10
|
Editing: 'editing',
|
|
@@ -115,10 +115,10 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
115
115
|
}
|
|
116
116
|
get defaultDialogTemplate() {
|
|
117
117
|
return `
|
|
118
|
-
<h3 ${this._referenceAttributeName}="dialogHeader">${this.t('
|
|
118
|
+
<h3 ${this._referenceAttributeName}="dialogHeader">${this.t('wantToClearData')}</h3>
|
|
119
119
|
<div style="display:flex; justify-content: flex-end;">
|
|
120
|
-
<button ${this._referenceAttributeName}="dialogCancelButton" class="btn btn-secondary" aria-label="${this.t('
|
|
121
|
-
<button ${this._referenceAttributeName}="dialogYesButton" class="btn btn-danger" aria-label="${this.t('
|
|
120
|
+
<button ${this._referenceAttributeName}="dialogCancelButton" class="btn btn-secondary" aria-label="${this.t('cancel')}">${this.t('cancel')}</button>
|
|
121
|
+
<button ${this._referenceAttributeName}="dialogYesButton" class="btn btn-danger" aria-label="${this.t('yesDelete')}">${this.t('yesDelete')}</button>
|
|
122
122
|
</div>
|
|
123
123
|
`;
|
|
124
124
|
}
|
|
@@ -253,6 +253,12 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
253
253
|
this.fullMode &&
|
|
254
254
|
this.dataValue.length > _.get(this.component, 'validate.minLength', 0));
|
|
255
255
|
}
|
|
256
|
+
checkData(data, flags, row) {
|
|
257
|
+
super.checkData(data, flags, row);
|
|
258
|
+
if (this.type === 'editgrid' && flags?.fromSubmission) {
|
|
259
|
+
return this.redraw();
|
|
260
|
+
}
|
|
261
|
+
}
|
|
256
262
|
init() {
|
|
257
263
|
if (this.builderMode) {
|
|
258
264
|
this.editRows = [];
|
|
@@ -302,19 +308,11 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
302
308
|
});
|
|
303
309
|
}
|
|
304
310
|
isOpen(editRow) {
|
|
305
|
-
return [
|
|
306
|
-
EditRowState.New,
|
|
307
|
-
EditRowState.Editing,
|
|
308
|
-
EditRowState.Viewing,
|
|
309
|
-
].includes(editRow.state);
|
|
311
|
+
return [EditRowState.New, EditRowState.Editing, EditRowState.Viewing].includes(editRow.state);
|
|
310
312
|
}
|
|
311
313
|
isComponentVisibleInSomeRow(component) {
|
|
312
314
|
const rows = this.editRows;
|
|
313
|
-
const savedStates = [
|
|
314
|
-
EditRowState.Saved,
|
|
315
|
-
EditRowState.Editing,
|
|
316
|
-
EditRowState.Draft,
|
|
317
|
-
];
|
|
315
|
+
const savedStates = [EditRowState.Saved, EditRowState.Editing, EditRowState.Draft];
|
|
318
316
|
const savedRows = rows.filter((row) => _.includes(savedStates, row.state));
|
|
319
317
|
this.visibleInHeader = this.visibleInHeader || [];
|
|
320
318
|
const changeVisibleInHeader = (component, isVisible) => {
|
|
@@ -335,9 +333,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
335
333
|
comp.checkConditions();
|
|
336
334
|
});
|
|
337
335
|
const isVisible = checkComponent ? checkComponent.visible : true;
|
|
338
|
-
[
|
|
339
|
-
...this.components,
|
|
340
|
-
].forEach((comp) => this.removeComponent(comp, this.components));
|
|
336
|
+
[...this.components].forEach((comp) => this.removeComponent(comp, this.components));
|
|
341
337
|
changeVisibleInHeader(component, isVisible);
|
|
342
338
|
return isVisible;
|
|
343
339
|
}
|
|
@@ -477,10 +473,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
477
473
|
const elements = row.getElementsByClassName(className);
|
|
478
474
|
Array.prototype.forEach.call(elements, (element) => {
|
|
479
475
|
if (this.options.pdf &&
|
|
480
|
-
_.intersection(element.classList, [
|
|
481
|
-
'editRow',
|
|
482
|
-
'removeRow',
|
|
483
|
-
]).length) {
|
|
476
|
+
_.intersection(element.classList, ['editRow', 'removeRow']).length) {
|
|
484
477
|
element.style.display = 'none';
|
|
485
478
|
}
|
|
486
479
|
else {
|
|
@@ -536,7 +529,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
536
529
|
flattenedComponents,
|
|
537
530
|
displayValue: (component) => this.displayComponentValue(component),
|
|
538
531
|
isVisibleInRow: (component) => this.isComponentVisibleInRow(component, flattenedComponents),
|
|
539
|
-
getView: (component,
|
|
532
|
+
getView: (component, _data) => {
|
|
540
533
|
const instance = flattenedComponents[component.key];
|
|
541
534
|
const view = instance ? instance.getView(instance.dataValue) : '';
|
|
542
535
|
// If there is an html tag in view, don't allow it to be injected in template
|
|
@@ -1047,10 +1040,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
1047
1040
|
editRow.errors =
|
|
1048
1041
|
this.component.modal || this.component.rowDrafts
|
|
1049
1042
|
? errors
|
|
1050
|
-
: errors.filter((err) => _.find(this.visibleErrors, [
|
|
1051
|
-
'component.id',
|
|
1052
|
-
err.component.id,
|
|
1053
|
-
]));
|
|
1043
|
+
: errors.filter((err) => _.find(this.visibleErrors, ['component.id', err.component.id]));
|
|
1054
1044
|
}
|
|
1055
1045
|
// TODO: this is essentially running its own custom validation and should be moved into a validation rule
|
|
1056
1046
|
if (this.component.validate && this.component.validate.row) {
|
|
@@ -1068,7 +1058,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
1068
1058
|
if (valid === null) {
|
|
1069
1059
|
editRow.errors.push({
|
|
1070
1060
|
type: 'error',
|
|
1071
|
-
message:
|
|
1061
|
+
message: this.t('componentInvalidRowValidation', { componentKey: this.key })
|
|
1072
1062
|
});
|
|
1073
1063
|
}
|
|
1074
1064
|
}
|
|
@@ -1145,20 +1135,6 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
1145
1135
|
errors.push(...this._errors);
|
|
1146
1136
|
return false;
|
|
1147
1137
|
}
|
|
1148
|
-
// TODO: this is the only place invalidMessage gets called, and it's not clear why it's needed - we already validate the editGrid
|
|
1149
|
-
// component above with super.checkComponentValidity
|
|
1150
|
-
const message = this.invalid || this.invalidMessage(data, dirty, false, row, options);
|
|
1151
|
-
if (allRowErrors.length && this.root?.submitted && !message) {
|
|
1152
|
-
this._errors = this.setCustomValidity(message, dirty);
|
|
1153
|
-
errors.push(...this._errors);
|
|
1154
|
-
this.root?.showErrors([
|
|
1155
|
-
message,
|
|
1156
|
-
]);
|
|
1157
|
-
}
|
|
1158
|
-
else {
|
|
1159
|
-
this._errors = this.setCustomValidity(message, dirty);
|
|
1160
|
-
errors.push(...this._errors);
|
|
1161
|
-
}
|
|
1162
1138
|
return superValid;
|
|
1163
1139
|
}
|
|
1164
1140
|
setRowInvalid(ref, index) {
|
|
@@ -1186,9 +1162,7 @@ export default class EditGridComponent extends NestedArrayComponent {
|
|
|
1186
1162
|
}
|
|
1187
1163
|
if (!Array.isArray(value)) {
|
|
1188
1164
|
if (typeof value === 'object') {
|
|
1189
|
-
value = [
|
|
1190
|
-
value,
|
|
1191
|
-
];
|
|
1165
|
+
value = [value];
|
|
1192
1166
|
}
|
|
1193
1167
|
else {
|
|
1194
1168
|
return false;
|
|
@@ -23,9 +23,7 @@ if (htmlCanvasElement && !htmlCanvasElement.prototype.toBlob) {
|
|
|
23
23
|
for (var i = 0; i < len; i++) {
|
|
24
24
|
arr[i] = binStr.charCodeAt(i);
|
|
25
25
|
}
|
|
26
|
-
callback(new Blob([
|
|
27
|
-
arr,
|
|
28
|
-
], { type: type || 'image/png' }));
|
|
26
|
+
callback(new Blob([arr], { type: type || 'image/png' }));
|
|
29
27
|
});
|
|
30
28
|
},
|
|
31
29
|
});
|
|
@@ -62,17 +60,12 @@ export default class FileComponent extends Field {
|
|
|
62
60
|
static get conditionOperatorsSettings() {
|
|
63
61
|
return {
|
|
64
62
|
...super.conditionOperatorsSettings,
|
|
65
|
-
operators: [
|
|
66
|
-
'isEmpty',
|
|
67
|
-
'isNotEmpty',
|
|
68
|
-
],
|
|
63
|
+
operators: ['isEmpty', 'isNotEmpty'],
|
|
69
64
|
};
|
|
70
65
|
}
|
|
71
66
|
static savedValueTypes(schema) {
|
|
72
67
|
schema = schema || {};
|
|
73
|
-
return
|
|
74
|
-
componentValueTypes.object,
|
|
75
|
-
]);
|
|
68
|
+
return getComponentSavedTypes(schema) || [componentValueTypes.object];
|
|
76
69
|
}
|
|
77
70
|
init() {
|
|
78
71
|
super.init();
|
|
@@ -213,7 +206,7 @@ export default class FileComponent extends Field {
|
|
|
213
206
|
this.videoStream = stream;
|
|
214
207
|
const { videoPlayer } = this.refs;
|
|
215
208
|
if (!videoPlayer) {
|
|
216
|
-
console.warn(
|
|
209
|
+
console.warn(this.t('videoPlayerNotFound'));
|
|
217
210
|
this.cameraMode = false;
|
|
218
211
|
this.redraw();
|
|
219
212
|
return;
|
|
@@ -238,16 +231,14 @@ export default class FileComponent extends Field {
|
|
|
238
231
|
takePicture() {
|
|
239
232
|
const { videoPlayer } = this.refs;
|
|
240
233
|
if (!videoPlayer) {
|
|
241
|
-
console.warn(
|
|
234
|
+
console.warn(this.t('videoPlayerNotFound'));
|
|
242
235
|
this.cameraMode = false;
|
|
243
236
|
this.redraw();
|
|
244
237
|
return;
|
|
245
238
|
}
|
|
246
239
|
this.getFrame(videoPlayer).then((frame) => {
|
|
247
240
|
frame.name = `photo-${Date.now()}.png`;
|
|
248
|
-
this.handleFilesToUpload([
|
|
249
|
-
frame,
|
|
250
|
-
]);
|
|
241
|
+
this.handleFilesToUpload([frame]);
|
|
251
242
|
this.cameraMode = false;
|
|
252
243
|
this.redraw();
|
|
253
244
|
});
|
|
@@ -426,13 +417,9 @@ export default class FileComponent extends Field {
|
|
|
426
417
|
fileEntry.file((file) => {
|
|
427
418
|
const reader = new FileReader();
|
|
428
419
|
reader.onloadend = (evt) => {
|
|
429
|
-
const blob = new Blob([
|
|
430
|
-
new Uint8Array(evt.target.result),
|
|
431
|
-
], { type: file.type });
|
|
420
|
+
const blob = new Blob([new Uint8Array(evt.target.result)], { type: file.type });
|
|
432
421
|
blob.name = file.name;
|
|
433
|
-
this.handleFilesToUpload([
|
|
434
|
-
blob,
|
|
435
|
-
]);
|
|
422
|
+
this.handleFilesToUpload([blob]);
|
|
436
423
|
};
|
|
437
424
|
reader.readAsArrayBuffer(file);
|
|
438
425
|
});
|
|
@@ -452,13 +439,9 @@ export default class FileComponent extends Field {
|
|
|
452
439
|
fileEntry.file((file) => {
|
|
453
440
|
const reader = new FileReader();
|
|
454
441
|
reader.onloadend = (evt) => {
|
|
455
|
-
const blob = new Blob([
|
|
456
|
-
new Uint8Array(evt.target.result),
|
|
457
|
-
], { type: file.type });
|
|
442
|
+
const blob = new Blob([new Uint8Array(evt.target.result)], { type: file.type });
|
|
458
443
|
blob.name = file.name;
|
|
459
|
-
this.handleFilesToUpload([
|
|
460
|
-
blob,
|
|
461
|
-
]);
|
|
444
|
+
this.handleFilesToUpload([blob]);
|
|
462
445
|
};
|
|
463
446
|
reader.readAsArrayBuffer(file);
|
|
464
447
|
});
|
|
@@ -629,7 +612,7 @@ export default class FileComponent extends Field {
|
|
|
629
612
|
if (!target.id) {
|
|
630
613
|
return;
|
|
631
614
|
}
|
|
632
|
-
const [action, id
|
|
615
|
+
const [action, id] = target.id.split('-');
|
|
633
616
|
if (!action || !id || !this.actions[action]) {
|
|
634
617
|
return;
|
|
635
618
|
}
|
|
@@ -654,7 +637,7 @@ export default class FileComponent extends Field {
|
|
|
654
637
|
file,
|
|
655
638
|
size: file.size,
|
|
656
639
|
status: 'info',
|
|
657
|
-
message: this.t('
|
|
640
|
+
message: this.t('waitFileProcessing'),
|
|
658
641
|
hash: '',
|
|
659
642
|
};
|
|
660
643
|
}
|
|
@@ -682,7 +665,7 @@ export default class FileComponent extends Field {
|
|
|
682
665
|
return fileWithSameNameUploaded || fileWithSameNameUploading
|
|
683
666
|
? {
|
|
684
667
|
status: 'error',
|
|
685
|
-
message: this.t(
|
|
668
|
+
message: this.t(fileWithSameNameUploading ? 'fileWithDuplicatedNameInProgress' : 'fileWithDuplicatedNameLoaded'),
|
|
686
669
|
}
|
|
687
670
|
: {};
|
|
688
671
|
}
|
|
@@ -691,7 +674,7 @@ export default class FileComponent extends Field {
|
|
|
691
674
|
if (this.component.filePattern && !this.validatePattern(file, this.component.filePattern)) {
|
|
692
675
|
return {
|
|
693
676
|
status: 'error',
|
|
694
|
-
message: this.t('
|
|
677
|
+
message: this.t('wrongFileType', {
|
|
695
678
|
pattern: this.component.filePattern,
|
|
696
679
|
}),
|
|
697
680
|
};
|
|
@@ -704,7 +687,7 @@ export default class FileComponent extends Field {
|
|
|
704
687
|
if (!interpolatedMinSize) {
|
|
705
688
|
return {
|
|
706
689
|
status: 'error',
|
|
707
|
-
message: '
|
|
690
|
+
message: this.t('checkEnteredParameters'),
|
|
708
691
|
};
|
|
709
692
|
}
|
|
710
693
|
if (!this.validateMinSize(file, interpolatedMinSize)) {
|
|
@@ -722,7 +705,7 @@ export default class FileComponent extends Field {
|
|
|
722
705
|
if (!interpolatedMaxSize) {
|
|
723
706
|
return {
|
|
724
707
|
status: 'error',
|
|
725
|
-
message: '
|
|
708
|
+
message: this.t('checkEnteredParameters'),
|
|
726
709
|
};
|
|
727
710
|
}
|
|
728
711
|
if (!this.validateMaxSize(file, interpolatedMaxSize)) {
|
|
@@ -741,7 +724,7 @@ export default class FileComponent extends Field {
|
|
|
741
724
|
return !fileService
|
|
742
725
|
? {
|
|
743
726
|
status: 'error',
|
|
744
|
-
message: this.t('
|
|
727
|
+
message: this.t('noFileService'),
|
|
745
728
|
}
|
|
746
729
|
: {};
|
|
747
730
|
}
|
|
@@ -771,11 +754,7 @@ export default class FileComponent extends Field {
|
|
|
771
754
|
]
|
|
772
755
|
: element.component.submissionAccess;
|
|
773
756
|
groupPermissions.forEach((permission) => {
|
|
774
|
-
groupKey = [
|
|
775
|
-
'admin',
|
|
776
|
-
'write',
|
|
777
|
-
'create',
|
|
778
|
-
].includes(permission.type)
|
|
757
|
+
groupKey = ['admin', 'write', 'create'].includes(permission.type)
|
|
779
758
|
? element.component.key
|
|
780
759
|
: null;
|
|
781
760
|
});
|
|
@@ -797,7 +776,7 @@ export default class FileComponent extends Field {
|
|
|
797
776
|
this.fileDropHidden = false;
|
|
798
777
|
return {
|
|
799
778
|
status: 'error',
|
|
800
|
-
message: this.t('
|
|
779
|
+
message: this.t('fileProcessingFailed'),
|
|
801
780
|
};
|
|
802
781
|
}
|
|
803
782
|
finally {
|
|
@@ -831,7 +810,7 @@ export default class FileComponent extends Field {
|
|
|
831
810
|
return this.filesToSync.filesToUpload.push(fileToSync);
|
|
832
811
|
}
|
|
833
812
|
if (this.autoSync) {
|
|
834
|
-
fileToSync.message = this.t('
|
|
813
|
+
fileToSync.message = this.t('readyForUpload');
|
|
835
814
|
}
|
|
836
815
|
this.filesToSync.filesToUpload.push({
|
|
837
816
|
...fileToSync,
|
|
@@ -849,9 +828,7 @@ export default class FileComponent extends Field {
|
|
|
849
828
|
}
|
|
850
829
|
if (this.component.storage && files && files.length) {
|
|
851
830
|
this.fileDropHidden = true;
|
|
852
|
-
return Promise.all([
|
|
853
|
-
...files,
|
|
854
|
-
].map(async (file) => {
|
|
831
|
+
return Promise.all([...files].map(async (file) => {
|
|
855
832
|
await this.prepareFileToUpload(file);
|
|
856
833
|
this.redraw();
|
|
857
834
|
}));
|
|
@@ -871,8 +848,8 @@ export default class FileComponent extends Field {
|
|
|
871
848
|
...fileInfo,
|
|
872
849
|
status: 'info',
|
|
873
850
|
message: this.autoSync
|
|
874
|
-
? this.t('
|
|
875
|
-
: this.t('
|
|
851
|
+
? this.t('readyForRemovingFromStorage')
|
|
852
|
+
: this.t('preparingFileToRemove'),
|
|
876
853
|
});
|
|
877
854
|
const index = this.dataValue.findIndex((file) => file.name === fileInfo.name);
|
|
878
855
|
this.splice(index);
|
|
@@ -887,13 +864,7 @@ export default class FileComponent extends Field {
|
|
|
887
864
|
async deleteFile(fileInfo) {
|
|
888
865
|
const { options = {} } = this.component;
|
|
889
866
|
if (fileInfo &&
|
|
890
|
-
[
|
|
891
|
-
'url',
|
|
892
|
-
'indexeddb',
|
|
893
|
-
's3',
|
|
894
|
-
'azure',
|
|
895
|
-
'googledrive',
|
|
896
|
-
].includes(this.component.storage)) {
|
|
867
|
+
['url', 'indexeddb', 's3', 'azure', 'googledrive'].includes(this.component.storage)) {
|
|
897
868
|
const { fileService } = this;
|
|
898
869
|
if (fileService && typeof fileService.deleteFile === 'function') {
|
|
899
870
|
return await fileService.deleteFile(fileInfo, options);
|
|
@@ -917,7 +888,7 @@ export default class FileComponent extends Field {
|
|
|
917
888
|
}
|
|
918
889
|
await this.deleteFile(fileToSync);
|
|
919
890
|
fileToSync.status = 'success';
|
|
920
|
-
fileToSync.message = this.t('
|
|
891
|
+
fileToSync.message = this.t('succefullyRemoved');
|
|
921
892
|
}
|
|
922
893
|
catch (response) {
|
|
923
894
|
fileToSync.status = 'error';
|
|
@@ -988,14 +959,14 @@ export default class FileComponent extends Field {
|
|
|
988
959
|
fileInfo,
|
|
989
960
|
};
|
|
990
961
|
}
|
|
991
|
-
if (fileToSync.status ===
|
|
992
|
-
const uploadedFile = this.resolvedFiles.find(x => x.fileToSync.originalName === fileToSync.originalName);
|
|
962
|
+
if (fileToSync.status === 'success') {
|
|
963
|
+
const uploadedFile = this.resolvedFiles.find((x) => x.fileToSync.originalName === fileToSync.originalName);
|
|
993
964
|
return {
|
|
994
965
|
fileToSync: uploadedFile.fileToSync,
|
|
995
966
|
fileInfo: uploadedFile.fileInfo,
|
|
996
967
|
};
|
|
997
968
|
}
|
|
998
|
-
const pendingFile = this.pendingfiles.find(x => x.name === fileToSync.name);
|
|
969
|
+
const pendingFile = this.pendingfiles.find((x) => x.name === fileToSync.name);
|
|
999
970
|
if (pendingFile) {
|
|
1000
971
|
fileInfo = await pendingFile.fileInfoProm;
|
|
1001
972
|
}
|
|
@@ -1004,9 +975,9 @@ export default class FileComponent extends Field {
|
|
|
1004
975
|
this.pendingfiles.push({ name: fileToSync.name, fileInfoProm: promInfo });
|
|
1005
976
|
fileInfo = await promInfo;
|
|
1006
977
|
}
|
|
1007
|
-
this.pendingfiles = this.pendingfiles.filter(x => x.name !== fileToSync.name);
|
|
978
|
+
this.pendingfiles = this.pendingfiles.filter((x) => x.name !== fileToSync.name);
|
|
1008
979
|
fileToSync.status = 'success';
|
|
1009
|
-
fileToSync.message = this.t('
|
|
980
|
+
fileToSync.message = this.t('succefullyUploaded');
|
|
1010
981
|
fileInfo.originalName = fileToSync.originalName;
|
|
1011
982
|
fileInfo.hash = fileToSync.hash;
|
|
1012
983
|
this.emit('fileUploadingEnd', Promise.resolve(fileInfo));
|
|
@@ -1018,7 +989,7 @@ export default class FileComponent extends Field {
|
|
|
1018
989
|
typeof response === 'string'
|
|
1019
990
|
? response
|
|
1020
991
|
: response.type === 'abort'
|
|
1021
|
-
? this.t('
|
|
992
|
+
? this.t('requestAborted')
|
|
1022
993
|
: response.toString();
|
|
1023
994
|
this.emit('fileUploadingEnd', Promise.reject(response));
|
|
1024
995
|
this.emit(_.get(response, 'type') === 'abort' ? 'fileUploadCanceled' : 'fileUploadError', {
|
|
@@ -1029,9 +1000,11 @@ export default class FileComponent extends Field {
|
|
|
1029
1000
|
finally {
|
|
1030
1001
|
delete fileToSync.progress;
|
|
1031
1002
|
this.redraw();
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1003
|
+
if (fileInfo) {
|
|
1004
|
+
const fileExists = this.resolvedFiles.find(x => x.fileInfo.originalName === fileToSync.originalName);
|
|
1005
|
+
if (!fileExists && fileToSync.status !== 'error') {
|
|
1006
|
+
this.resolvedFiles.push({ fileToSync, fileInfo });
|
|
1007
|
+
}
|
|
1035
1008
|
}
|
|
1036
1009
|
}
|
|
1037
1010
|
return {
|
|
@@ -1045,7 +1018,7 @@ export default class FileComponent extends Field {
|
|
|
1045
1018
|
this.fileDropHidden = true;
|
|
1046
1019
|
this.redraw();
|
|
1047
1020
|
try {
|
|
1048
|
-
const [filesToDelete = [], filesToUpload = []
|
|
1021
|
+
const [filesToDelete = [], filesToUpload = []] = await Promise.all([
|
|
1049
1022
|
this.delete(),
|
|
1050
1023
|
this.upload(),
|
|
1051
1024
|
]);
|
|
@@ -1084,7 +1057,7 @@ export default class FileComponent extends Field {
|
|
|
1084
1057
|
const { options = {} } = this.component;
|
|
1085
1058
|
const { fileService } = this;
|
|
1086
1059
|
if (!fileService) {
|
|
1087
|
-
return alert('
|
|
1060
|
+
return alert(this.t('noFileService'));
|
|
1088
1061
|
}
|
|
1089
1062
|
if (this.component.privateDownload) {
|
|
1090
1063
|
fileInfo.private = true;
|
|
@@ -1093,10 +1066,7 @@ export default class FileComponent extends Field {
|
|
|
1093
1066
|
.downloadFile(fileInfo, options)
|
|
1094
1067
|
.then((file) => {
|
|
1095
1068
|
if (file) {
|
|
1096
|
-
if ([
|
|
1097
|
-
'base64',
|
|
1098
|
-
'indexeddb',
|
|
1099
|
-
].includes(file.storage)) {
|
|
1069
|
+
if (['base64', 'indexeddb'].includes(file.storage)) {
|
|
1100
1070
|
download(file.url, file.originalName || file.name, file.type);
|
|
1101
1071
|
}
|
|
1102
1072
|
else {
|
|
@@ -1124,7 +1094,7 @@ export default class FileComponent extends Field {
|
|
|
1124
1094
|
return Promise.resolve();
|
|
1125
1095
|
}
|
|
1126
1096
|
await this.syncFiles();
|
|
1127
|
-
return this.shouldSyncFiles ? Promise.reject('
|
|
1097
|
+
return this.shouldSyncFiles ? Promise.reject(this.t('synchronizationFailed')) : Promise.resolve();
|
|
1128
1098
|
}
|
|
1129
1099
|
catch (error) {
|
|
1130
1100
|
return Promise.reject(error.message);
|
|
@@ -28,10 +28,7 @@ export default [
|
|
|
28
28
|
tooltip: "The <a href='https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html'>S3 Multipart Upload API</a> is designed to improve the upload experience for larger objects (> 5GB).",
|
|
29
29
|
conditional: {
|
|
30
30
|
json: {
|
|
31
|
-
'===': [
|
|
32
|
-
{ var: 'data.storage' },
|
|
33
|
-
's3',
|
|
34
|
-
],
|
|
31
|
+
'===': [{ var: 'data.storage' }, 's3'],
|
|
35
32
|
},
|
|
36
33
|
},
|
|
37
34
|
},
|
|
@@ -63,10 +60,7 @@ export default [
|
|
|
63
60
|
],
|
|
64
61
|
conditional: {
|
|
65
62
|
json: {
|
|
66
|
-
'===': [
|
|
67
|
-
{ var: 'data.useMultipartUpload' },
|
|
68
|
-
true,
|
|
69
|
-
],
|
|
63
|
+
'===': [{ var: 'data.useMultipartUpload' }, true],
|
|
70
64
|
},
|
|
71
65
|
},
|
|
72
66
|
},
|
|
@@ -80,10 +74,7 @@ export default [
|
|
|
80
74
|
tooltip: "See <a href='https://github.com/danialfarid/ng-file-upload#server-side' target='_blank'>https://github.com/danialfarid/ng-file-upload#server-side</a> for how to set up the server.",
|
|
81
75
|
conditional: {
|
|
82
76
|
json: {
|
|
83
|
-
'===': [
|
|
84
|
-
{ var: 'data.storage' },
|
|
85
|
-
'url',
|
|
86
|
-
],
|
|
77
|
+
'===': [{ var: 'data.storage' }, 'url'],
|
|
87
78
|
},
|
|
88
79
|
},
|
|
89
80
|
},
|
|
@@ -100,9 +91,7 @@ export default [
|
|
|
100
91
|
{
|
|
101
92
|
var: 'data.storage',
|
|
102
93
|
},
|
|
103
|
-
[
|
|
104
|
-
'indexeddb',
|
|
105
|
-
],
|
|
94
|
+
['indexeddb'],
|
|
106
95
|
],
|
|
107
96
|
},
|
|
108
97
|
},
|
|
@@ -120,9 +109,7 @@ export default [
|
|
|
120
109
|
{
|
|
121
110
|
var: 'data.storage',
|
|
122
111
|
},
|
|
123
|
-
[
|
|
124
|
-
'indexeddb',
|
|
125
|
-
],
|
|
112
|
+
['indexeddb'],
|
|
126
113
|
],
|
|
127
114
|
},
|
|
128
115
|
},
|
|
@@ -296,10 +283,7 @@ export default [
|
|
|
296
283
|
weight: 31,
|
|
297
284
|
conditional: {
|
|
298
285
|
json: {
|
|
299
|
-
'===': [
|
|
300
|
-
{ var: 'data.storage' },
|
|
301
|
-
'url',
|
|
302
|
-
],
|
|
286
|
+
'===': [{ var: 'data.storage' }, 'url'],
|
|
303
287
|
},
|
|
304
288
|
},
|
|
305
289
|
},
|
|
@@ -313,10 +297,7 @@ export default [
|
|
|
313
297
|
weight: 40,
|
|
314
298
|
conditional: {
|
|
315
299
|
json: {
|
|
316
|
-
'==': [
|
|
317
|
-
{ var: 'data.image' },
|
|
318
|
-
true,
|
|
319
|
-
],
|
|
300
|
+
'==': [{ var: 'data.image' }, true],
|
|
320
301
|
},
|
|
321
302
|
},
|
|
322
303
|
},
|
|
@@ -338,10 +319,7 @@ export default [
|
|
|
338
319
|
weight: 38,
|
|
339
320
|
conditional: {
|
|
340
321
|
json: {
|
|
341
|
-
'==': [
|
|
342
|
-
{ var: 'data.webcam' },
|
|
343
|
-
true,
|
|
344
|
-
],
|
|
322
|
+
'==': [{ var: 'data.webcam' }, true],
|
|
345
323
|
},
|
|
346
324
|
},
|
|
347
325
|
},
|
|
@@ -29,9 +29,7 @@ export default class FormComponent extends Component {
|
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
static savedValueTypes() {
|
|
32
|
-
return [
|
|
33
|
-
componentValueTypes.object,
|
|
34
|
-
];
|
|
32
|
+
return [componentValueTypes.object];
|
|
35
33
|
}
|
|
36
34
|
init() {
|
|
37
35
|
super.init();
|
|
@@ -215,7 +213,7 @@ export default class FormComponent extends Component {
|
|
|
215
213
|
}
|
|
216
214
|
render() {
|
|
217
215
|
if (this.builderMode) {
|
|
218
|
-
return super.render(this.component.label || '
|
|
216
|
+
return super.render(this.t(this.component.label || 'nestedForm'));
|
|
219
217
|
}
|
|
220
218
|
const subform = this.subForm ? this.subForm.render() : this.renderTemplate('loading');
|
|
221
219
|
return super.render(subform);
|
|
@@ -228,13 +226,13 @@ export default class FormComponent extends Component {
|
|
|
228
226
|
*/
|
|
229
227
|
getValueAsString(value, options) {
|
|
230
228
|
if (!value) {
|
|
231
|
-
return '
|
|
229
|
+
return this.t('noDataProvided');
|
|
232
230
|
}
|
|
233
231
|
if (!value.data && value._id) {
|
|
234
232
|
return value._id;
|
|
235
233
|
}
|
|
236
234
|
if (!value.data || !Object.keys(value.data).length) {
|
|
237
|
-
return '
|
|
235
|
+
return this.t('noDataProvided');
|
|
238
236
|
}
|
|
239
237
|
if (options?.email) {
|
|
240
238
|
let result = `
|
|
@@ -696,7 +694,7 @@ export default class FormComponent extends Component {
|
|
|
696
694
|
: {};
|
|
697
695
|
this.subForm.setUrl(submissionUrl, { ...this.options, ...options });
|
|
698
696
|
this.subForm.loadSubmission().catch((err) => {
|
|
699
|
-
console.error(
|
|
697
|
+
console.error(this.t('subformSubmissionLoadingError', { submissionId: submission._id }), err);
|
|
700
698
|
});
|
|
701
699
|
}
|
|
702
700
|
else {
|
|
@@ -47,9 +47,7 @@ export default class NumberComponent extends Input {
|
|
|
47
47
|
}
|
|
48
48
|
static savedValueTypes(schema) {
|
|
49
49
|
schema = schema || {};
|
|
50
|
-
return
|
|
51
|
-
componentValueTypes.number,
|
|
52
|
-
]);
|
|
50
|
+
return getComponentSavedTypes(schema) || [componentValueTypes.number];
|
|
53
51
|
}
|
|
54
52
|
constructor(...args) {
|
|
55
53
|
super(...args);
|
|
@@ -70,7 +68,7 @@ export default class NumberComponent extends Input {
|
|
|
70
68
|
if (this.component.thousandsSeparator ||
|
|
71
69
|
this.options.properties?.thousandsSeparator ||
|
|
72
70
|
this.options.thousandsSeparator) {
|
|
73
|
-
console.warn('
|
|
71
|
+
console.warn(this.t('noDelimiterSet'));
|
|
74
72
|
}
|
|
75
73
|
this.delimiter = '';
|
|
76
74
|
}
|