@formio/js 5.4.1 → 5.4.3
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 +1 -0
- 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 +1 -0
- package/dist/formio.form.js +137 -115
- 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 +1 -0
- package/dist/formio.full.js +161 -139
- 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 +27 -27
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +2 -2
- package/dist/formio.utils.js +19 -19
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +2 -2
- package/lib/cjs/Element.js +1 -1
- 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 +2 -0
- package/lib/cjs/Wizard.js +59 -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 +5 -5
- package/lib/cjs/components/_classes/component/Component.js +60 -132
- 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.js +10 -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 +31 -63
- 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 +52 -75
- package/lib/cjs/components/file/editForm/File.edit.display.js +1 -5
- package/lib/cjs/components/file/editForm/File.edit.file.d.ts +9 -3
- package/lib/cjs/components/file/editForm/File.edit.file.js +27 -52
- package/lib/cjs/components/form/Form.js +5 -7
- package/lib/cjs/components/html/HTML.d.ts +1 -1
- package/lib/cjs/components/html/HTML.js +8 -10
- package/lib/cjs/components/number/Number.js +7 -5
- 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 +17 -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 +48 -92
- 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 +21 -24
- package/lib/cjs/components/signature/editForm/Signature.edit.display.d.ts +4 -10
- package/lib/cjs/components/signature/editForm/Signature.edit.display.js +8 -12
- 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 +1 -3
- 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 +17 -18
- package/lib/cjs/providers/storage/s3.js +3 -14
- package/lib/cjs/providers/storage/url.js +13 -2
- package/lib/cjs/providers/storage/xhr.js +19 -28
- package/lib/cjs/templates/Templates.js +1 -0
- package/lib/cjs/templates/index.d.ts +1 -0
- package/lib/cjs/translations/en.d.ts +237 -82
- package/lib/cjs/translations/en.js +9 -82
- 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 +37 -47
- package/lib/cjs/widgets/CalendarWidget.js +2 -6
- package/lib/mjs/Element.js +1 -1
- 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 +2 -0
- package/lib/mjs/Wizard.js +54 -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 +5 -5
- package/lib/mjs/components/_classes/component/Component.js +59 -132
- 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.js +9 -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 +30 -63
- 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 +52 -75
- package/lib/mjs/components/file/editForm/File.edit.display.js +1 -5
- package/lib/mjs/components/file/editForm/File.edit.file.d.ts +9 -3
- package/lib/mjs/components/file/editForm/File.edit.file.js +27 -52
- package/lib/mjs/components/form/Form.js +5 -7
- package/lib/mjs/components/html/HTML.d.ts +1 -1
- package/lib/mjs/components/html/HTML.js +8 -10
- package/lib/mjs/components/number/Number.js +7 -5
- 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 +17 -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 +51 -95
- 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 +20 -23
- package/lib/mjs/components/signature/editForm/Signature.edit.display.d.ts +4 -10
- package/lib/mjs/components/signature/editForm/Signature.edit.display.js +6 -12
- 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 +1 -3
- 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 +17 -18
- package/lib/mjs/providers/storage/s3.js +3 -14
- package/lib/mjs/providers/storage/url.js +13 -2
- package/lib/mjs/providers/storage/xhr.js +19 -32
- package/lib/mjs/templates/Templates.js +1 -0
- package/lib/mjs/templates/index.d.ts +1 -0
- package/lib/mjs/translations/en.d.ts +237 -82
- package/lib/mjs/translations/en.js +88 -0
- 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 +37 -47
- package/lib/mjs/widgets/CalendarWidget.js +2 -6
- package/package.json +6 -4
|
@@ -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
|
});
|
|
@@ -44,6 +42,7 @@ export default class FileComponent extends Field {
|
|
|
44
42
|
fileMinSize: '0KB',
|
|
45
43
|
fileMaxSize: '1GB',
|
|
46
44
|
uploadOnly: false,
|
|
45
|
+
options: {},
|
|
47
46
|
}, ...extend);
|
|
48
47
|
}
|
|
49
48
|
static get builderInfo() {
|
|
@@ -62,17 +61,12 @@ export default class FileComponent extends Field {
|
|
|
62
61
|
static get conditionOperatorsSettings() {
|
|
63
62
|
return {
|
|
64
63
|
...super.conditionOperatorsSettings,
|
|
65
|
-
operators: [
|
|
66
|
-
'isEmpty',
|
|
67
|
-
'isNotEmpty',
|
|
68
|
-
],
|
|
64
|
+
operators: ['isEmpty', 'isNotEmpty'],
|
|
69
65
|
};
|
|
70
66
|
}
|
|
71
67
|
static savedValueTypes(schema) {
|
|
72
68
|
schema = schema || {};
|
|
73
|
-
return
|
|
74
|
-
componentValueTypes.object,
|
|
75
|
-
]);
|
|
69
|
+
return getComponentSavedTypes(schema) || [componentValueTypes.object];
|
|
76
70
|
}
|
|
77
71
|
init() {
|
|
78
72
|
super.init();
|
|
@@ -116,7 +110,7 @@ export default class FileComponent extends Field {
|
|
|
116
110
|
return [];
|
|
117
111
|
}
|
|
118
112
|
getValueAsString(value, options) {
|
|
119
|
-
if (options?.review && !this.component.uploadOnly) {
|
|
113
|
+
if (options?.review && !this.component.uploadOnly && !options?.pdf) {
|
|
120
114
|
return _.map(value, (val, index) => {
|
|
121
115
|
return `<a href="${val.url || '#'}" target="_blank" data-path='${this.path}' data-fileindex='${index}'>${val.originalName}</a>`;
|
|
122
116
|
}).join(', ');
|
|
@@ -213,7 +207,7 @@ export default class FileComponent extends Field {
|
|
|
213
207
|
this.videoStream = stream;
|
|
214
208
|
const { videoPlayer } = this.refs;
|
|
215
209
|
if (!videoPlayer) {
|
|
216
|
-
console.warn(
|
|
210
|
+
console.warn(this.t('videoPlayerNotFound'));
|
|
217
211
|
this.cameraMode = false;
|
|
218
212
|
this.redraw();
|
|
219
213
|
return;
|
|
@@ -238,16 +232,14 @@ export default class FileComponent extends Field {
|
|
|
238
232
|
takePicture() {
|
|
239
233
|
const { videoPlayer } = this.refs;
|
|
240
234
|
if (!videoPlayer) {
|
|
241
|
-
console.warn(
|
|
235
|
+
console.warn(this.t('videoPlayerNotFound'));
|
|
242
236
|
this.cameraMode = false;
|
|
243
237
|
this.redraw();
|
|
244
238
|
return;
|
|
245
239
|
}
|
|
246
240
|
this.getFrame(videoPlayer).then((frame) => {
|
|
247
241
|
frame.name = `photo-${Date.now()}.png`;
|
|
248
|
-
this.handleFilesToUpload([
|
|
249
|
-
frame,
|
|
250
|
-
]);
|
|
242
|
+
this.handleFilesToUpload([frame]);
|
|
251
243
|
this.cameraMode = false;
|
|
252
244
|
this.redraw();
|
|
253
245
|
});
|
|
@@ -426,13 +418,9 @@ export default class FileComponent extends Field {
|
|
|
426
418
|
fileEntry.file((file) => {
|
|
427
419
|
const reader = new FileReader();
|
|
428
420
|
reader.onloadend = (evt) => {
|
|
429
|
-
const blob = new Blob([
|
|
430
|
-
new Uint8Array(evt.target.result),
|
|
431
|
-
], { type: file.type });
|
|
421
|
+
const blob = new Blob([new Uint8Array(evt.target.result)], { type: file.type });
|
|
432
422
|
blob.name = file.name;
|
|
433
|
-
this.handleFilesToUpload([
|
|
434
|
-
blob,
|
|
435
|
-
]);
|
|
423
|
+
this.handleFilesToUpload([blob]);
|
|
436
424
|
};
|
|
437
425
|
reader.readAsArrayBuffer(file);
|
|
438
426
|
});
|
|
@@ -452,13 +440,9 @@ export default class FileComponent extends Field {
|
|
|
452
440
|
fileEntry.file((file) => {
|
|
453
441
|
const reader = new FileReader();
|
|
454
442
|
reader.onloadend = (evt) => {
|
|
455
|
-
const blob = new Blob([
|
|
456
|
-
new Uint8Array(evt.target.result),
|
|
457
|
-
], { type: file.type });
|
|
443
|
+
const blob = new Blob([new Uint8Array(evt.target.result)], { type: file.type });
|
|
458
444
|
blob.name = file.name;
|
|
459
|
-
this.handleFilesToUpload([
|
|
460
|
-
blob,
|
|
461
|
-
]);
|
|
445
|
+
this.handleFilesToUpload([blob]);
|
|
462
446
|
};
|
|
463
447
|
reader.readAsArrayBuffer(file);
|
|
464
448
|
});
|
|
@@ -629,7 +613,7 @@ export default class FileComponent extends Field {
|
|
|
629
613
|
if (!target.id) {
|
|
630
614
|
return;
|
|
631
615
|
}
|
|
632
|
-
const [action, id
|
|
616
|
+
const [action, id] = target.id.split('-');
|
|
633
617
|
if (!action || !id || !this.actions[action]) {
|
|
634
618
|
return;
|
|
635
619
|
}
|
|
@@ -650,11 +634,13 @@ export default class FileComponent extends Field {
|
|
|
650
634
|
originalName: escapedFileName,
|
|
651
635
|
fileKey: this.component.fileKey || 'file',
|
|
652
636
|
storage: this.component.storage,
|
|
653
|
-
options: this.component.
|
|
637
|
+
options: this.component.storage === 'url'
|
|
638
|
+
? (this.component.urlRequestOptions || this.component.options)
|
|
639
|
+
: this.component.options,
|
|
654
640
|
file,
|
|
655
641
|
size: file.size,
|
|
656
642
|
status: 'info',
|
|
657
|
-
message: this.t('
|
|
643
|
+
message: this.t('waitFileProcessing'),
|
|
658
644
|
hash: '',
|
|
659
645
|
};
|
|
660
646
|
}
|
|
@@ -682,7 +668,7 @@ export default class FileComponent extends Field {
|
|
|
682
668
|
return fileWithSameNameUploaded || fileWithSameNameUploading
|
|
683
669
|
? {
|
|
684
670
|
status: 'error',
|
|
685
|
-
message: this.t(
|
|
671
|
+
message: this.t(fileWithSameNameUploading ? 'fileWithDuplicatedNameInProgress' : 'fileWithDuplicatedNameLoaded'),
|
|
686
672
|
}
|
|
687
673
|
: {};
|
|
688
674
|
}
|
|
@@ -691,7 +677,7 @@ export default class FileComponent extends Field {
|
|
|
691
677
|
if (this.component.filePattern && !this.validatePattern(file, this.component.filePattern)) {
|
|
692
678
|
return {
|
|
693
679
|
status: 'error',
|
|
694
|
-
message: this.t('
|
|
680
|
+
message: this.t('wrongFileType', {
|
|
695
681
|
pattern: this.component.filePattern,
|
|
696
682
|
}),
|
|
697
683
|
};
|
|
@@ -704,7 +690,7 @@ export default class FileComponent extends Field {
|
|
|
704
690
|
if (!interpolatedMinSize) {
|
|
705
691
|
return {
|
|
706
692
|
status: 'error',
|
|
707
|
-
message: '
|
|
693
|
+
message: this.t('checkEnteredParameters'),
|
|
708
694
|
};
|
|
709
695
|
}
|
|
710
696
|
if (!this.validateMinSize(file, interpolatedMinSize)) {
|
|
@@ -722,7 +708,7 @@ export default class FileComponent extends Field {
|
|
|
722
708
|
if (!interpolatedMaxSize) {
|
|
723
709
|
return {
|
|
724
710
|
status: 'error',
|
|
725
|
-
message: '
|
|
711
|
+
message: this.t('checkEnteredParameters'),
|
|
726
712
|
};
|
|
727
713
|
}
|
|
728
714
|
if (!this.validateMaxSize(file, interpolatedMaxSize)) {
|
|
@@ -741,7 +727,7 @@ export default class FileComponent extends Field {
|
|
|
741
727
|
return !fileService
|
|
742
728
|
? {
|
|
743
729
|
status: 'error',
|
|
744
|
-
message: this.t('
|
|
730
|
+
message: this.t('noFileService'),
|
|
745
731
|
}
|
|
746
732
|
: {};
|
|
747
733
|
}
|
|
@@ -771,11 +757,7 @@ export default class FileComponent extends Field {
|
|
|
771
757
|
]
|
|
772
758
|
: element.component.submissionAccess;
|
|
773
759
|
groupPermissions.forEach((permission) => {
|
|
774
|
-
groupKey = [
|
|
775
|
-
'admin',
|
|
776
|
-
'write',
|
|
777
|
-
'create',
|
|
778
|
-
].includes(permission.type)
|
|
760
|
+
groupKey = ['admin', 'write', 'create'].includes(permission.type)
|
|
779
761
|
? element.component.key
|
|
780
762
|
: null;
|
|
781
763
|
});
|
|
@@ -797,7 +779,7 @@ export default class FileComponent extends Field {
|
|
|
797
779
|
this.fileDropHidden = false;
|
|
798
780
|
return {
|
|
799
781
|
status: 'error',
|
|
800
|
-
message: this.t('
|
|
782
|
+
message: this.t('fileProcessingFailed'),
|
|
801
783
|
};
|
|
802
784
|
}
|
|
803
785
|
finally {
|
|
@@ -831,7 +813,7 @@ export default class FileComponent extends Field {
|
|
|
831
813
|
return this.filesToSync.filesToUpload.push(fileToSync);
|
|
832
814
|
}
|
|
833
815
|
if (this.autoSync) {
|
|
834
|
-
fileToSync.message = this.t('
|
|
816
|
+
fileToSync.message = this.t('readyForUpload');
|
|
835
817
|
}
|
|
836
818
|
this.filesToSync.filesToUpload.push({
|
|
837
819
|
...fileToSync,
|
|
@@ -849,9 +831,7 @@ export default class FileComponent extends Field {
|
|
|
849
831
|
}
|
|
850
832
|
if (this.component.storage && files && files.length) {
|
|
851
833
|
this.fileDropHidden = true;
|
|
852
|
-
return Promise.all([
|
|
853
|
-
...files,
|
|
854
|
-
].map(async (file) => {
|
|
834
|
+
return Promise.all([...files].map(async (file) => {
|
|
855
835
|
await this.prepareFileToUpload(file);
|
|
856
836
|
this.redraw();
|
|
857
837
|
}));
|
|
@@ -871,8 +851,8 @@ export default class FileComponent extends Field {
|
|
|
871
851
|
...fileInfo,
|
|
872
852
|
status: 'info',
|
|
873
853
|
message: this.autoSync
|
|
874
|
-
? this.t('
|
|
875
|
-
: this.t('
|
|
854
|
+
? this.t('readyForRemovingFromStorage')
|
|
855
|
+
: this.t('preparingFileToRemove'),
|
|
876
856
|
});
|
|
877
857
|
const index = this.dataValue.findIndex((file) => file.name === fileInfo.name);
|
|
878
858
|
this.splice(index);
|
|
@@ -885,15 +865,11 @@ export default class FileComponent extends Field {
|
|
|
885
865
|
}
|
|
886
866
|
}
|
|
887
867
|
async deleteFile(fileInfo) {
|
|
888
|
-
const
|
|
868
|
+
const options = this.component.storage === 'url'
|
|
869
|
+
? (this.component.urlRequestOptions || this.component.options || {})
|
|
870
|
+
: (this.component.options || {});
|
|
889
871
|
if (fileInfo &&
|
|
890
|
-
[
|
|
891
|
-
'url',
|
|
892
|
-
'indexeddb',
|
|
893
|
-
's3',
|
|
894
|
-
'azure',
|
|
895
|
-
'googledrive',
|
|
896
|
-
].includes(this.component.storage)) {
|
|
872
|
+
['url', 'indexeddb', 's3', 'azure', 'googledrive'].includes(this.component.storage)) {
|
|
897
873
|
const { fileService } = this;
|
|
898
874
|
if (fileService && typeof fileService.deleteFile === 'function') {
|
|
899
875
|
return await fileService.deleteFile(fileInfo, options);
|
|
@@ -917,7 +893,7 @@ export default class FileComponent extends Field {
|
|
|
917
893
|
}
|
|
918
894
|
await this.deleteFile(fileToSync);
|
|
919
895
|
fileToSync.status = 'success';
|
|
920
|
-
fileToSync.message = this.t('
|
|
896
|
+
fileToSync.message = this.t('succefullyRemoved');
|
|
921
897
|
}
|
|
922
898
|
catch (response) {
|
|
923
899
|
fileToSync.status = 'error';
|
|
@@ -988,14 +964,14 @@ export default class FileComponent extends Field {
|
|
|
988
964
|
fileInfo,
|
|
989
965
|
};
|
|
990
966
|
}
|
|
991
|
-
if (fileToSync.status ===
|
|
992
|
-
const uploadedFile = this.resolvedFiles.find(x => x.fileToSync.originalName === fileToSync.originalName);
|
|
967
|
+
if (fileToSync.status === 'success') {
|
|
968
|
+
const uploadedFile = this.resolvedFiles.find((x) => x.fileToSync.originalName === fileToSync.originalName);
|
|
993
969
|
return {
|
|
994
970
|
fileToSync: uploadedFile.fileToSync,
|
|
995
971
|
fileInfo: uploadedFile.fileInfo,
|
|
996
972
|
};
|
|
997
973
|
}
|
|
998
|
-
const pendingFile = this.pendingfiles.find(x => x.name === fileToSync.name);
|
|
974
|
+
const pendingFile = this.pendingfiles.find((x) => x.name === fileToSync.name);
|
|
999
975
|
if (pendingFile) {
|
|
1000
976
|
fileInfo = await pendingFile.fileInfoProm;
|
|
1001
977
|
}
|
|
@@ -1004,9 +980,9 @@ export default class FileComponent extends Field {
|
|
|
1004
980
|
this.pendingfiles.push({ name: fileToSync.name, fileInfoProm: promInfo });
|
|
1005
981
|
fileInfo = await promInfo;
|
|
1006
982
|
}
|
|
1007
|
-
this.pendingfiles = this.pendingfiles.filter(x => x.name !== fileToSync.name);
|
|
983
|
+
this.pendingfiles = this.pendingfiles.filter((x) => x.name !== fileToSync.name);
|
|
1008
984
|
fileToSync.status = 'success';
|
|
1009
|
-
fileToSync.message = this.t('
|
|
985
|
+
fileToSync.message = this.t('succefullyUploaded');
|
|
1010
986
|
fileInfo.originalName = fileToSync.originalName;
|
|
1011
987
|
fileInfo.hash = fileToSync.hash;
|
|
1012
988
|
this.emit('fileUploadingEnd', Promise.resolve(fileInfo));
|
|
@@ -1018,8 +994,8 @@ export default class FileComponent extends Field {
|
|
|
1018
994
|
typeof response === 'string'
|
|
1019
995
|
? response
|
|
1020
996
|
: response.type === 'abort'
|
|
1021
|
-
? this.t('
|
|
1022
|
-
: response.toString();
|
|
997
|
+
? this.t('requestAborted')
|
|
998
|
+
: response.message || response.toString();
|
|
1023
999
|
this.emit('fileUploadingEnd', Promise.reject(response));
|
|
1024
1000
|
this.emit(_.get(response, 'type') === 'abort' ? 'fileUploadCanceled' : 'fileUploadError', {
|
|
1025
1001
|
fileToSync,
|
|
@@ -1029,9 +1005,11 @@ export default class FileComponent extends Field {
|
|
|
1029
1005
|
finally {
|
|
1030
1006
|
delete fileToSync.progress;
|
|
1031
1007
|
this.redraw();
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1008
|
+
if (fileInfo) {
|
|
1009
|
+
const fileExists = this.resolvedFiles.find(x => x.fileInfo.originalName === fileToSync.originalName);
|
|
1010
|
+
if (!fileExists && fileToSync.status !== 'error') {
|
|
1011
|
+
this.resolvedFiles.push({ fileToSync, fileInfo });
|
|
1012
|
+
}
|
|
1035
1013
|
}
|
|
1036
1014
|
}
|
|
1037
1015
|
return {
|
|
@@ -1045,7 +1023,7 @@ export default class FileComponent extends Field {
|
|
|
1045
1023
|
this.fileDropHidden = true;
|
|
1046
1024
|
this.redraw();
|
|
1047
1025
|
try {
|
|
1048
|
-
const [filesToDelete = [], filesToUpload = []
|
|
1026
|
+
const [filesToDelete = [], filesToUpload = []] = await Promise.all([
|
|
1049
1027
|
this.delete(),
|
|
1050
1028
|
this.upload(),
|
|
1051
1029
|
]);
|
|
@@ -1081,10 +1059,12 @@ export default class FileComponent extends Field {
|
|
|
1081
1059
|
}
|
|
1082
1060
|
}
|
|
1083
1061
|
getFile(fileInfo) {
|
|
1084
|
-
const
|
|
1062
|
+
const options = this.component.storage === 'url'
|
|
1063
|
+
? (this.component.urlRequestOptions || this.component.options || {})
|
|
1064
|
+
: (this.component.options || {});
|
|
1085
1065
|
const { fileService } = this;
|
|
1086
1066
|
if (!fileService) {
|
|
1087
|
-
return alert('
|
|
1067
|
+
return alert(this.t('noFileService'));
|
|
1088
1068
|
}
|
|
1089
1069
|
if (this.component.privateDownload) {
|
|
1090
1070
|
fileInfo.private = true;
|
|
@@ -1093,10 +1073,7 @@ export default class FileComponent extends Field {
|
|
|
1093
1073
|
.downloadFile(fileInfo, options)
|
|
1094
1074
|
.then((file) => {
|
|
1095
1075
|
if (file) {
|
|
1096
|
-
if ([
|
|
1097
|
-
'base64',
|
|
1098
|
-
'indexeddb',
|
|
1099
|
-
].includes(file.storage)) {
|
|
1076
|
+
if (['base64', 'indexeddb'].includes(file.storage)) {
|
|
1100
1077
|
download(file.url, file.originalName || file.name, file.type);
|
|
1101
1078
|
}
|
|
1102
1079
|
else {
|
|
@@ -1124,7 +1101,7 @@ export default class FileComponent extends Field {
|
|
|
1124
1101
|
return Promise.resolve();
|
|
1125
1102
|
}
|
|
1126
1103
|
await this.syncFiles();
|
|
1127
|
-
return this.shouldSyncFiles ? Promise.reject('
|
|
1104
|
+
return this.shouldSyncFiles ? Promise.reject(this.t('synchronizationFailed')) : Promise.resolve();
|
|
1128
1105
|
}
|
|
1129
1106
|
catch (error) {
|
|
1130
1107
|
return Promise.reject(error.message);
|
|
@@ -131,11 +131,10 @@ declare const _default: ({
|
|
|
131
131
|
values?: undefined;
|
|
132
132
|
} | {
|
|
133
133
|
type: string;
|
|
134
|
-
input: boolean;
|
|
135
134
|
key: string;
|
|
136
135
|
label: string;
|
|
137
136
|
weight: number;
|
|
138
|
-
|
|
137
|
+
input: boolean;
|
|
139
138
|
conditional: {
|
|
140
139
|
json: {
|
|
141
140
|
in: (string[] | {
|
|
@@ -145,12 +144,19 @@ declare const _default: ({
|
|
|
145
144
|
'=='?: undefined;
|
|
146
145
|
};
|
|
147
146
|
};
|
|
147
|
+
components: {
|
|
148
|
+
type: string;
|
|
149
|
+
input: boolean;
|
|
150
|
+
key: string;
|
|
151
|
+
label: string;
|
|
152
|
+
placeholder: string;
|
|
153
|
+
}[];
|
|
154
|
+
placeholder?: undefined;
|
|
148
155
|
tooltip?: undefined;
|
|
149
156
|
valueProperty?: undefined;
|
|
150
157
|
dataSrc?: undefined;
|
|
151
158
|
data?: undefined;
|
|
152
159
|
tableView?: undefined;
|
|
153
|
-
components?: undefined;
|
|
154
160
|
rows?: undefined;
|
|
155
161
|
editor?: undefined;
|
|
156
162
|
as?: undefined;
|