@formio/js 5.2.3 → 5.2.4-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/formio.builder.css +161 -50
- 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 +158 -49
- package/dist/formio.form.js +152 -108
- package/dist/formio.form.min.css +1 -1
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +1 -1
- package/dist/formio.full.css +161 -50
- package/dist/formio.full.js +401 -227
- package/dist/formio.full.min.css +1 -1
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +1 -1
- package/dist/formio.js +51 -18
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +1 -1
- package/dist/formio.utils.js +47 -14
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +1 -1
- package/lib/cjs/CDN.js +12 -12
- package/lib/cjs/Element.d.ts +3 -2
- package/lib/cjs/Element.js +27 -21
- package/lib/cjs/Embed.js +74 -40
- package/lib/cjs/EventEmitter.js +1 -1
- package/lib/cjs/Form.d.ts +371 -341
- package/lib/cjs/Form.js +153 -39
- package/lib/cjs/FormBuilder.d.ts +3 -3
- package/lib/cjs/FormBuilder.js +2 -3
- package/lib/cjs/Formio.js +26 -23
- package/lib/cjs/InlineEmbed.js +23 -17
- package/lib/cjs/PDF.d.ts +1 -0
- package/lib/cjs/PDF.js +18 -15
- package/lib/cjs/PDFBuilder.js +51 -36
- package/lib/cjs/Webform.d.ts +8 -366
- package/lib/cjs/Webform.js +176 -235
- package/lib/cjs/WebformBuilder.js +217 -144
- package/lib/cjs/Wizard.js +92 -62
- package/lib/cjs/WizardBuilder.js +27 -19
- package/lib/cjs/addons/FormioAddon.js +1 -1
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +59 -57
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.js +24 -16
- package/lib/cjs/addons/index.js +3 -3
- package/lib/cjs/components/Components.js +0 -4
- package/lib/cjs/components/_classes/component/Component.form.js +11 -11
- package/lib/cjs/components/_classes/component/Component.js +298 -179
- package/lib/cjs/components/_classes/component/editForm/Component.edit.addons.js +2 -4
- package/lib/cjs/components/_classes/component/editForm/Component.edit.api.js +5 -5
- package/lib/cjs/components/_classes/component/editForm/Component.edit.conditional.js +9 -11
- package/lib/cjs/components/_classes/component/editForm/Component.edit.data.d.ts +37 -0
- package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +39 -25
- package/lib/cjs/components/_classes/component/editForm/Component.edit.display.js +47 -29
- package/lib/cjs/components/_classes/component/editForm/Component.edit.layout.js +9 -9
- package/lib/cjs/components/_classes/component/editForm/Component.edit.logic.js +5 -7
- package/lib/cjs/components/_classes/component/editForm/Component.edit.validation.js +37 -34
- package/lib/cjs/components/_classes/component/editForm/utils.js +12 -16
- package/lib/cjs/components/_classes/componentModal/ComponentModal.js +6 -6
- package/lib/cjs/components/_classes/field/Field.js +7 -1
- package/lib/cjs/components/_classes/input/Input.js +30 -26
- package/lib/cjs/components/_classes/list/ListComponent.form.js +1 -1
- package/lib/cjs/components/_classes/list/ListComponent.js +27 -18
- package/lib/cjs/components/_classes/list/editForm/ListComponent.edit.data.js +36 -9
- package/lib/cjs/components/_classes/multivalue/Multivalue.js +32 -13
- package/lib/cjs/components/_classes/nested/NestedComponent.form.js +3 -3
- package/lib/cjs/components/_classes/nested/NestedComponent.js +36 -32
- package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +19 -14
- package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +19 -17
- package/lib/cjs/components/address/Address.js +52 -45
- package/lib/cjs/components/address/editForm/Address.edit.data.js +2 -2
- package/lib/cjs/components/address/editForm/Address.edit.display.js +2 -2
- package/lib/cjs/components/address/editForm/Address.edit.provider.js +53 -11
- package/lib/cjs/components/alert/Alert.js +21 -15
- package/lib/cjs/components/button/Button.form.js +1 -1
- package/lib/cjs/components/button/Button.js +50 -27
- package/lib/cjs/components/button/editForm/Button.edit.display.js +49 -9
- package/lib/cjs/components/checkbox/Checkbox.d.ts +1 -1
- package/lib/cjs/components/checkbox/Checkbox.form.js +3 -3
- package/lib/cjs/components/checkbox/Checkbox.js +28 -20
- package/lib/cjs/components/checkbox/editForm/Checkbox.edit.data.js +1 -1
- package/lib/cjs/components/checkbox/editForm/Checkbox.edit.display.js +13 -3
- package/lib/cjs/components/checkbox/editForm/Checkbox.edit.validation.js +2 -2
- package/lib/cjs/components/columns/Columns.form.js +1 -1
- package/lib/cjs/components/columns/Columns.js +24 -12
- package/lib/cjs/components/columns/editForm/Columns.edit.display.js +17 -17
- package/lib/cjs/components/container/Container.form.js +2 -2
- package/lib/cjs/components/container/Container.js +6 -4
- package/lib/cjs/components/container/editForm/Container.edit.data.js +3 -3
- package/lib/cjs/components/container/editForm/Container.edit.display.js +4 -4
- package/lib/cjs/components/content/Content.form.js +4 -2
- package/lib/cjs/components/content/Content.js +10 -8
- package/lib/cjs/components/content/editForm/Content.edit.display.js +10 -10
- package/lib/cjs/components/currency/Currency.form.js +3 -3
- package/lib/cjs/components/currency/Currency.js +19 -10
- package/lib/cjs/components/currency/editForm/Currency.edit.data.js +5 -5
- package/lib/cjs/components/currency/editForm/Currency.edit.display.js +8 -8
- package/lib/cjs/components/datagrid/DataGrid.form.js +3 -3
- package/lib/cjs/components/datagrid/DataGrid.js +89 -38
- package/lib/cjs/components/datagrid/editForm/DataGrid.edit.data.js +1 -1
- package/lib/cjs/components/datagrid/editForm/DataGrid.edit.display.js +14 -14
- package/lib/cjs/components/datagrid/editForm/DataGrid.edit.validation.js +3 -3
- package/lib/cjs/components/datamap/DataMap.form.js +2 -2
- package/lib/cjs/components/datamap/DataMap.js +44 -31
- package/lib/cjs/components/datamap/editForm/DataMap.edit.data.js +1 -1
- package/lib/cjs/components/datamap/editForm/DataMap.edit.display.js +8 -8
- package/lib/cjs/components/datetime/DateTime.form.js +5 -5
- package/lib/cjs/components/datetime/DateTime.js +30 -15
- package/lib/cjs/components/datetime/editForm/DateTime.edit.data.js +4 -3
- package/lib/cjs/components/datetime/editForm/DateTime.edit.date.js +10 -10
- package/lib/cjs/components/datetime/editForm/DateTime.edit.display.js +22 -17
- package/lib/cjs/components/datetime/editForm/DateTime.edit.time.js +5 -5
- package/lib/cjs/components/datetime/editForm/DateTime.edit.validation.js +3 -3
- package/lib/cjs/components/day/Day.form.js +5 -5
- package/lib/cjs/components/day/Day.js +146 -56
- package/lib/cjs/components/day/editForm/Day.edit.day.js +13 -9
- package/lib/cjs/components/day/editForm/Day.edit.display.js +7 -7
- package/lib/cjs/components/day/editForm/Day.edit.month.js +12 -8
- package/lib/cjs/components/day/editForm/Day.edit.validation.js +7 -7
- package/lib/cjs/components/day/editForm/Day.edit.year.js +8 -8
- package/lib/cjs/components/editgrid/EditGrid.form.js +2 -2
- package/lib/cjs/components/editgrid/EditGrid.js +137 -89
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.data.js +2 -2
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.display.js +7 -2
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.templates.js +16 -16
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.validation.js +3 -3
- package/lib/cjs/components/email/Email.js +4 -4
- package/lib/cjs/components/email/editForm/Email.edit.display.js +3 -3
- package/lib/cjs/components/email/editForm/Email.edit.validation.js +6 -6
- package/lib/cjs/components/fieldset/Fieldset.form.js +1 -1
- package/lib/cjs/components/fieldset/Fieldset.js +2 -2
- package/lib/cjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -8
- package/lib/cjs/components/file/File.form.js +4 -4
- package/lib/cjs/components/file/File.js +126 -80
- package/lib/cjs/components/file/editForm/File.edit.display.js +9 -5
- package/lib/cjs/components/file/editForm/File.edit.file.d.ts +37 -16
- package/lib/cjs/components/file/editForm/File.edit.file.js +169 -72
- package/lib/cjs/components/file/editForm/File.edit.validation.js +2 -2
- package/lib/cjs/components/form/Form.form.js +3 -3
- package/lib/cjs/components/form/Form.js +67 -51
- package/lib/cjs/components/form/editForm/Form.edit.data.js +1 -3
- package/lib/cjs/components/form/editForm/Form.edit.display.js +6 -7
- package/lib/cjs/components/form/editForm/Form.edit.form.js +11 -9
- package/lib/cjs/components/hidden/Hidden.form.js +4 -4
- package/lib/cjs/components/hidden/Hidden.js +2 -2
- package/lib/cjs/components/hidden/editForm/Hidden.edit.data.js +3 -3
- package/lib/cjs/components/hidden/editForm/Hidden.edit.display.js +10 -10
- package/lib/cjs/components/html/HTML.js +23 -17
- package/lib/cjs/components/html/editForm/HTML.edit.display.js +17 -17
- package/lib/cjs/components/html/editForm/HTML.edit.logic.js +2 -2
- package/lib/cjs/components/number/Number.form.js +3 -3
- package/lib/cjs/components/number/Number.js +27 -11
- package/lib/cjs/components/number/editForm/Number.edit.data.js +3 -3
- package/lib/cjs/components/number/editForm/Number.edit.display.js +4 -4
- package/lib/cjs/components/number/editForm/Number.edit.validation.js +9 -9
- package/lib/cjs/components/panel/Panel.form.js +1 -1
- package/lib/cjs/components/panel/Panel.js +2 -2
- package/lib/cjs/components/panel/editForm/Panel.edit.conditional.js +5 -7
- package/lib/cjs/components/panel/editForm/Panel.edit.display.js +55 -29
- package/lib/cjs/components/password/Password.form.js +3 -3
- package/lib/cjs/components/password/Password.js +5 -2
- package/lib/cjs/components/password/editForm/Password.edit.data.js +11 -11
- package/lib/cjs/components/password/editForm/Password.edit.display.js +3 -3
- package/lib/cjs/components/password/editForm/Password.edit.validation.js +3 -3
- package/lib/cjs/components/phonenumber/PhoneNumber.form.js +8 -8
- package/lib/cjs/components/phonenumber/PhoneNumber.js +3 -3
- package/lib/cjs/components/phonenumber/editForm/PhoneNumber.edit.validation.js +6 -6
- package/lib/cjs/components/radio/Radio.form.js +3 -3
- package/lib/cjs/components/radio/Radio.js +55 -26
- package/lib/cjs/components/radio/editForm/Radio.edit.data.js +23 -9
- package/lib/cjs/components/radio/editForm/Radio.edit.display.js +6 -6
- package/lib/cjs/components/radio/editForm/Radio.edit.validation.js +2 -2
- package/lib/cjs/components/recaptcha/ReCaptcha.form.js +5 -5
- package/lib/cjs/components/recaptcha/ReCaptcha.js +7 -5
- package/lib/cjs/components/recaptcha/editForm/ReCaptcha.edit.display.js +24 -24
- package/lib/cjs/components/select/Select.form.js +3 -3
- package/lib/cjs/components/select/Select.js +235 -129
- package/lib/cjs/components/select/editForm/Select.edit.data.d.ts +1 -1
- package/lib/cjs/components/select/editForm/Select.edit.data.js +191 -57
- package/lib/cjs/components/select/editForm/Select.edit.display.js +2 -2
- package/lib/cjs/components/select/editForm/Select.edit.validation.js +4 -4
- package/lib/cjs/components/selectboxes/SelectBoxes.form.js +3 -3
- package/lib/cjs/components/selectboxes/SelectBoxes.js +31 -15
- package/lib/cjs/components/selectboxes/editForm/SelectBoxes.edit.validation.js +5 -5
- package/lib/cjs/components/signature/Signature.form.js +3 -3
- package/lib/cjs/components/signature/Signature.js +25 -15
- package/lib/cjs/components/signature/editForm/Signature.edit.display.js +19 -10
- package/lib/cjs/components/survey/Survey.form.js +3 -3
- package/lib/cjs/components/survey/Survey.js +30 -17
- package/lib/cjs/components/survey/editForm/Survey.edit.data.js +23 -11
- package/lib/cjs/components/survey/editForm/Survey.edit.display.js +1 -1
- package/lib/cjs/components/survey/editForm/Survey.edit.validation.js +1 -1
- package/lib/cjs/components/table/Table.form.js +1 -1
- package/lib/cjs/components/table/Table.js +7 -5
- package/lib/cjs/components/table/editForm/Table.edit.display.js +22 -22
- package/lib/cjs/components/tabs/Tabs.form.js +1 -1
- package/lib/cjs/components/tabs/Tabs.js +26 -8
- package/lib/cjs/components/tabs/editForm/Tabs.edit.display.js +21 -17
- package/lib/cjs/components/tags/Tags.form.js +1 -1
- package/lib/cjs/components/tags/Tags.js +28 -12
- package/lib/cjs/components/tags/editForm/Tags.edit.data.js +7 -7
- package/lib/cjs/components/textarea/TextArea.form.js +2 -2
- package/lib/cjs/components/textarea/TextArea.js +63 -45
- package/lib/cjs/components/textarea/editForm/TextArea.edit.display.js +96 -72
- package/lib/cjs/components/textarea/editForm/TextArea.edit.validation.js +3 -3
- package/lib/cjs/components/textfield/TextField.form.js +3 -3
- package/lib/cjs/components/textfield/TextField.js +32 -21
- package/lib/cjs/components/textfield/editForm/TextField.edit.data.js +15 -13
- package/lib/cjs/components/textfield/editForm/TextField.edit.display.js +31 -21
- package/lib/cjs/components/textfield/editForm/TextField.edit.validation.js +6 -6
- package/lib/cjs/components/time/Time.js +17 -10
- package/lib/cjs/components/time/editForm/Time.edit.display.js +2 -2
- package/lib/cjs/components/unknown/Unknown.form.js +5 -5
- package/lib/cjs/components/unknown/Unknown.js +2 -2
- package/lib/cjs/components/unknown/editForm/Unknown.edit.display.js +3 -3
- package/lib/cjs/components/url/Url.form.js +3 -3
- package/lib/cjs/components/url/Url.js +2 -2
- package/lib/cjs/components/url/editForm/Url.edit.display.js +3 -3
- package/lib/cjs/components/url/editForm/Url.edit.validation.js +1 -1
- package/lib/cjs/components/well/Well.form.js +1 -1
- package/lib/cjs/components/well/Well.js +2 -2
- package/lib/cjs/components/well/editForm/Well.edit.display.js +10 -10
- package/lib/cjs/formio.form.d.ts +2 -1
- package/lib/cjs/formio.form.js +38 -12
- package/lib/cjs/i18n.d.ts +4 -0
- package/lib/cjs/i18n.js +7 -3
- package/lib/cjs/package.json +1 -1
- package/lib/cjs/providers/address/AddressProvider.js +8 -5
- package/lib/cjs/providers/address/GoogleAddressProvider.d.ts +3 -3
- package/lib/cjs/providers/address/GoogleAddressProvider.js +24 -13
- package/lib/cjs/providers/processor/fileProcessor.js +3 -1
- package/lib/cjs/providers/storage/azure.js +5 -2
- package/lib/cjs/providers/storage/dropbox.js +4 -5
- package/lib/cjs/providers/storage/googleDrive.js +3 -4
- package/lib/cjs/providers/storage/index.js +1 -1
- package/lib/cjs/providers/storage/indexeddb.js +16 -6
- package/lib/cjs/providers/storage/s3.js +17 -6
- package/lib/cjs/providers/storage/uploadAdapter.js +17 -11
- package/lib/cjs/providers/storage/url.js +13 -11
- package/lib/cjs/providers/storage/xhr.js +17 -9
- package/lib/cjs/templates/index.js +1 -1
- package/lib/cjs/translations/de.d.ts +80 -0
- package/lib/cjs/translations/de.js +81 -0
- package/lib/cjs/translations/en.d.ts +0 -2
- package/lib/cjs/translations/en.js +7 -9
- package/lib/cjs/utils/ChoicesWrapper.js +2 -2
- package/lib/cjs/utils/builder.js +31 -7
- package/lib/cjs/utils/calendarUtils.js +7 -5
- package/lib/cjs/utils/conditionOperators/ConditionOperator.js +1 -1
- package/lib/cjs/utils/conditionOperators/DateGreaterThan.js +12 -4
- package/lib/cjs/utils/conditionOperators/IsEmptyValue.js +3 -1
- package/lib/cjs/utils/conditionOperators/IsEqualTo.js +10 -6
- package/lib/cjs/utils/conditionOperators/index.js +1 -1
- package/lib/cjs/utils/formUtils.js +1 -1
- package/lib/cjs/utils/i18n.js +7 -1
- package/lib/cjs/utils/index.d.ts +2 -1
- package/lib/cjs/utils/index.js +2 -2
- package/lib/cjs/utils/utils.d.ts +10 -1
- package/lib/cjs/utils/utils.js +175 -92
- package/lib/cjs/widgets/CalendarWidget.js +66 -49
- package/lib/cjs/widgets/InputWidget.js +6 -4
- package/lib/cjs/widgets/index.js +1 -1
- package/lib/mjs/CDN.js +12 -12
- package/lib/mjs/Element.d.ts +3 -2
- package/lib/mjs/Element.js +27 -21
- package/lib/mjs/Embed.js +76 -42
- package/lib/mjs/EventEmitter.js +1 -1
- package/lib/mjs/Form.d.ts +371 -341
- package/lib/mjs/Form.js +142 -126
- package/lib/mjs/FormBuilder.d.ts +3 -3
- package/lib/mjs/FormBuilder.js +2 -3
- package/lib/mjs/Formio.js +26 -23
- package/lib/mjs/InlineEmbed.js +23 -17
- package/lib/mjs/PDF.d.ts +1 -0
- package/lib/mjs/PDF.js +18 -15
- package/lib/mjs/PDFBuilder.js +51 -36
- package/lib/mjs/Webform.d.ts +8 -366
- package/lib/mjs/Webform.js +183 -250
- package/lib/mjs/WebformBuilder.js +220 -147
- package/lib/mjs/Wizard.js +93 -63
- package/lib/mjs/WizardBuilder.js +27 -19
- package/lib/mjs/addons/FormioAddon.js +1 -1
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +59 -57
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.js +24 -16
- package/lib/mjs/addons/index.js +3 -3
- package/lib/mjs/components/Components.js +0 -4
- package/lib/mjs/components/_classes/component/Component.form.js +11 -11
- package/lib/mjs/components/_classes/component/Component.js +303 -184
- package/lib/mjs/components/_classes/component/editForm/Component.edit.addons.js +2 -4
- package/lib/mjs/components/_classes/component/editForm/Component.edit.api.js +5 -5
- package/lib/mjs/components/_classes/component/editForm/Component.edit.conditional.js +9 -11
- package/lib/mjs/components/_classes/component/editForm/Component.edit.data.d.ts +37 -0
- package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +39 -25
- package/lib/mjs/components/_classes/component/editForm/Component.edit.display.js +47 -29
- package/lib/mjs/components/_classes/component/editForm/Component.edit.layout.js +9 -9
- package/lib/mjs/components/_classes/component/editForm/Component.edit.logic.js +5 -7
- package/lib/mjs/components/_classes/component/editForm/Component.edit.validation.js +37 -34
- package/lib/mjs/components/_classes/component/editForm/utils.js +12 -16
- package/lib/mjs/components/_classes/componentModal/ComponentModal.js +2 -2
- package/lib/mjs/components/_classes/field/Field.js +8 -2
- package/lib/mjs/components/_classes/input/Input.js +27 -23
- package/lib/mjs/components/_classes/list/ListComponent.form.js +1 -1
- package/lib/mjs/components/_classes/list/ListComponent.js +27 -18
- package/lib/mjs/components/_classes/list/editForm/ListComponent.edit.data.js +36 -9
- package/lib/mjs/components/_classes/multivalue/Multivalue.js +32 -13
- package/lib/mjs/components/_classes/nested/NestedComponent.form.js +3 -3
- package/lib/mjs/components/_classes/nested/NestedComponent.js +32 -28
- package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +20 -15
- package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +19 -17
- package/lib/mjs/components/address/Address.js +57 -46
- package/lib/mjs/components/address/editForm/Address.edit.data.js +2 -2
- package/lib/mjs/components/address/editForm/Address.edit.display.js +2 -2
- package/lib/mjs/components/address/editForm/Address.edit.provider.js +53 -11
- package/lib/mjs/components/alert/Alert.js +22 -16
- package/lib/mjs/components/button/Button.form.js +1 -1
- package/lib/mjs/components/button/Button.js +51 -28
- package/lib/mjs/components/button/editForm/Button.edit.display.js +49 -9
- package/lib/mjs/components/checkbox/Checkbox.d.ts +1 -1
- package/lib/mjs/components/checkbox/Checkbox.form.js +3 -3
- package/lib/mjs/components/checkbox/Checkbox.js +29 -21
- package/lib/mjs/components/checkbox/editForm/Checkbox.edit.data.js +1 -1
- package/lib/mjs/components/checkbox/editForm/Checkbox.edit.display.js +13 -3
- package/lib/mjs/components/checkbox/editForm/Checkbox.edit.validation.js +2 -2
- package/lib/mjs/components/columns/Columns.form.js +1 -1
- package/lib/mjs/components/columns/Columns.js +24 -12
- package/lib/mjs/components/columns/editForm/Columns.edit.display.js +17 -17
- package/lib/mjs/components/container/Container.form.js +2 -2
- package/lib/mjs/components/container/Container.js +6 -4
- package/lib/mjs/components/container/editForm/Container.edit.data.js +3 -3
- package/lib/mjs/components/container/editForm/Container.edit.display.js +4 -4
- package/lib/mjs/components/content/Content.form.js +4 -2
- package/lib/mjs/components/content/Content.js +10 -8
- package/lib/mjs/components/content/editForm/Content.edit.display.js +10 -10
- package/lib/mjs/components/currency/Currency.form.js +3 -3
- package/lib/mjs/components/currency/Currency.js +19 -10
- package/lib/mjs/components/currency/editForm/Currency.edit.data.js +5 -5
- package/lib/mjs/components/currency/editForm/Currency.edit.display.js +8 -8
- package/lib/mjs/components/datagrid/DataGrid.form.js +3 -3
- package/lib/mjs/components/datagrid/DataGrid.js +90 -39
- package/lib/mjs/components/datagrid/editForm/DataGrid.edit.data.js +1 -1
- package/lib/mjs/components/datagrid/editForm/DataGrid.edit.display.js +14 -14
- package/lib/mjs/components/datagrid/editForm/DataGrid.edit.validation.js +3 -3
- package/lib/mjs/components/datamap/DataMap.form.js +2 -2
- package/lib/mjs/components/datamap/DataMap.js +44 -31
- package/lib/mjs/components/datamap/editForm/DataMap.edit.data.js +1 -1
- package/lib/mjs/components/datamap/editForm/DataMap.edit.display.js +8 -8
- package/lib/mjs/components/datetime/DateTime.form.js +5 -5
- package/lib/mjs/components/datetime/DateTime.js +31 -16
- package/lib/mjs/components/datetime/editForm/DateTime.edit.data.js +4 -3
- package/lib/mjs/components/datetime/editForm/DateTime.edit.date.js +10 -10
- package/lib/mjs/components/datetime/editForm/DateTime.edit.display.js +22 -17
- package/lib/mjs/components/datetime/editForm/DateTime.edit.time.js +5 -5
- package/lib/mjs/components/datetime/editForm/DateTime.edit.validation.js +3 -3
- package/lib/mjs/components/day/Day.form.js +5 -5
- package/lib/mjs/components/day/Day.js +147 -57
- package/lib/mjs/components/day/editForm/Day.edit.day.js +13 -9
- package/lib/mjs/components/day/editForm/Day.edit.display.js +7 -7
- package/lib/mjs/components/day/editForm/Day.edit.month.js +12 -8
- package/lib/mjs/components/day/editForm/Day.edit.validation.js +7 -7
- package/lib/mjs/components/day/editForm/Day.edit.year.js +8 -8
- package/lib/mjs/components/editgrid/EditGrid.form.js +2 -2
- package/lib/mjs/components/editgrid/EditGrid.js +138 -90
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.data.js +2 -2
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.display.js +7 -2
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.templates.js +16 -16
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.validation.js +3 -3
- package/lib/mjs/components/email/Email.js +4 -4
- package/lib/mjs/components/email/editForm/Email.edit.display.js +3 -3
- package/lib/mjs/components/email/editForm/Email.edit.validation.js +6 -6
- package/lib/mjs/components/fieldset/Fieldset.form.js +1 -1
- package/lib/mjs/components/fieldset/Fieldset.js +2 -2
- package/lib/mjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -8
- package/lib/mjs/components/file/File.form.js +4 -4
- package/lib/mjs/components/file/File.js +131 -84
- package/lib/mjs/components/file/editForm/File.edit.display.js +9 -5
- package/lib/mjs/components/file/editForm/File.edit.file.d.ts +37 -16
- package/lib/mjs/components/file/editForm/File.edit.file.js +169 -72
- package/lib/mjs/components/file/editForm/File.edit.validation.js +2 -2
- package/lib/mjs/components/form/Form.form.js +3 -3
- package/lib/mjs/components/form/Form.js +67 -51
- package/lib/mjs/components/form/editForm/Form.edit.data.js +1 -3
- package/lib/mjs/components/form/editForm/Form.edit.display.js +6 -7
- package/lib/mjs/components/form/editForm/Form.edit.form.js +10 -8
- package/lib/mjs/components/hidden/Hidden.form.js +4 -4
- package/lib/mjs/components/hidden/Hidden.js +2 -2
- package/lib/mjs/components/hidden/editForm/Hidden.edit.data.js +3 -3
- package/lib/mjs/components/hidden/editForm/Hidden.edit.display.js +10 -10
- package/lib/mjs/components/html/HTML.js +23 -17
- package/lib/mjs/components/html/editForm/HTML.edit.display.js +17 -17
- package/lib/mjs/components/html/editForm/HTML.edit.logic.js +2 -2
- package/lib/mjs/components/number/Number.form.js +3 -3
- package/lib/mjs/components/number/Number.js +28 -12
- package/lib/mjs/components/number/editForm/Number.edit.data.js +3 -3
- package/lib/mjs/components/number/editForm/Number.edit.display.js +4 -4
- package/lib/mjs/components/number/editForm/Number.edit.validation.js +9 -9
- package/lib/mjs/components/panel/Panel.form.js +1 -1
- package/lib/mjs/components/panel/Panel.js +2 -2
- package/lib/mjs/components/panel/editForm/Panel.edit.conditional.js +6 -8
- package/lib/mjs/components/panel/editForm/Panel.edit.display.js +55 -29
- package/lib/mjs/components/password/Password.form.js +3 -3
- package/lib/mjs/components/password/Password.js +5 -2
- package/lib/mjs/components/password/editForm/Password.edit.data.js +11 -11
- package/lib/mjs/components/password/editForm/Password.edit.display.js +3 -3
- package/lib/mjs/components/password/editForm/Password.edit.validation.js +3 -3
- package/lib/mjs/components/phonenumber/PhoneNumber.form.js +8 -8
- package/lib/mjs/components/phonenumber/PhoneNumber.js +3 -3
- package/lib/mjs/components/phonenumber/editForm/PhoneNumber.edit.validation.js +6 -6
- package/lib/mjs/components/radio/Radio.form.js +3 -3
- package/lib/mjs/components/radio/Radio.js +56 -27
- package/lib/mjs/components/radio/editForm/Radio.edit.data.js +23 -9
- package/lib/mjs/components/radio/editForm/Radio.edit.display.js +6 -6
- package/lib/mjs/components/radio/editForm/Radio.edit.validation.js +2 -2
- package/lib/mjs/components/recaptcha/ReCaptcha.form.js +5 -5
- package/lib/mjs/components/recaptcha/ReCaptcha.js +7 -5
- package/lib/mjs/components/recaptcha/editForm/ReCaptcha.edit.display.js +24 -24
- package/lib/mjs/components/select/Select.form.js +3 -3
- package/lib/mjs/components/select/Select.js +240 -134
- package/lib/mjs/components/select/editForm/Select.edit.data.d.ts +1 -1
- package/lib/mjs/components/select/editForm/Select.edit.data.js +191 -57
- package/lib/mjs/components/select/editForm/Select.edit.display.js +2 -2
- package/lib/mjs/components/select/editForm/Select.edit.validation.js +4 -4
- package/lib/mjs/components/selectboxes/SelectBoxes.form.js +3 -3
- package/lib/mjs/components/selectboxes/SelectBoxes.js +32 -16
- package/lib/mjs/components/selectboxes/editForm/SelectBoxes.edit.validation.js +5 -5
- package/lib/mjs/components/signature/Signature.form.js +3 -3
- package/lib/mjs/components/signature/Signature.js +25 -15
- package/lib/mjs/components/signature/editForm/Signature.edit.display.js +19 -10
- package/lib/mjs/components/survey/Survey.form.js +3 -3
- package/lib/mjs/components/survey/Survey.js +30 -17
- package/lib/mjs/components/survey/editForm/Survey.edit.data.js +23 -11
- package/lib/mjs/components/survey/editForm/Survey.edit.display.js +1 -1
- package/lib/mjs/components/survey/editForm/Survey.edit.validation.js +1 -1
- package/lib/mjs/components/table/Table.form.js +1 -1
- package/lib/mjs/components/table/Table.js +7 -5
- package/lib/mjs/components/table/editForm/Table.edit.display.js +22 -22
- package/lib/mjs/components/tabs/Tabs.form.js +1 -1
- package/lib/mjs/components/tabs/Tabs.js +26 -8
- package/lib/mjs/components/tabs/editForm/Tabs.edit.display.js +21 -17
- package/lib/mjs/components/tags/Tags.form.js +1 -1
- package/lib/mjs/components/tags/Tags.js +28 -12
- package/lib/mjs/components/tags/editForm/Tags.edit.data.js +7 -7
- package/lib/mjs/components/textarea/TextArea.form.js +2 -2
- package/lib/mjs/components/textarea/TextArea.js +75 -51
- package/lib/mjs/components/textarea/editForm/TextArea.edit.display.js +96 -72
- package/lib/mjs/components/textarea/editForm/TextArea.edit.validation.js +3 -3
- package/lib/mjs/components/textfield/TextField.form.js +3 -3
- package/lib/mjs/components/textfield/TextField.js +34 -23
- package/lib/mjs/components/textfield/editForm/TextField.edit.data.js +15 -13
- package/lib/mjs/components/textfield/editForm/TextField.edit.display.js +31 -21
- package/lib/mjs/components/textfield/editForm/TextField.edit.validation.js +6 -6
- package/lib/mjs/components/time/Time.js +17 -10
- package/lib/mjs/components/time/editForm/Time.edit.display.js +2 -2
- package/lib/mjs/components/unknown/Unknown.form.js +5 -5
- package/lib/mjs/components/unknown/Unknown.js +2 -2
- package/lib/mjs/components/unknown/editForm/Unknown.edit.display.js +3 -3
- package/lib/mjs/components/url/Url.form.js +3 -3
- package/lib/mjs/components/url/Url.js +2 -2
- package/lib/mjs/components/url/editForm/Url.edit.display.js +3 -3
- package/lib/mjs/components/url/editForm/Url.edit.validation.js +1 -1
- package/lib/mjs/components/well/Well.form.js +1 -1
- package/lib/mjs/components/well/Well.js +2 -2
- package/lib/mjs/components/well/editForm/Well.edit.display.js +10 -10
- package/lib/mjs/formio.form.d.ts +2 -1
- package/lib/mjs/formio.form.js +10 -8
- package/lib/mjs/i18n.d.ts +4 -0
- package/lib/mjs/i18n.js +7 -3
- package/lib/mjs/package.json +1 -1
- package/lib/mjs/providers/address/AddressProvider.js +8 -5
- package/lib/mjs/providers/address/GoogleAddressProvider.d.ts +3 -3
- package/lib/mjs/providers/address/GoogleAddressProvider.js +24 -13
- package/lib/mjs/providers/processor/fileProcessor.js +3 -1
- package/lib/mjs/providers/storage/azure.js +5 -2
- package/lib/mjs/providers/storage/dropbox.js +4 -5
- package/lib/mjs/providers/storage/googleDrive.js +3 -4
- package/lib/mjs/providers/storage/index.js +1 -1
- package/lib/mjs/providers/storage/indexeddb.js +16 -6
- package/lib/mjs/providers/storage/s3.js +19 -8
- package/lib/mjs/providers/storage/uploadAdapter.js +17 -11
- package/lib/mjs/providers/storage/url.js +13 -11
- package/lib/mjs/providers/storage/xhr.js +17 -9
- package/lib/mjs/templates/index.js +1 -1
- package/lib/mjs/translations/de.d.ts +80 -0
- package/lib/mjs/translations/de.js +79 -0
- package/lib/mjs/translations/en.d.ts +0 -2
- package/lib/mjs/translations/en.js +7 -9
- package/lib/mjs/utils/ChoicesWrapper.js +2 -2
- package/lib/mjs/utils/builder.js +31 -7
- package/lib/mjs/utils/calendarUtils.js +7 -5
- package/lib/mjs/utils/conditionOperators/ConditionOperator.js +1 -1
- package/lib/mjs/utils/conditionOperators/DateGreaterThan.js +16 -5
- package/lib/mjs/utils/conditionOperators/IsEmptyValue.js +3 -1
- package/lib/mjs/utils/conditionOperators/IsEqualTo.js +10 -6
- package/lib/mjs/utils/conditionOperators/index.js +1 -1
- package/lib/mjs/utils/formUtils.js +2 -2
- package/lib/mjs/utils/i18n.js +7 -1
- package/lib/mjs/utils/index.d.ts +2 -1
- package/lib/mjs/utils/index.js +3 -3
- package/lib/mjs/utils/utils.d.ts +10 -1
- package/lib/mjs/utils/utils.js +178 -91
- package/lib/mjs/widgets/CalendarWidget.js +67 -50
- package/lib/mjs/widgets/InputWidget.js +6 -4
- package/lib/mjs/widgets/index.js +1 -1
- package/package.json +3 -3
- package/lib/cjs/pdf.image.d.ts +0 -2
- package/lib/cjs/pdf.image.js +0 -94
- package/lib/cjs/utils/jsonlogic/operators.d.ts +0 -1
- package/lib/cjs/utils/jsonlogic/operators.js +0 -265
- package/lib/mjs/pdf.image.d.ts +0 -2
- package/lib/mjs/pdf.image.js +0 -94
- package/lib/mjs/utils/jsonlogic/operators.d.ts +0 -1
- package/lib/mjs/utils/jsonlogic/operators.js +0 -262
|
@@ -6,7 +6,7 @@ import isMobile from 'ismobilejs';
|
|
|
6
6
|
import { processOne, processOneSync, validateProcessInfo } from '@formio/core/process';
|
|
7
7
|
import { Formio } from '../../../Formio';
|
|
8
8
|
import FormioUtils from '../../../utils';
|
|
9
|
-
import { fastCloneDeep, boolValue, currentTimezone, getScriptPlugin, getContextualRowData } from '../../../utils';
|
|
9
|
+
import { fastCloneDeep, boolValue, currentTimezone, getScriptPlugin, getContextualRowData, } from '../../../utils';
|
|
10
10
|
import Element from '../../../Element';
|
|
11
11
|
import ComponentModal from '../componentModal/ComponentModal';
|
|
12
12
|
import Widgets from '../../../widgets';
|
|
@@ -137,7 +137,7 @@ export default class Component extends Element {
|
|
|
137
137
|
*/
|
|
138
138
|
strictDateValidation: false,
|
|
139
139
|
multiple: false,
|
|
140
|
-
unique: false
|
|
140
|
+
unique: false,
|
|
141
141
|
},
|
|
142
142
|
/**
|
|
143
143
|
* The simple conditional settings for a component.
|
|
@@ -145,7 +145,7 @@ export default class Component extends Element {
|
|
|
145
145
|
conditional: {
|
|
146
146
|
show: null,
|
|
147
147
|
when: null,
|
|
148
|
-
eq: ''
|
|
148
|
+
eq: '',
|
|
149
149
|
},
|
|
150
150
|
overlay: {
|
|
151
151
|
style: '',
|
|
@@ -161,6 +161,7 @@ export default class Component extends Element {
|
|
|
161
161
|
properties: {},
|
|
162
162
|
allowMultipleMasks: false,
|
|
163
163
|
addons: [],
|
|
164
|
+
serverOverride: {},
|
|
164
165
|
}, ...sources);
|
|
165
166
|
}
|
|
166
167
|
/**
|
|
@@ -169,15 +170,20 @@ export default class Component extends Element {
|
|
|
169
170
|
*/
|
|
170
171
|
static get conditionOperatorsSettings() {
|
|
171
172
|
return {
|
|
172
|
-
operators: [
|
|
173
|
+
operators: [
|
|
174
|
+
'isEqual',
|
|
175
|
+
'isNotEqual',
|
|
176
|
+
'isEmpty',
|
|
177
|
+
'isNotEmpty',
|
|
178
|
+
],
|
|
173
179
|
valueComponent() {
|
|
174
180
|
return {
|
|
175
181
|
type: 'textfield',
|
|
176
182
|
widget: {
|
|
177
|
-
type: 'input'
|
|
178
|
-
}
|
|
183
|
+
type: 'input',
|
|
184
|
+
},
|
|
179
185
|
};
|
|
180
|
-
}
|
|
186
|
+
},
|
|
181
187
|
};
|
|
182
188
|
}
|
|
183
189
|
/**
|
|
@@ -187,7 +193,9 @@ export default class Component extends Element {
|
|
|
187
193
|
*/
|
|
188
194
|
static savedValueTypes(schema) {
|
|
189
195
|
schema = schema || {};
|
|
190
|
-
return FormioUtils.getComponentSavedTypes(schema) || [
|
|
196
|
+
return (FormioUtils.getComponentSavedTypes(schema) || [
|
|
197
|
+
FormioUtils.componentValueTypes.any,
|
|
198
|
+
]);
|
|
191
199
|
}
|
|
192
200
|
/**
|
|
193
201
|
* Provides a table view for this component. Override if you wish to do something different than using getView
|
|
@@ -204,12 +212,11 @@ export default class Component extends Element {
|
|
|
204
212
|
* @param {object} options - The options for this component.
|
|
205
213
|
* @param {object} data - The global data submission object this component will belong.
|
|
206
214
|
*/
|
|
207
|
-
/* eslint-disable max-statements */
|
|
208
215
|
constructor(component, options, data) {
|
|
209
216
|
super(Object.assign({
|
|
210
217
|
renderMode: 'form',
|
|
211
218
|
attachMode: 'full',
|
|
212
|
-
noDefaults: false
|
|
219
|
+
noDefaults: false,
|
|
213
220
|
}, options || {}));
|
|
214
221
|
// Restore the component id.
|
|
215
222
|
if (component && component.id) {
|
|
@@ -230,9 +237,7 @@ export default class Component extends Element {
|
|
|
230
237
|
*/
|
|
231
238
|
this.refs = {};
|
|
232
239
|
// Allow global override for any component JSON.
|
|
233
|
-
if (component &&
|
|
234
|
-
this.options.components &&
|
|
235
|
-
this.options.components[component.type]) {
|
|
240
|
+
if (component && this.options.components && this.options.components[component.type]) {
|
|
236
241
|
_.merge(component, this.options.components[component.type]);
|
|
237
242
|
}
|
|
238
243
|
/**
|
|
@@ -309,7 +314,7 @@ export default class Component extends Element {
|
|
|
309
314
|
*/
|
|
310
315
|
this.paths = FormioUtils.getComponentPaths(this.component, this.parent?.component, {
|
|
311
316
|
...this.parent?.paths,
|
|
312
|
-
dataIndex: this.options.rowIndex === undefined ? this.parent?.paths?.dataIndex : this.options.rowIndex
|
|
317
|
+
dataIndex: this.options.rowIndex === undefined ? this.parent?.paths?.dataIndex : this.options.rowIndex,
|
|
313
318
|
});
|
|
314
319
|
this.options.name = this.options.name || 'data';
|
|
315
320
|
this._path = '';
|
|
@@ -318,8 +323,12 @@ export default class Component extends Element {
|
|
|
318
323
|
/**
|
|
319
324
|
* Determines if this component is visible, or not.
|
|
320
325
|
*/
|
|
321
|
-
this._parentVisible = this.options.hasOwnProperty('parentVisible')
|
|
322
|
-
|
|
326
|
+
this._parentVisible = this.options.hasOwnProperty('parentVisible')
|
|
327
|
+
? this.options.parentVisible
|
|
328
|
+
: true;
|
|
329
|
+
this._visible =
|
|
330
|
+
this._parentVisible &&
|
|
331
|
+
(this.hasCondition() ? !this.conditionallyHidden() : !this.component.hidden);
|
|
323
332
|
this._parentDisabled = false;
|
|
324
333
|
/**
|
|
325
334
|
* The reference attribute name for this component
|
|
@@ -414,7 +423,6 @@ export default class Component extends Element {
|
|
|
414
423
|
this.init();
|
|
415
424
|
}
|
|
416
425
|
}
|
|
417
|
-
/* eslint-enable max-statements */
|
|
418
426
|
get componentsMap() {
|
|
419
427
|
return this.root?.childComponentsMap || {};
|
|
420
428
|
}
|
|
@@ -472,10 +480,7 @@ export default class Component extends Element {
|
|
|
472
480
|
return Promise.resolve(this);
|
|
473
481
|
}
|
|
474
482
|
get isPDFReadOnlyMode() {
|
|
475
|
-
return this.parent &&
|
|
476
|
-
this.parent.form &&
|
|
477
|
-
(this.parent.form.display === 'pdf') &&
|
|
478
|
-
this.options.readOnly;
|
|
483
|
+
return (this.parent && this.parent.form && this.parent.form.display === 'pdf' && this.options.readOnly);
|
|
479
484
|
}
|
|
480
485
|
get labelInfo() {
|
|
481
486
|
const label = {};
|
|
@@ -484,7 +489,10 @@ export default class Component extends Element {
|
|
|
484
489
|
label.labelPosition = this.component.labelPosition;
|
|
485
490
|
label.tooltipClass = `${this.iconClass('question-sign')} text-muted`;
|
|
486
491
|
const isPDFReadOnlyMode = this.isPDFReadOnlyMode;
|
|
487
|
-
if (this.hasInput &&
|
|
492
|
+
if (this.hasInput &&
|
|
493
|
+
this.component.validate &&
|
|
494
|
+
boolValue(this.component.validate.required) &&
|
|
495
|
+
!isPDFReadOnlyMode) {
|
|
488
496
|
label.className += ' field-required';
|
|
489
497
|
}
|
|
490
498
|
if (label.hidden) {
|
|
@@ -497,7 +505,7 @@ export default class Component extends Element {
|
|
|
497
505
|
}
|
|
498
506
|
init() {
|
|
499
507
|
this.disabled = this.shouldDisabled;
|
|
500
|
-
this._visible =
|
|
508
|
+
this._visible = this.hasCondition() ? !this.conditionallyHidden() : !this.component.hidden;
|
|
501
509
|
if (this.component.addons?.length) {
|
|
502
510
|
this.component.addons.forEach((addon) => this.createAddon(addon));
|
|
503
511
|
}
|
|
@@ -517,7 +525,7 @@ export default class Component extends Element {
|
|
|
517
525
|
set rowIndex(value) {
|
|
518
526
|
this.paths = FormioUtils.getComponentPaths(this.component, this.parent?.component, {
|
|
519
527
|
...(this.parent?.paths || {}),
|
|
520
|
-
...{ dataIndex: value }
|
|
528
|
+
...{ dataIndex: value },
|
|
521
529
|
});
|
|
522
530
|
this._rowIndex = value;
|
|
523
531
|
}
|
|
@@ -534,8 +542,7 @@ export default class Component extends Element {
|
|
|
534
542
|
let addon = null;
|
|
535
543
|
if (Addon) {
|
|
536
544
|
const supportedComponents = Addon.info.supportedComponents;
|
|
537
|
-
const supportsThisComponentType = !supportedComponents?.length ||
|
|
538
|
-
supportedComponents.indexOf(this.component.type) !== -1;
|
|
545
|
+
const supportsThisComponentType = !supportedComponents?.length || supportedComponents.indexOf(this.component.type) !== -1;
|
|
539
546
|
if (supportsThisComponentType) {
|
|
540
547
|
addon = new Addon(settings, this);
|
|
541
548
|
this.addons.push(addon);
|
|
@@ -572,7 +579,9 @@ export default class Component extends Element {
|
|
|
572
579
|
}
|
|
573
580
|
}
|
|
574
581
|
get shouldDisabled() {
|
|
575
|
-
return this.options.readOnly ||
|
|
582
|
+
return (this.options.readOnly ||
|
|
583
|
+
this.component.disabled ||
|
|
584
|
+
(this.options.hasOwnProperty('disabled') && this.options.disabled[this.key]));
|
|
576
585
|
}
|
|
577
586
|
get isInputComponent() {
|
|
578
587
|
return !this.component.hasOwnProperty('input') || this.component.input;
|
|
@@ -751,7 +760,7 @@ export default class Component extends Element {
|
|
|
751
760
|
'left-left',
|
|
752
761
|
'left-right',
|
|
753
762
|
'right-left',
|
|
754
|
-
'right-right'
|
|
763
|
+
'right-right',
|
|
755
764
|
].includes(this.labelPosition);
|
|
756
765
|
}
|
|
757
766
|
get labelPositions() {
|
|
@@ -789,7 +798,7 @@ export default class Component extends Element {
|
|
|
789
798
|
isRightPosition,
|
|
790
799
|
isRightAlign,
|
|
791
800
|
labelStyles,
|
|
792
|
-
contentStyles
|
|
801
|
+
contentStyles,
|
|
793
802
|
};
|
|
794
803
|
}
|
|
795
804
|
/**
|
|
@@ -816,11 +825,11 @@ export default class Component extends Element {
|
|
|
816
825
|
modified[key] = val;
|
|
817
826
|
}
|
|
818
827
|
}
|
|
819
|
-
else if ((!recursion &&
|
|
820
|
-
(!recursion &&
|
|
821
|
-
(!recursion &&
|
|
822
|
-
(!recursion &&
|
|
823
|
-
(!recursion &&
|
|
828
|
+
else if ((!recursion && key === 'type') ||
|
|
829
|
+
(!recursion && key === 'key') ||
|
|
830
|
+
(!recursion && key === 'label') ||
|
|
831
|
+
(!recursion && key === 'input') ||
|
|
832
|
+
(!recursion && key === 'tableView') ||
|
|
824
833
|
(val !== '' && !defaultSchema.hasOwnProperty(key)) ||
|
|
825
834
|
(val !== '' && val !== defaultSchema[key]) ||
|
|
826
835
|
(defaultSchema[key] && val !== defaultSchema[key])) {
|
|
@@ -864,21 +873,32 @@ export default class Component extends Element {
|
|
|
864
873
|
return super.t(text, params, ...args);
|
|
865
874
|
}
|
|
866
875
|
labelIsHidden() {
|
|
867
|
-
return !this.component.label ||
|
|
868
|
-
((!this.isInDataGrid && this.component.hideLabel) ||
|
|
876
|
+
return (!this.component.label ||
|
|
877
|
+
(((!this.isInDataGrid && this.component.hideLabel) ||
|
|
869
878
|
(this.isInDataGrid && !this.component.dataGridLabel) ||
|
|
870
879
|
this.options.floatingLabels ||
|
|
871
|
-
this.options.inputsOnly) &&
|
|
880
|
+
this.options.inputsOnly) &&
|
|
881
|
+
!this.builderMode));
|
|
872
882
|
}
|
|
873
883
|
transform(type, value) {
|
|
874
|
-
const frameworkTemplates = this.options.template
|
|
884
|
+
const frameworkTemplates = this.options.template
|
|
885
|
+
? Templates.templates[this.options.template]
|
|
886
|
+
: Templates.current;
|
|
875
887
|
return frameworkTemplates.hasOwnProperty('transform')
|
|
876
888
|
? frameworkTemplates.transform(type, value, this)
|
|
877
889
|
: (type, value) => value;
|
|
878
890
|
}
|
|
879
891
|
getTemplate(names, modes) {
|
|
880
|
-
modes = Array.isArray(modes)
|
|
881
|
-
|
|
892
|
+
modes = Array.isArray(modes)
|
|
893
|
+
? modes
|
|
894
|
+
: [
|
|
895
|
+
modes,
|
|
896
|
+
];
|
|
897
|
+
names = Array.isArray(names)
|
|
898
|
+
? names
|
|
899
|
+
: [
|
|
900
|
+
names,
|
|
901
|
+
];
|
|
882
902
|
if (!modes.includes('form')) {
|
|
883
903
|
modes.push('form');
|
|
884
904
|
}
|
|
@@ -889,7 +909,9 @@ export default class Component extends Element {
|
|
|
889
909
|
return result;
|
|
890
910
|
}
|
|
891
911
|
}
|
|
892
|
-
const frameworkTemplates = this.options.template
|
|
912
|
+
const frameworkTemplates = this.options.template
|
|
913
|
+
? Templates.templates[this.options.template]
|
|
914
|
+
: Templates.current;
|
|
893
915
|
result = this.checkTemplate(frameworkTemplates, names, modes);
|
|
894
916
|
if (result) {
|
|
895
917
|
return result;
|
|
@@ -1021,7 +1043,9 @@ export default class Component extends Element {
|
|
|
1021
1043
|
if (settings && this.root?.shadowRoot) {
|
|
1022
1044
|
settings.shadowRoot = this.root.shadowRoot;
|
|
1023
1045
|
}
|
|
1024
|
-
const widget = settings && Widgets[settings.type]
|
|
1046
|
+
const widget = settings && Widgets[settings.type]
|
|
1047
|
+
? new Widgets[settings.type](settings, this.component, this)
|
|
1048
|
+
: null;
|
|
1025
1049
|
return widget;
|
|
1026
1050
|
}
|
|
1027
1051
|
/**
|
|
@@ -1030,7 +1054,12 @@ export default class Component extends Element {
|
|
|
1030
1054
|
*/
|
|
1031
1055
|
getBrowserLanguage() {
|
|
1032
1056
|
const nav = window.navigator;
|
|
1033
|
-
const browserLanguagePropertyKeys = [
|
|
1057
|
+
const browserLanguagePropertyKeys = [
|
|
1058
|
+
'language',
|
|
1059
|
+
'browserLanguage',
|
|
1060
|
+
'systemLanguage',
|
|
1061
|
+
'userLanguage',
|
|
1062
|
+
];
|
|
1034
1063
|
let language;
|
|
1035
1064
|
// support for HTML 5.1 "navigator.languages"
|
|
1036
1065
|
if (Array.isArray(nav.languages)) {
|
|
@@ -1076,7 +1105,8 @@ export default class Component extends Element {
|
|
|
1076
1105
|
* @returns {string} - The submission timezone.
|
|
1077
1106
|
*/
|
|
1078
1107
|
get submissionTimezone() {
|
|
1079
|
-
this.options.submissionTimezone =
|
|
1108
|
+
this.options.submissionTimezone =
|
|
1109
|
+
this.options.submissionTimezone || _.get(this.root, 'options.submissionTimezone');
|
|
1080
1110
|
return this.options.submissionTimezone;
|
|
1081
1111
|
}
|
|
1082
1112
|
/**
|
|
@@ -1100,8 +1130,8 @@ export default class Component extends Element {
|
|
|
1100
1130
|
}
|
|
1101
1131
|
const submissionTimezone = this.submissionTimezone;
|
|
1102
1132
|
if (submissionTimezone &&
|
|
1103
|
-
(
|
|
1104
|
-
((this.options.pdf || this.options.server) &&
|
|
1133
|
+
(settings.displayInTimezone === 'submission' ||
|
|
1134
|
+
((this.options.pdf || this.options.server) && settings.displayInTimezone === 'viewer'))) {
|
|
1105
1135
|
return submissionTimezone;
|
|
1106
1136
|
}
|
|
1107
1137
|
// Return current timezone if none are provided.
|
|
@@ -1192,7 +1222,7 @@ export default class Component extends Element {
|
|
|
1192
1222
|
id: this.id,
|
|
1193
1223
|
classes: this.className,
|
|
1194
1224
|
styles: this.customStyle,
|
|
1195
|
-
children
|
|
1225
|
+
children,
|
|
1196
1226
|
}, topLevel);
|
|
1197
1227
|
}
|
|
1198
1228
|
else {
|
|
@@ -1201,7 +1231,7 @@ export default class Component extends Element {
|
|
|
1201
1231
|
id: this.id,
|
|
1202
1232
|
classes: this.className,
|
|
1203
1233
|
styles: this.customStyle,
|
|
1204
|
-
children
|
|
1234
|
+
children,
|
|
1205
1235
|
}, topLevel);
|
|
1206
1236
|
}
|
|
1207
1237
|
}
|
|
@@ -1214,8 +1244,7 @@ export default class Component extends Element {
|
|
|
1214
1244
|
createTooltip(tooltipEl, settings = {}) {
|
|
1215
1245
|
const tooltipAttribute = tooltipEl.getAttribute('data-tooltip');
|
|
1216
1246
|
const tooltipDataTitle = tooltipEl.getAttribute('data-title');
|
|
1217
|
-
const tooltipText = this.interpolate(tooltipDataTitle || tooltipAttribute)
|
|
1218
|
-
.replace(/(?:\r\n|\r|\n)/g, '<br />');
|
|
1247
|
+
const tooltipText = this.interpolate(tooltipDataTitle || tooltipAttribute).replace(/(?:\r\n|\r|\n)/g, '<br />');
|
|
1219
1248
|
return tippy(tooltipEl, {
|
|
1220
1249
|
allowHTML: true,
|
|
1221
1250
|
trigger: 'mouseenter click focus',
|
|
@@ -1257,9 +1286,7 @@ export default class Component extends Element {
|
|
|
1257
1286
|
if (!this.builderMode && !this.previewMode && this.component.modalEdit) {
|
|
1258
1287
|
const modalShouldBeOpened = this.componentModal ? this.componentModal.isOpened : false;
|
|
1259
1288
|
const currentValue = modalShouldBeOpened ? this.componentModal.currentValue : this.dataValue;
|
|
1260
|
-
const openModalTemplate = this.componentModal && modalShouldBeOpened
|
|
1261
|
-
? this.componentModal.openModalTemplate
|
|
1262
|
-
: null;
|
|
1289
|
+
const openModalTemplate = this.componentModal && modalShouldBeOpened ? this.componentModal.openModalTemplate : null;
|
|
1263
1290
|
this.componentModal = this.createComponentModal(element, modalShouldBeOpened, currentValue);
|
|
1264
1291
|
this.setOpenModalElement(openModalTemplate);
|
|
1265
1292
|
}
|
|
@@ -1273,7 +1300,7 @@ export default class Component extends Element {
|
|
|
1273
1300
|
}
|
|
1274
1301
|
this.loadRefs(element, {
|
|
1275
1302
|
messageContainer: 'single',
|
|
1276
|
-
tooltip: 'multiple'
|
|
1303
|
+
tooltip: 'multiple',
|
|
1277
1304
|
});
|
|
1278
1305
|
this.attachTooltips(this.refs.tooltip);
|
|
1279
1306
|
// Attach logic.
|
|
@@ -1309,7 +1336,7 @@ export default class Component extends Element {
|
|
|
1309
1336
|
*/
|
|
1310
1337
|
addShortcut(element, shortcut) {
|
|
1311
1338
|
// Avoid infinite recursion.
|
|
1312
|
-
if (!element || !this.root ||
|
|
1339
|
+
if (!element || !this.root || this.root === this) {
|
|
1313
1340
|
return;
|
|
1314
1341
|
}
|
|
1315
1342
|
if (!shortcut) {
|
|
@@ -1325,7 +1352,7 @@ export default class Component extends Element {
|
|
|
1325
1352
|
*/
|
|
1326
1353
|
removeShortcut(element, shortcut) {
|
|
1327
1354
|
// Avoid infinite recursion.
|
|
1328
|
-
if (!element ||
|
|
1355
|
+
if (!element || this.root === this) {
|
|
1329
1356
|
return;
|
|
1330
1357
|
}
|
|
1331
1358
|
if (!shortcut) {
|
|
@@ -1371,7 +1398,10 @@ export default class Component extends Element {
|
|
|
1371
1398
|
if (refreshData === 'data') {
|
|
1372
1399
|
this.refresh(this.data, changed, flags);
|
|
1373
1400
|
}
|
|
1374
|
-
else if (
|
|
1401
|
+
else if (changePath &&
|
|
1402
|
+
changed.instance?.paths?.localPath === refreshData &&
|
|
1403
|
+
changed &&
|
|
1404
|
+
changed.instance &&
|
|
1375
1405
|
// Make sure the changed component is not in a different "context". Solves issues where refreshOn being set
|
|
1376
1406
|
// in fields inside EditGrids could alter their state from other rows (which is bad).
|
|
1377
1407
|
this.inContext(changed.instance)) {
|
|
@@ -1390,16 +1420,20 @@ export default class Component extends Element {
|
|
|
1390
1420
|
return;
|
|
1391
1421
|
}
|
|
1392
1422
|
if (!changes.length && flags.changed) {
|
|
1393
|
-
changes = [
|
|
1423
|
+
changes = [
|
|
1424
|
+
flags.changed,
|
|
1425
|
+
];
|
|
1394
1426
|
}
|
|
1395
|
-
const refreshOn = flags.fromBlur
|
|
1427
|
+
const refreshOn = flags.fromBlur
|
|
1428
|
+
? this.component.refreshOnBlur
|
|
1429
|
+
: this.component.refreshOn || this.component.redrawOn;
|
|
1396
1430
|
// If they wish to refresh on a value, then add that here.
|
|
1397
1431
|
if (refreshOn) {
|
|
1398
1432
|
if (Array.isArray(refreshOn)) {
|
|
1399
|
-
refreshOn.forEach(refreshData => changes.forEach(changed => this.checkRefresh(refreshData, changed, flags)));
|
|
1433
|
+
refreshOn.forEach((refreshData) => changes.forEach((changed) => this.checkRefresh(refreshData, changed, flags)));
|
|
1400
1434
|
}
|
|
1401
1435
|
else {
|
|
1402
|
-
changes.forEach(changed => this.checkRefresh(refreshOn, changed, flags));
|
|
1436
|
+
changes.forEach((changed) => this.checkRefresh(refreshOn, changed, flags));
|
|
1403
1437
|
}
|
|
1404
1438
|
}
|
|
1405
1439
|
}
|
|
@@ -1470,7 +1504,7 @@ export default class Component extends Element {
|
|
|
1470
1504
|
*/
|
|
1471
1505
|
createViewOnlyElement() {
|
|
1472
1506
|
this.setElement(this.ce('dl', {
|
|
1473
|
-
id: this.id
|
|
1507
|
+
id: this.id,
|
|
1474
1508
|
}));
|
|
1475
1509
|
if (this.element) {
|
|
1476
1510
|
// Ensure you can get the component info from the element.
|
|
@@ -1582,7 +1616,7 @@ export default class Component extends Element {
|
|
|
1582
1616
|
*/
|
|
1583
1617
|
itemValueForHTMLMode(value) {
|
|
1584
1618
|
if (Array.isArray(value)) {
|
|
1585
|
-
const values = value.map(item => Array.isArray(item) ? this.itemValueForHTMLMode(item) : this.itemValue(item));
|
|
1619
|
+
const values = value.map((item) => Array.isArray(item) ? this.itemValueForHTMLMode(item) : this.itemValue(item));
|
|
1586
1620
|
return values.join(', ');
|
|
1587
1621
|
}
|
|
1588
1622
|
return this.itemValue(value);
|
|
@@ -1618,7 +1652,8 @@ export default class Component extends Element {
|
|
|
1618
1652
|
};
|
|
1619
1653
|
const handleCloseClick = (e) => {
|
|
1620
1654
|
if (confirm) {
|
|
1621
|
-
confirm()
|
|
1655
|
+
confirm()
|
|
1656
|
+
.then(() => close(e))
|
|
1622
1657
|
.catch(() => { });
|
|
1623
1658
|
}
|
|
1624
1659
|
else {
|
|
@@ -1718,9 +1753,11 @@ export default class Component extends Element {
|
|
|
1718
1753
|
// It is useful to translate strings in different scenarions (eg: custom edit grid templates, custom error messages etc.)
|
|
1719
1754
|
// and desirable to be publicly available rather than calling the internal {instance.t} function in the template string.
|
|
1720
1755
|
t: this.t.bind(this),
|
|
1721
|
-
submission:
|
|
1722
|
-
|
|
1723
|
-
|
|
1756
|
+
submission: this.root
|
|
1757
|
+
? this.root._submission
|
|
1758
|
+
: {
|
|
1759
|
+
data: this.rootValue,
|
|
1760
|
+
},
|
|
1724
1761
|
form: this.root ? this.root._form : {},
|
|
1725
1762
|
options: this.options,
|
|
1726
1763
|
}, additional));
|
|
@@ -1773,7 +1810,12 @@ export default class Component extends Element {
|
|
|
1773
1810
|
const iconset = this.options.iconset || Templates.current.defaultIconset || 'fa';
|
|
1774
1811
|
return Templates.current.hasOwnProperty('iconClass')
|
|
1775
1812
|
? Templates.current.iconClass(iconset, name, spinning)
|
|
1776
|
-
:
|
|
1813
|
+
: [
|
|
1814
|
+
'fa',
|
|
1815
|
+
'bi',
|
|
1816
|
+
].includes(this.options.iconset)
|
|
1817
|
+
? Templates.defaultTemplates.iconClass(iconset, name, spinning)
|
|
1818
|
+
: name;
|
|
1777
1819
|
}
|
|
1778
1820
|
/**
|
|
1779
1821
|
* Returns the size css class names for our current template.
|
|
@@ -1781,16 +1823,16 @@ export default class Component extends Element {
|
|
|
1781
1823
|
* @returns {string} - The size class for our component.
|
|
1782
1824
|
*/
|
|
1783
1825
|
size(size) {
|
|
1784
|
-
return Templates.current.hasOwnProperty('size')
|
|
1785
|
-
? Templates.current.size(size)
|
|
1786
|
-
: size;
|
|
1826
|
+
return Templates.current.hasOwnProperty('size') ? Templates.current.size(size) : size;
|
|
1787
1827
|
}
|
|
1788
1828
|
/**
|
|
1789
1829
|
* The readible name for this component.
|
|
1790
1830
|
* @returns {string} - The name of the component.
|
|
1791
1831
|
*/
|
|
1792
1832
|
get name() {
|
|
1793
|
-
return this.t(this.component.label || this.component.placeholder || this.key, {
|
|
1833
|
+
return this.t(this.component.label || this.component.placeholder || this.key, {
|
|
1834
|
+
_userInput: true,
|
|
1835
|
+
});
|
|
1794
1836
|
}
|
|
1795
1837
|
/**
|
|
1796
1838
|
* Returns the visible errors for this component.
|
|
@@ -1811,10 +1853,7 @@ export default class Component extends Element {
|
|
|
1811
1853
|
* @returns {string} - The error label for this component.
|
|
1812
1854
|
*/
|
|
1813
1855
|
get errorLabel() {
|
|
1814
|
-
return this.t(this.component.errorLabel
|
|
1815
|
-
|| this.component.label
|
|
1816
|
-
|| this.component.placeholder
|
|
1817
|
-
|| this.key);
|
|
1856
|
+
return this.t(this.component.errorLabel || this.component.label || this.component.placeholder || this.key);
|
|
1818
1857
|
}
|
|
1819
1858
|
/**
|
|
1820
1859
|
* Get the error message provided a certain type of error.
|
|
@@ -1822,7 +1861,9 @@ export default class Component extends Element {
|
|
|
1822
1861
|
* @returns {string} - The error message configured for this component.
|
|
1823
1862
|
*/
|
|
1824
1863
|
errorMessage(type) {
|
|
1825
|
-
return
|
|
1864
|
+
return this.component.errors && this.component.errors[type]
|
|
1865
|
+
? this.component.errors[type]
|
|
1866
|
+
: type;
|
|
1826
1867
|
}
|
|
1827
1868
|
/**
|
|
1828
1869
|
* Sets the content, innerHTML, of an element to the sanitized content.
|
|
@@ -1897,7 +1938,7 @@ export default class Component extends Element {
|
|
|
1897
1938
|
*/
|
|
1898
1939
|
removeEventListeners() {
|
|
1899
1940
|
super.removeEventListeners();
|
|
1900
|
-
this.tooltips.forEach(tooltip => tooltip.destroy());
|
|
1941
|
+
this.tooltips.forEach((tooltip) => tooltip.destroy());
|
|
1901
1942
|
this.tooltips = [];
|
|
1902
1943
|
}
|
|
1903
1944
|
/**
|
|
@@ -1988,7 +2029,7 @@ export default class Component extends Element {
|
|
|
1988
2029
|
this.redraw();
|
|
1989
2030
|
}
|
|
1990
2031
|
// Check visibility
|
|
1991
|
-
const visible =
|
|
2032
|
+
const visible = this.hasCondition() ? !this.conditionallyHidden() : !this.component.hidden;
|
|
1992
2033
|
if (this.visible !== visible) {
|
|
1993
2034
|
this.visible = visible;
|
|
1994
2035
|
}
|
|
@@ -2030,7 +2071,8 @@ export default class Component extends Element {
|
|
|
2030
2071
|
const newComponent = fastCloneDeep(this.originalComponent);
|
|
2031
2072
|
let changed = logics.reduce((changed, logic) => {
|
|
2032
2073
|
const result = FormioUtils.checkTrigger(newComponent, logic.trigger, row, data, this.root ? this.root._form : {}, this);
|
|
2033
|
-
return (result ? this.applyActions(newComponent, logic.actions, result, row, data) : false) ||
|
|
2074
|
+
return ((result ? this.applyActions(newComponent, logic.actions, result, row, data) : false) ||
|
|
2075
|
+
changed);
|
|
2034
2076
|
}, false);
|
|
2035
2077
|
// If component definition changed, replace and mark as changed.
|
|
2036
2078
|
if (!_.isEqual(this.component, newComponent)) {
|
|
@@ -2190,13 +2232,17 @@ export default class Component extends Element {
|
|
|
2190
2232
|
};
|
|
2191
2233
|
}
|
|
2192
2234
|
if (!Array.isArray(messages)) {
|
|
2193
|
-
messages = [
|
|
2235
|
+
messages = [
|
|
2236
|
+
messages,
|
|
2237
|
+
];
|
|
2194
2238
|
}
|
|
2195
|
-
messages = _.uniqBy(messages, message => message.message);
|
|
2239
|
+
messages = _.uniqBy(messages, (message) => message.message);
|
|
2196
2240
|
if (this.refs.messageContainer) {
|
|
2197
|
-
this.setContent(this.refs.messageContainer, messages
|
|
2241
|
+
this.setContent(this.refs.messageContainer, messages
|
|
2242
|
+
.map((message) => {
|
|
2198
2243
|
return this.renderTemplate('message', { ...message });
|
|
2199
|
-
})
|
|
2244
|
+
})
|
|
2245
|
+
.join(''));
|
|
2200
2246
|
}
|
|
2201
2247
|
}
|
|
2202
2248
|
/**
|
|
@@ -2256,14 +2302,16 @@ export default class Component extends Element {
|
|
|
2256
2302
|
*/
|
|
2257
2303
|
clearComponentOnHide() {
|
|
2258
2304
|
// clearOnHide defaults to true for old forms (without the value set) so only trigger if the value is false.
|
|
2259
|
-
if (this.component.clearOnHide !== false &&
|
|
2305
|
+
if (this.component.clearOnHide !== false &&
|
|
2306
|
+
!this.options.readOnly &&
|
|
2307
|
+
!this.options.showHiddenFields) {
|
|
2260
2308
|
if (this.shouldConditionallyClear()) {
|
|
2261
2309
|
this.deleteValue();
|
|
2262
2310
|
}
|
|
2263
2311
|
else if (!this.hasValue() && this.shouldAddDefaultValue) {
|
|
2264
2312
|
// If shown, ensure the default is set.
|
|
2265
2313
|
this.setValue(this.defaultValue, {
|
|
2266
|
-
noUpdateEvent: true
|
|
2314
|
+
noUpdateEvent: true,
|
|
2267
2315
|
});
|
|
2268
2316
|
}
|
|
2269
2317
|
}
|
|
@@ -2307,7 +2355,7 @@ export default class Component extends Element {
|
|
|
2307
2355
|
}
|
|
2308
2356
|
if (this.component.onChange) {
|
|
2309
2357
|
this.evaluate(this.component.onChange, {
|
|
2310
|
-
flags
|
|
2358
|
+
flags,
|
|
2311
2359
|
});
|
|
2312
2360
|
}
|
|
2313
2361
|
// Set the changed variable.
|
|
@@ -2315,7 +2363,7 @@ export default class Component extends Element {
|
|
|
2315
2363
|
instance: this,
|
|
2316
2364
|
component: this.component,
|
|
2317
2365
|
value: this.dataValue,
|
|
2318
|
-
flags: flags
|
|
2366
|
+
flags: flags,
|
|
2319
2367
|
};
|
|
2320
2368
|
// Emit the change.
|
|
2321
2369
|
this.emit('componentChange', changed);
|
|
@@ -2338,16 +2386,65 @@ export default class Component extends Element {
|
|
|
2338
2386
|
placeholder: this.t(this.component.placeholder, { _userInput: true }),
|
|
2339
2387
|
modules: {
|
|
2340
2388
|
toolbar: [
|
|
2341
|
-
[
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2389
|
+
[
|
|
2390
|
+
{
|
|
2391
|
+
size: [
|
|
2392
|
+
'small',
|
|
2393
|
+
false,
|
|
2394
|
+
'large',
|
|
2395
|
+
'huge',
|
|
2396
|
+
],
|
|
2397
|
+
},
|
|
2398
|
+
], // custom dropdown
|
|
2399
|
+
[
|
|
2400
|
+
{
|
|
2401
|
+
header: [
|
|
2402
|
+
1,
|
|
2403
|
+
2,
|
|
2404
|
+
3,
|
|
2405
|
+
4,
|
|
2406
|
+
5,
|
|
2407
|
+
6,
|
|
2408
|
+
false,
|
|
2409
|
+
],
|
|
2410
|
+
},
|
|
2411
|
+
],
|
|
2412
|
+
[
|
|
2413
|
+
{ font: [] },
|
|
2414
|
+
],
|
|
2415
|
+
[
|
|
2416
|
+
'bold',
|
|
2417
|
+
'italic',
|
|
2418
|
+
'underline',
|
|
2419
|
+
'strike',
|
|
2420
|
+
{ script: 'sub' },
|
|
2421
|
+
{ script: 'super' },
|
|
2422
|
+
'clean',
|
|
2423
|
+
],
|
|
2424
|
+
[
|
|
2425
|
+
{ color: [] },
|
|
2426
|
+
{ background: [] },
|
|
2427
|
+
],
|
|
2428
|
+
[
|
|
2429
|
+
{ list: 'ordered' },
|
|
2430
|
+
{ list: 'bullet' },
|
|
2431
|
+
{ indent: '-1' },
|
|
2432
|
+
{ indent: '+1' },
|
|
2433
|
+
{ align: [] },
|
|
2434
|
+
],
|
|
2435
|
+
[
|
|
2436
|
+
'blockquote',
|
|
2437
|
+
'code-block',
|
|
2438
|
+
],
|
|
2439
|
+
[
|
|
2440
|
+
'link',
|
|
2441
|
+
'image',
|
|
2442
|
+
'video',
|
|
2443
|
+
'formula',
|
|
2444
|
+
'source',
|
|
2445
|
+
],
|
|
2446
|
+
],
|
|
2447
|
+
},
|
|
2351
2448
|
},
|
|
2352
2449
|
ace: {
|
|
2353
2450
|
theme: 'ace/theme/xcode',
|
|
@@ -2355,7 +2452,7 @@ export default class Component extends Element {
|
|
|
2355
2452
|
minLines: 12,
|
|
2356
2453
|
tabSize: 2,
|
|
2357
2454
|
mode: 'ace/mode/javascript',
|
|
2358
|
-
placeholder: this.t(this.component.placeholder, { _userInput: true })
|
|
2455
|
+
placeholder: this.t(this.component.placeholder, { _userInput: true }),
|
|
2359
2456
|
},
|
|
2360
2457
|
ckeditor: {
|
|
2361
2458
|
image: {
|
|
@@ -2365,18 +2462,18 @@ export default class Component extends Element {
|
|
|
2365
2462
|
'imageStyle:full',
|
|
2366
2463
|
'imageStyle:alignLeft',
|
|
2367
2464
|
'imageStyle:alignCenter',
|
|
2368
|
-
'imageStyle:alignRight'
|
|
2465
|
+
'imageStyle:alignRight',
|
|
2369
2466
|
],
|
|
2370
2467
|
styles: [
|
|
2371
2468
|
'full',
|
|
2372
2469
|
'alignLeft',
|
|
2373
2470
|
'alignCenter',
|
|
2374
|
-
'alignRight'
|
|
2375
|
-
]
|
|
2471
|
+
'alignRight',
|
|
2472
|
+
],
|
|
2376
2473
|
},
|
|
2377
|
-
extraPlugins: []
|
|
2474
|
+
extraPlugins: [],
|
|
2378
2475
|
},
|
|
2379
|
-
default: {}
|
|
2476
|
+
default: {},
|
|
2380
2477
|
};
|
|
2381
2478
|
}
|
|
2382
2479
|
addCKE(element, settings, onChange) {
|
|
@@ -2387,8 +2484,7 @@ export default class Component extends Element {
|
|
|
2387
2484
|
if (this.component.isUploadEnabled) {
|
|
2388
2485
|
settings.extraPlugins.push(getFormioUploadAdapterPlugin(this.fileService, this));
|
|
2389
2486
|
}
|
|
2390
|
-
return Formio.requireLibrary('ckeditor', isIEBrowser ? 'CKEDITOR' : 'ClassicEditor', _.get(this.options, 'editors.ckeditor.src', `${Formio.cdn.ckeditor}/ckeditor.js`), true)
|
|
2391
|
-
.then(() => {
|
|
2487
|
+
return Formio.requireLibrary('ckeditor', isIEBrowser ? 'CKEDITOR' : 'ClassicEditor', _.get(this.options, 'editors.ckeditor.src', `${Formio.cdn.ckeditor}/ckeditor.js`), true).then(() => {
|
|
2392
2488
|
if (!element.parentNode) {
|
|
2393
2489
|
return Promise.reject();
|
|
2394
2490
|
}
|
|
@@ -2398,7 +2494,7 @@ export default class Component extends Element {
|
|
|
2398
2494
|
return Promise.resolve(editor);
|
|
2399
2495
|
}
|
|
2400
2496
|
else {
|
|
2401
|
-
return ClassicEditor.create(element, settings).then(editor => {
|
|
2497
|
+
return ClassicEditor.create(element, settings).then((editor) => {
|
|
2402
2498
|
editor.model.document.on('change', () => onChange(editor.data.get()));
|
|
2403
2499
|
return editor;
|
|
2404
2500
|
});
|
|
@@ -2412,18 +2508,16 @@ export default class Component extends Element {
|
|
|
2412
2508
|
...settings,
|
|
2413
2509
|
modules: {
|
|
2414
2510
|
table: true,
|
|
2415
|
-
...settings.modules
|
|
2416
|
-
}
|
|
2511
|
+
...settings.modules,
|
|
2512
|
+
},
|
|
2417
2513
|
};
|
|
2418
2514
|
// Lazy load the quill css.
|
|
2419
2515
|
Formio.requireLibrary(`quill-css-${settings.theme}`, 'Quill', [
|
|
2420
|
-
{ type: 'styles', src: `${Formio.cdn.quill}/quill.${settings.theme}.css` }
|
|
2516
|
+
{ type: 'styles', src: `${Formio.cdn.quill}/quill.${settings.theme}.css` },
|
|
2421
2517
|
], true);
|
|
2422
2518
|
// Lazy load the quill library.
|
|
2423
|
-
return Formio.requireLibrary('quill', 'Quill', _.get(this.options, 'editors.quill.src', `${Formio.cdn.quill}/quill.min.js`), true)
|
|
2424
|
-
.then(() => {
|
|
2425
|
-
return Formio.requireLibrary('quill-table', 'Quill', `${Formio.cdn.baseUrl}/quill/quill-table.js`, true)
|
|
2426
|
-
.then(() => {
|
|
2519
|
+
return Formio.requireLibrary('quill', 'Quill', _.get(this.options, 'editors.quill.src', `${Formio.cdn.quill}/quill.min.js`), true).then(() => {
|
|
2520
|
+
return Formio.requireLibrary('quill-table', 'Quill', `${Formio.cdn.baseUrl}/quill/quill-table.js`, true).then(() => {
|
|
2427
2521
|
if (!element.parentNode) {
|
|
2428
2522
|
return Promise.reject();
|
|
2429
2523
|
}
|
|
@@ -2439,7 +2533,7 @@ export default class Component extends Element {
|
|
|
2439
2533
|
if (txtArea.style.display === 'inherit') {
|
|
2440
2534
|
this.quill.setContents(this.quill.clipboard.convert({ html: txtArea.value }));
|
|
2441
2535
|
}
|
|
2442
|
-
txtArea.style.display =
|
|
2536
|
+
txtArea.style.display = txtArea.style.display === 'none' ? 'inherit' : 'none';
|
|
2443
2537
|
});
|
|
2444
2538
|
}
|
|
2445
2539
|
/** END CODEBLOCK */
|
|
@@ -2460,10 +2554,10 @@ export default class Component extends Element {
|
|
|
2460
2554
|
}
|
|
2461
2555
|
get shouldSanitizeValue() {
|
|
2462
2556
|
// Sanitize value if sanitizing for thw whole content is turned off
|
|
2463
|
-
return
|
|
2557
|
+
return this.options?.sanitize !== false;
|
|
2464
2558
|
}
|
|
2465
2559
|
addAce(element, settings, onChange) {
|
|
2466
|
-
if (!settings ||
|
|
2560
|
+
if (!settings || settings.theme === 'snow') {
|
|
2467
2561
|
const mode = settings ? settings.mode : '';
|
|
2468
2562
|
settings = {};
|
|
2469
2563
|
if (mode) {
|
|
@@ -2471,8 +2565,7 @@ export default class Component extends Element {
|
|
|
2471
2565
|
}
|
|
2472
2566
|
}
|
|
2473
2567
|
settings = _.merge(this.wysiwygDefault.ace, _.get(this.options, 'editors.ace.settings', {}), settings || {});
|
|
2474
|
-
return Formio.requireLibrary('ace', 'ace', _.get(this.options, 'editors.ace.src', `${Formio.cdn.ace}/ace.js`), true)
|
|
2475
|
-
.then((editor) => {
|
|
2568
|
+
return Formio.requireLibrary('ace', 'ace', _.get(this.options, 'editors.ace.src', `${Formio.cdn.ace}/ace.js`), true).then((editor) => {
|
|
2476
2569
|
editor = editor.edit(element);
|
|
2477
2570
|
editor.removeAllListeners('change');
|
|
2478
2571
|
editor.setOptions(settings);
|
|
@@ -2530,10 +2623,10 @@ export default class Component extends Element {
|
|
|
2530
2623
|
if (!this.allowData || !this.key) {
|
|
2531
2624
|
return;
|
|
2532
2625
|
}
|
|
2533
|
-
if (
|
|
2626
|
+
if (value !== null && value !== undefined) {
|
|
2534
2627
|
value = this.hook('setDataValue', value, this.key, this._data);
|
|
2535
2628
|
}
|
|
2536
|
-
if (
|
|
2629
|
+
if (value === null || value === undefined) {
|
|
2537
2630
|
this.unset();
|
|
2538
2631
|
return;
|
|
2539
2632
|
}
|
|
@@ -2564,7 +2657,7 @@ export default class Component extends Element {
|
|
|
2564
2657
|
deleteValue() {
|
|
2565
2658
|
this.setValue(null, {
|
|
2566
2659
|
noUpdateEvent: true,
|
|
2567
|
-
noDefault: true
|
|
2660
|
+
noDefault: true,
|
|
2568
2661
|
});
|
|
2569
2662
|
this.unset();
|
|
2570
2663
|
}
|
|
@@ -2579,9 +2672,10 @@ export default class Component extends Element {
|
|
|
2579
2672
|
* @returns {boolean} - TRUE if a default value is set.
|
|
2580
2673
|
*/
|
|
2581
2674
|
get hasDefaultValue() {
|
|
2582
|
-
return this.component.customDefaultValue ||
|
|
2583
|
-
(this.component.defaultValue
|
|
2584
|
-
|
|
2675
|
+
return (this.component.customDefaultValue ||
|
|
2676
|
+
(this.component.hasOwnProperty('defaultValue') &&
|
|
2677
|
+
this.component.defaultValue !== null &&
|
|
2678
|
+
this.component.defaultValue !== undefined));
|
|
2585
2679
|
}
|
|
2586
2680
|
/**
|
|
2587
2681
|
* Determine if we should add a default value for this component.
|
|
@@ -2676,7 +2770,7 @@ export default class Component extends Element {
|
|
|
2676
2770
|
Array.isArray(this.defaultValue) &&
|
|
2677
2771
|
this.refs.hasOwnProperty('input') &&
|
|
2678
2772
|
valueInput &&
|
|
2679
|
-
|
|
2773
|
+
valueInput.length !== value.length &&
|
|
2680
2774
|
this.visible) {
|
|
2681
2775
|
if (isFilelink || valueInput.length) {
|
|
2682
2776
|
this.redraw();
|
|
@@ -2730,9 +2824,9 @@ export default class Component extends Element {
|
|
|
2730
2824
|
}
|
|
2731
2825
|
setDefaultValue() {
|
|
2732
2826
|
if (this.defaultValue && this.shouldAddDefaultValue) {
|
|
2733
|
-
const defaultValue =
|
|
2827
|
+
const defaultValue = this.component.multiple && !this.dataValue.length ? [] : this.defaultValue;
|
|
2734
2828
|
this.setValue(defaultValue, {
|
|
2735
|
-
noUpdateEvent: true
|
|
2829
|
+
noUpdateEvent: true,
|
|
2736
2830
|
});
|
|
2737
2831
|
}
|
|
2738
2832
|
}
|
|
@@ -2742,7 +2836,7 @@ export default class Component extends Element {
|
|
|
2742
2836
|
restoreValue() {
|
|
2743
2837
|
if (this.hasSetValue) {
|
|
2744
2838
|
this.setValue(this.dataValue, {
|
|
2745
|
-
noUpdateEvent: true
|
|
2839
|
+
noUpdateEvent: true,
|
|
2746
2840
|
});
|
|
2747
2841
|
}
|
|
2748
2842
|
else {
|
|
@@ -2764,10 +2858,10 @@ export default class Component extends Element {
|
|
|
2764
2858
|
* @returns {boolean} - If the value changed.
|
|
2765
2859
|
*/
|
|
2766
2860
|
updateComponentValue(value, flags = {}) {
|
|
2767
|
-
let newValue =
|
|
2861
|
+
let newValue = !flags.resetValue && (value === undefined || value === null) ? this.getValue() : value;
|
|
2768
2862
|
newValue = this.normalizeValue(newValue, flags);
|
|
2769
2863
|
const oldValue = this.dataValue;
|
|
2770
|
-
let changed =
|
|
2864
|
+
let changed = newValue !== undefined ? this.hasChanged(newValue, oldValue) : false;
|
|
2771
2865
|
if (changed) {
|
|
2772
2866
|
this.dataValue = newValue;
|
|
2773
2867
|
changed = this.dataValue !== oldValue;
|
|
@@ -2791,7 +2885,7 @@ export default class Component extends Element {
|
|
|
2791
2885
|
className: this.iconClass(name),
|
|
2792
2886
|
ref,
|
|
2793
2887
|
styles,
|
|
2794
|
-
content
|
|
2888
|
+
content,
|
|
2795
2889
|
});
|
|
2796
2890
|
}
|
|
2797
2891
|
/**
|
|
@@ -2802,7 +2896,7 @@ export default class Component extends Element {
|
|
|
2802
2896
|
this.setValue(this.defaultValue || this.emptyValue, {
|
|
2803
2897
|
noUpdateEvent: true,
|
|
2804
2898
|
noValidate: true,
|
|
2805
|
-
resetValue: true
|
|
2899
|
+
resetValue: true,
|
|
2806
2900
|
});
|
|
2807
2901
|
}
|
|
2808
2902
|
/**
|
|
@@ -2812,15 +2906,12 @@ export default class Component extends Element {
|
|
|
2812
2906
|
* @returns {boolean} - TRUE if the value has changed.
|
|
2813
2907
|
*/
|
|
2814
2908
|
hasChanged(newValue, oldValue) {
|
|
2815
|
-
if ((
|
|
2816
|
-
(
|
|
2909
|
+
if ((newValue === undefined || newValue === null) &&
|
|
2910
|
+
(oldValue === undefined || oldValue === null || this.isEmpty(oldValue))) {
|
|
2817
2911
|
return false;
|
|
2818
2912
|
}
|
|
2819
2913
|
// If we do not have a value and are getting set to anything other than undefined or null, then we changed.
|
|
2820
|
-
if (newValue !== undefined &&
|
|
2821
|
-
newValue !== null &&
|
|
2822
|
-
this.allowData &&
|
|
2823
|
-
!this.hasValue()) {
|
|
2914
|
+
if (newValue !== undefined && newValue !== null && this.allowData && !this.hasValue()) {
|
|
2824
2915
|
return true;
|
|
2825
2916
|
}
|
|
2826
2917
|
return !_.isEqual(newValue, oldValue);
|
|
@@ -2854,11 +2945,10 @@ export default class Component extends Element {
|
|
|
2854
2945
|
data,
|
|
2855
2946
|
row: row || this.data,
|
|
2856
2947
|
submission: this.root?._submission || {
|
|
2857
|
-
data: this.rootValue
|
|
2858
|
-
}
|
|
2948
|
+
data: this.rootValue,
|
|
2949
|
+
},
|
|
2859
2950
|
}, 'value');
|
|
2860
2951
|
}
|
|
2861
|
-
/* eslint-disable max-statements */
|
|
2862
2952
|
calculateComponentValue(data, flags, row) {
|
|
2863
2953
|
// Skip value calculation for the component if we don't have entire form data set or in builder mode
|
|
2864
2954
|
if (this.builderMode || _.isUndefined(_.get(this, 'root.data'))) {
|
|
@@ -2879,7 +2969,10 @@ export default class Component extends Element {
|
|
|
2879
2969
|
!(this.component.calculateValue || this.component.calculateValueVariable) ||
|
|
2880
2970
|
(this.options.server && !this.component.calculateServer) ||
|
|
2881
2971
|
(flags.dataSourceInitialLoading && allowOverride) ||
|
|
2882
|
-
(this.options.readOnly &&
|
|
2972
|
+
(this.options.readOnly &&
|
|
2973
|
+
this.options.pdf &&
|
|
2974
|
+
allowOverride &&
|
|
2975
|
+
_.get(this.root, 'submission._id', false))) {
|
|
2883
2976
|
return false;
|
|
2884
2977
|
}
|
|
2885
2978
|
const dataValue = this.dataValue;
|
|
@@ -2895,7 +2988,7 @@ export default class Component extends Element {
|
|
|
2895
2988
|
// Do not override calculations on server if they have calculateServer set.
|
|
2896
2989
|
if (allowOverride) {
|
|
2897
2990
|
// The value is considered locked if it is not empty and comes from a submission value.
|
|
2898
|
-
const fromSubmission =
|
|
2991
|
+
const fromSubmission = flags.fromSubmission && this.component.persistent === true;
|
|
2899
2992
|
if (this.isEmpty(dataValue)) {
|
|
2900
2993
|
// Reset the calculation lock if ever the data is cleared.
|
|
2901
2994
|
this.calculationLocked = false;
|
|
@@ -2904,7 +2997,7 @@ export default class Component extends Element {
|
|
|
2904
2997
|
this.calculationLocked = true;
|
|
2905
2998
|
return false;
|
|
2906
2999
|
}
|
|
2907
|
-
const firstPass =
|
|
3000
|
+
const firstPass = this.calculatedValue === undefined || flags.resetValue;
|
|
2908
3001
|
if (firstPass) {
|
|
2909
3002
|
this.calculatedValue = null;
|
|
2910
3003
|
}
|
|
@@ -2945,7 +3038,6 @@ export default class Component extends Element {
|
|
|
2945
3038
|
}
|
|
2946
3039
|
return false;
|
|
2947
3040
|
}
|
|
2948
|
-
/* eslint-enable max-statements */
|
|
2949
3041
|
/**
|
|
2950
3042
|
* Performs calculations in this component plus any child components.
|
|
2951
3043
|
* @param {*} data - The data to perform the calculation with.
|
|
@@ -3020,8 +3112,8 @@ export default class Component extends Element {
|
|
|
3020
3112
|
scope: validationScope,
|
|
3021
3113
|
instance: this,
|
|
3022
3114
|
processors: [
|
|
3023
|
-
validateProcessInfo
|
|
3024
|
-
]
|
|
3115
|
+
validateProcessInfo,
|
|
3116
|
+
],
|
|
3025
3117
|
});
|
|
3026
3118
|
const errors = validationScope.errors;
|
|
3027
3119
|
const interpolatedErrors = FormioUtils.interpolateErrors(this.component, errors, this.t.bind(this));
|
|
@@ -3040,8 +3132,10 @@ export default class Component extends Element {
|
|
|
3040
3132
|
if (silentCheck) {
|
|
3041
3133
|
return [];
|
|
3042
3134
|
}
|
|
3043
|
-
const messages = errors.filter(message => !message.fromServer);
|
|
3044
|
-
if (errors.length &&
|
|
3135
|
+
const messages = errors.filter((message) => !message.fromServer);
|
|
3136
|
+
if (errors.length &&
|
|
3137
|
+
!!messages.length &&
|
|
3138
|
+
(!this.isEmpty(this.defaultValue) || dirty || !this.pristine)) {
|
|
3045
3139
|
return this.setCustomValidity(messages, dirty);
|
|
3046
3140
|
}
|
|
3047
3141
|
else {
|
|
@@ -3055,7 +3149,12 @@ export default class Component extends Element {
|
|
|
3055
3149
|
*/
|
|
3056
3150
|
interpolateErrors(errors) {
|
|
3057
3151
|
const interpolatedErrors = FormioUtils.interpolateErrors(this.component, errors, this.t.bind(this));
|
|
3058
|
-
return this.serverErrors?.length
|
|
3152
|
+
return this.serverErrors?.length
|
|
3153
|
+
? [
|
|
3154
|
+
...interpolatedErrors,
|
|
3155
|
+
...this.serverErrors,
|
|
3156
|
+
]
|
|
3157
|
+
: interpolatedErrors;
|
|
3059
3158
|
}
|
|
3060
3159
|
/**
|
|
3061
3160
|
* Show component validation errors.
|
|
@@ -3069,7 +3168,7 @@ export default class Component extends Element {
|
|
|
3069
3168
|
if (flags.silentCheck) {
|
|
3070
3169
|
return [];
|
|
3071
3170
|
}
|
|
3072
|
-
let isDirty =
|
|
3171
|
+
let isDirty = flags.dirty === false ? false : this.dirty || flags.dirty;
|
|
3073
3172
|
if (this.options.alwaysDirty) {
|
|
3074
3173
|
isDirty = true;
|
|
3075
3174
|
}
|
|
@@ -3103,8 +3202,8 @@ export default class Component extends Element {
|
|
|
3103
3202
|
form: this.root ? this.root._form : {},
|
|
3104
3203
|
scope: { errors: [] },
|
|
3105
3204
|
processors: [
|
|
3106
|
-
validateProcessInfo
|
|
3107
|
-
]
|
|
3205
|
+
validateProcessInfo,
|
|
3206
|
+
],
|
|
3108
3207
|
};
|
|
3109
3208
|
if (async) {
|
|
3110
3209
|
return processOne(processContext).then(() => {
|
|
@@ -3126,7 +3225,7 @@ export default class Component extends Element {
|
|
|
3126
3225
|
* @returns {boolean} - TRUE if the component is valid.
|
|
3127
3226
|
*/
|
|
3128
3227
|
checkComponentValidity(data = null, dirty = false, row = null, flags = {}, allErrors = []) {
|
|
3129
|
-
data =
|
|
3228
|
+
data = this.rootValue;
|
|
3130
3229
|
row = row || this.data;
|
|
3131
3230
|
flags.dirty = dirty || false;
|
|
3132
3231
|
if (flags.async) {
|
|
@@ -3213,13 +3312,15 @@ export default class Component extends Element {
|
|
|
3213
3312
|
this.checkingData = false;
|
|
3214
3313
|
}
|
|
3215
3314
|
checkModal(errors = [], dirty = false) {
|
|
3216
|
-
const messages = errors.filter(error => !error.fromServer);
|
|
3315
|
+
const messages = errors.filter((error) => !error.fromServer);
|
|
3217
3316
|
const isValid = errors.length === 0;
|
|
3218
3317
|
if (!this.component.modalEdit || !this.componentModal) {
|
|
3219
3318
|
return;
|
|
3220
3319
|
}
|
|
3221
3320
|
if (dirty && !isValid) {
|
|
3222
|
-
this.setErrorClasses([
|
|
3321
|
+
this.setErrorClasses([
|
|
3322
|
+
this.refs.openModal,
|
|
3323
|
+
], dirty, !isValid, !!messages.length, this.refs.openModalWrapper);
|
|
3223
3324
|
}
|
|
3224
3325
|
else {
|
|
3225
3326
|
this.clearErrorClasses(this.refs.openModalWrapper);
|
|
@@ -3229,7 +3330,7 @@ export default class Component extends Element {
|
|
|
3229
3330
|
return this.dataValue;
|
|
3230
3331
|
}
|
|
3231
3332
|
isEmpty(value = this.dataValue) {
|
|
3232
|
-
const isEmptyArray =
|
|
3333
|
+
const isEmptyArray = _.isArray(value) && value.length === 1 ? _.isEqual(value[0], this.emptyValue) : false;
|
|
3233
3334
|
return value == null || value.length === 0 || _.isEqual(value, this.emptyValue) || isEmptyArray;
|
|
3234
3335
|
}
|
|
3235
3336
|
isEqual(valueA, valueB = this.dataValue) {
|
|
@@ -3280,7 +3381,7 @@ export default class Component extends Element {
|
|
|
3280
3381
|
instance: this,
|
|
3281
3382
|
component: this.component,
|
|
3282
3383
|
value: this.dataValue,
|
|
3283
|
-
flags: { fromBlur: true }
|
|
3384
|
+
flags: { fromBlur: true },
|
|
3284
3385
|
});
|
|
3285
3386
|
}
|
|
3286
3387
|
this.root.focusedComponent = null;
|
|
@@ -3288,7 +3389,6 @@ export default class Component extends Element {
|
|
|
3288
3389
|
});
|
|
3289
3390
|
});
|
|
3290
3391
|
}
|
|
3291
|
-
// eslint-disable-next-line max-statements
|
|
3292
3392
|
setCustomValidity(messages, dirty, external) {
|
|
3293
3393
|
const inputRefs = this.isInputComponent ? this.refs.input || [] : null;
|
|
3294
3394
|
if (typeof messages === 'string' && messages) {
|
|
@@ -3300,13 +3400,15 @@ export default class Component extends Element {
|
|
|
3300
3400
|
}
|
|
3301
3401
|
if (!Array.isArray(messages)) {
|
|
3302
3402
|
if (messages) {
|
|
3303
|
-
messages = [
|
|
3403
|
+
messages = [
|
|
3404
|
+
messages,
|
|
3405
|
+
];
|
|
3304
3406
|
}
|
|
3305
3407
|
else {
|
|
3306
3408
|
messages = [];
|
|
3307
3409
|
}
|
|
3308
3410
|
}
|
|
3309
|
-
const errors = messages.filter(message => message.level === 'error');
|
|
3411
|
+
const errors = messages.filter((message) => message.level === 'error');
|
|
3310
3412
|
let invalidInputRefs = inputRefs;
|
|
3311
3413
|
// Filter the invalid input refs in multiple components
|
|
3312
3414
|
if (this.component.multiple) {
|
|
@@ -3337,7 +3439,7 @@ export default class Component extends Element {
|
|
|
3337
3439
|
this.setErrorClasses(invalidInputRefs, dirty, !!errors.length, !!messages.length);
|
|
3338
3440
|
}
|
|
3339
3441
|
}
|
|
3340
|
-
else if (!errors.length ||
|
|
3442
|
+
else if (!errors.length || errors[0].external === !!external) {
|
|
3341
3443
|
if (this.refs.messageContainer) {
|
|
3342
3444
|
this.empty(this.refs.messageContainer);
|
|
3343
3445
|
}
|
|
@@ -3367,7 +3469,9 @@ export default class Component extends Element {
|
|
|
3367
3469
|
if (!this.root || !this.root.editing) {
|
|
3368
3470
|
return false;
|
|
3369
3471
|
}
|
|
3370
|
-
return (this.component.protected ||
|
|
3472
|
+
return (this.component.protected ||
|
|
3473
|
+
!this.component.persistent ||
|
|
3474
|
+
this.component.persistent === 'client-only');
|
|
3371
3475
|
}
|
|
3372
3476
|
shouldSkipValidation(data, row, flags = {}) {
|
|
3373
3477
|
const rules = [
|
|
@@ -3381,15 +3485,16 @@ export default class Component extends Element {
|
|
|
3381
3485
|
() => this.isValueHidden(),
|
|
3382
3486
|
// Force valid if component is hidden.
|
|
3383
3487
|
() => {
|
|
3384
|
-
if (!this.component.validateWhenHidden &&
|
|
3488
|
+
if (!this.component.validateWhenHidden &&
|
|
3489
|
+
(!this.visible || !this.checkCondition(row, data))) {
|
|
3385
3490
|
// If this component is forced valid when it is hidden, then we also need to reset the errors for this component.
|
|
3386
3491
|
this._errors = [];
|
|
3387
3492
|
return true;
|
|
3388
3493
|
}
|
|
3389
3494
|
return false;
|
|
3390
|
-
}
|
|
3495
|
+
},
|
|
3391
3496
|
];
|
|
3392
|
-
return rules.some(pred => pred());
|
|
3497
|
+
return rules.some((pred) => pred());
|
|
3393
3498
|
}
|
|
3394
3499
|
// Maintain reverse compatibility.
|
|
3395
3500
|
whenReady() {
|
|
@@ -3406,7 +3511,13 @@ export default class Component extends Element {
|
|
|
3406
3511
|
*/
|
|
3407
3512
|
asString(value) {
|
|
3408
3513
|
value = value || this.getValue();
|
|
3409
|
-
return (Array.isArray(value)
|
|
3514
|
+
return (Array.isArray(value)
|
|
3515
|
+
? value
|
|
3516
|
+
: [
|
|
3517
|
+
value,
|
|
3518
|
+
])
|
|
3519
|
+
.map(_.toString)
|
|
3520
|
+
.join(', ');
|
|
3410
3521
|
}
|
|
3411
3522
|
/**
|
|
3412
3523
|
* Return if the component is disabled.
|
|
@@ -3435,13 +3546,13 @@ export default class Component extends Element {
|
|
|
3435
3546
|
}
|
|
3436
3547
|
}
|
|
3437
3548
|
setLoading(element, loading) {
|
|
3438
|
-
if (!element ||
|
|
3549
|
+
if (!element || element.loading === loading) {
|
|
3439
3550
|
return;
|
|
3440
3551
|
}
|
|
3441
3552
|
element.loading = loading;
|
|
3442
3553
|
if (!element.loader && loading) {
|
|
3443
3554
|
element.loader = this.ce('i', {
|
|
3444
|
-
class: `${this.iconClass('refresh', true)} button-icon-right
|
|
3555
|
+
class: `${this.iconClass('refresh', true)} button-icon-right`,
|
|
3445
3556
|
});
|
|
3446
3557
|
}
|
|
3447
3558
|
if (element.loader) {
|
|
@@ -3456,9 +3567,9 @@ export default class Component extends Element {
|
|
|
3456
3567
|
selectOptions(select, tag, options, defaultValue) {
|
|
3457
3568
|
_.each(options, (option) => {
|
|
3458
3569
|
const attrs = {
|
|
3459
|
-
value: option.value
|
|
3570
|
+
value: option.value,
|
|
3460
3571
|
};
|
|
3461
|
-
if (defaultValue !== undefined &&
|
|
3572
|
+
if (defaultValue !== undefined && option.value === defaultValue) {
|
|
3462
3573
|
attrs.selected = 'selected';
|
|
3463
3574
|
}
|
|
3464
3575
|
const optionElement = this.ce('option', attrs);
|
|
@@ -3485,8 +3596,7 @@ export default class Component extends Element {
|
|
|
3485
3596
|
}
|
|
3486
3597
|
getRelativePath(path) {
|
|
3487
3598
|
const keyPart = `.${this.key}`;
|
|
3488
|
-
const thisPath = this.isInputComponent ? this.path
|
|
3489
|
-
: this.path.slice(0).replace(keyPart, '');
|
|
3599
|
+
const thisPath = this.isInputComponent ? this.path : this.path.slice(0).replace(keyPart, '');
|
|
3490
3600
|
return path.replace(thisPath, '');
|
|
3491
3601
|
}
|
|
3492
3602
|
clear() {
|
|
@@ -3503,7 +3613,7 @@ export default class Component extends Element {
|
|
|
3503
3613
|
this.removeChildFrom(element, this.element);
|
|
3504
3614
|
}
|
|
3505
3615
|
detachLogic() {
|
|
3506
|
-
this.logic.forEach(logic => {
|
|
3616
|
+
this.logic.forEach((logic) => {
|
|
3507
3617
|
if (logic.trigger.type === 'event') {
|
|
3508
3618
|
const event = this.interpolate(logic.trigger.event);
|
|
3509
3619
|
this.off(event); // only applies to callbacks on this component
|
|
@@ -3524,10 +3634,16 @@ export default class Component extends Element {
|
|
|
3524
3634
|
// If component definition changed, replace it.
|
|
3525
3635
|
if (!_.isEqual(this.component, newComponent)) {
|
|
3526
3636
|
this.component = newComponent;
|
|
3527
|
-
const visible = this.hasCondition()
|
|
3637
|
+
const visible = this.hasCondition()
|
|
3638
|
+
? !this.conditionallyHidden()
|
|
3639
|
+
: !this.component.hidden;
|
|
3528
3640
|
const disabled = this.shouldDisabled;
|
|
3529
3641
|
// Change states which won't be recalculated during redrawing
|
|
3530
3642
|
if (this.visible !== visible) {
|
|
3643
|
+
// If the logic is triggered by an event and the action sets the hidden state then the original
|
|
3644
|
+
// component definition must be changed so that the components hidden state does not get flipped back by
|
|
3645
|
+
// the fieldLogic function
|
|
3646
|
+
this.originalComponent.hidden = !visible;
|
|
3531
3647
|
this.visible = visible;
|
|
3532
3648
|
}
|
|
3533
3649
|
if (this.disabled !== disabled) {
|
|
@@ -3549,7 +3665,7 @@ export default class Component extends Element {
|
|
|
3549
3665
|
name: this.options.name,
|
|
3550
3666
|
type: this.component.inputType || 'text',
|
|
3551
3667
|
class: 'form-control',
|
|
3552
|
-
lang: this.options.language
|
|
3668
|
+
lang: this.options.language,
|
|
3553
3669
|
};
|
|
3554
3670
|
if (this.component.placeholder) {
|
|
3555
3671
|
attributes.placeholder = this.t(this.component.placeholder, { _userInput: true });
|
|
@@ -3565,7 +3681,7 @@ export default class Component extends Element {
|
|
|
3565
3681
|
type: 'input',
|
|
3566
3682
|
component: this.component,
|
|
3567
3683
|
changeEvent: 'change',
|
|
3568
|
-
attr: attributes
|
|
3684
|
+
attr: attributes,
|
|
3569
3685
|
};
|
|
3570
3686
|
}
|
|
3571
3687
|
autofocus() {
|
|
@@ -3653,14 +3769,18 @@ Component.requireLibrary = function (name, property, src, polling) {
|
|
|
3653
3769
|
Component.externalLibraries[name].resolve(plugin);
|
|
3654
3770
|
}
|
|
3655
3771
|
else {
|
|
3656
|
-
src = Array.isArray(src)
|
|
3772
|
+
src = Array.isArray(src)
|
|
3773
|
+
? src
|
|
3774
|
+
: [
|
|
3775
|
+
src,
|
|
3776
|
+
];
|
|
3657
3777
|
src.forEach((lib) => {
|
|
3658
3778
|
let attrs = {};
|
|
3659
3779
|
let elementType = '';
|
|
3660
3780
|
if (typeof lib === 'string') {
|
|
3661
3781
|
lib = {
|
|
3662
3782
|
type: 'script',
|
|
3663
|
-
src: lib
|
|
3783
|
+
src: lib,
|
|
3664
3784
|
};
|
|
3665
3785
|
}
|
|
3666
3786
|
switch (lib.type) {
|
|
@@ -3670,14 +3790,14 @@ Component.requireLibrary = function (name, property, src, polling) {
|
|
|
3670
3790
|
src: lib.src,
|
|
3671
3791
|
type: 'text/javascript',
|
|
3672
3792
|
defer: true,
|
|
3673
|
-
async: true
|
|
3793
|
+
async: true,
|
|
3674
3794
|
};
|
|
3675
3795
|
break;
|
|
3676
3796
|
case 'styles':
|
|
3677
3797
|
elementType = 'link';
|
|
3678
3798
|
attrs = {
|
|
3679
3799
|
href: lib.src,
|
|
3680
|
-
rel: 'stylesheet'
|
|
3800
|
+
rel: 'stylesheet',
|
|
3681
3801
|
};
|
|
3682
3802
|
break;
|
|
3683
3803
|
}
|
|
@@ -3706,8 +3826,7 @@ Component.requireLibrary = function (name, property, src, polling) {
|
|
|
3706
3826
|
return Component.externalLibraries[name].ready;
|
|
3707
3827
|
};
|
|
3708
3828
|
Component.libraryReady = function (name) {
|
|
3709
|
-
if (Component.externalLibraries.hasOwnProperty(name) &&
|
|
3710
|
-
Component.externalLibraries[name].ready) {
|
|
3829
|
+
if (Component.externalLibraries.hasOwnProperty(name) && Component.externalLibraries[name].ready) {
|
|
3711
3830
|
return Component.externalLibraries[name].ready;
|
|
3712
3831
|
}
|
|
3713
3832
|
return Promise.reject(`${name} library was not required.`);
|