@formio/js 5.0.0-dev.5643.9c5173a → 5.0.0-dev.5646.35daa65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Changelog.md +65 -2
- package/dist/formio.builder.css +8 -8
- 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 +8 -8
- package/dist/formio.form.js +792 -1237
- package/dist/formio.form.min.css +1 -1
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +3 -5
- package/dist/formio.full.css +8 -8
- package/dist/formio.full.js +692 -933
- package/dist/formio.full.min.css +1 -1
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +3 -5
- package/dist/formio.js +18 -18
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +1 -1
- package/dist/formio.utils.js +1853 -476
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +10 -4
- package/embed.d.ts +1 -0
- package/form.d.ts +1 -0
- package/lib/cjs/CDN.d.ts +1 -0
- package/lib/cjs/CDN.js +6 -3
- package/lib/cjs/Element.d.ts +86 -96
- package/lib/cjs/Element.js +68 -78
- package/lib/cjs/Embed.d.ts +1 -1
- package/lib/cjs/Embed.js +52 -12
- package/lib/cjs/Form.d.ts +365 -36
- package/lib/cjs/Form.js +50 -64
- package/lib/cjs/FormBuilder.d.ts +187 -2
- package/lib/cjs/FormBuilder.js +30 -8
- package/lib/cjs/Formio.js +1 -0
- package/lib/cjs/InlineEmbed.d.ts +7 -0
- package/lib/cjs/InlineEmbed.js +116 -0
- package/lib/cjs/PDF.d.ts +11 -13
- package/lib/cjs/PDF.js +6 -8
- package/lib/cjs/Webform.d.ts +187 -139
- package/lib/cjs/Webform.js +330 -300
- package/lib/cjs/WebformBuilder.d.ts +16 -14
- package/lib/cjs/WebformBuilder.js +19 -12
- package/lib/cjs/Wizard.d.ts +31 -21
- package/lib/cjs/Wizard.js +43 -20
- package/lib/cjs/WizardBuilder.d.ts +1 -1
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.d.ts +8 -5
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.js +6 -3
- package/lib/cjs/components/Components.d.ts +4 -4
- package/lib/cjs/components/Components.js +3 -3
- package/lib/cjs/components/_classes/component/Component.d.ts +515 -269
- package/lib/cjs/components/_classes/component/Component.form.d.ts +6 -3
- package/lib/cjs/components/_classes/component/Component.form.js +5 -0
- package/lib/cjs/components/_classes/component/Component.js +462 -204
- package/lib/cjs/components/_classes/component/editForm/Component.edit.display.js +1 -1
- package/lib/cjs/components/_classes/component/editForm/Component.edit.validation.js +2 -2
- package/lib/cjs/components/_classes/component/editForm/utils.js +2 -2
- package/lib/cjs/components/_classes/component/fixtures/comp6.d.ts +77 -0
- package/lib/cjs/components/_classes/component/fixtures/comp6.js +59 -0
- package/lib/cjs/components/_classes/component/fixtures/comp7.d.ts +84 -0
- package/lib/cjs/components/_classes/component/fixtures/comp7.js +86 -0
- package/lib/cjs/components/_classes/component/fixtures/index.d.ts +3 -1
- package/lib/cjs/components/_classes/component/fixtures/index.js +5 -1
- package/lib/cjs/components/_classes/field/Field.d.ts +11 -2
- package/lib/cjs/components/_classes/field/Field.js +13 -1
- package/lib/cjs/components/_classes/input/Input.d.ts +4 -3
- package/lib/cjs/components/_classes/input/Input.js +31 -7
- package/lib/cjs/components/_classes/list/ListComponent.d.ts +2 -2
- package/lib/cjs/components/_classes/list/ListComponent.form.d.ts +6 -3
- package/lib/cjs/components/_classes/list/ListComponent.form.js +5 -0
- package/lib/cjs/components/_classes/multivalue/Multivalue.d.ts +43 -12
- package/lib/cjs/components/_classes/multivalue/Multivalue.js +44 -3
- package/lib/cjs/components/_classes/nested/NestedComponent.d.ts +163 -67
- package/lib/cjs/components/_classes/nested/NestedComponent.form.d.ts +6 -3
- package/lib/cjs/components/_classes/nested/NestedComponent.form.js +5 -0
- package/lib/cjs/components/_classes/nested/NestedComponent.js +175 -54
- package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -2
- package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +1 -1
- package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.d.ts +7 -1
- package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +2 -3
- package/lib/cjs/components/address/Address.d.ts +4 -2
- package/lib/cjs/components/address/Address.form.d.ts +6 -3
- package/lib/cjs/components/address/Address.form.js +5 -0
- package/lib/cjs/components/address/Address.js +4 -0
- package/lib/cjs/components/address/editForm/Address.edit.provider.js +1 -1
- package/lib/cjs/components/button/Button.d.ts +3 -12
- package/lib/cjs/components/button/Button.form.d.ts +6 -3
- package/lib/cjs/components/button/Button.form.js +5 -0
- package/lib/cjs/components/button/Button.js +5 -0
- package/lib/cjs/components/checkbox/Checkbox.d.ts +5 -28
- package/lib/cjs/components/checkbox/Checkbox.form.d.ts +6 -3
- package/lib/cjs/components/checkbox/Checkbox.form.js +5 -0
- package/lib/cjs/components/checkbox/Checkbox.js +1 -1
- package/lib/cjs/components/checkbox/fixtures/comp6.d.ts +32 -0
- package/lib/cjs/components/checkbox/fixtures/comp6.js +30 -0
- package/lib/cjs/components/checkbox/fixtures/index.d.ts +2 -1
- package/lib/cjs/components/checkbox/fixtures/index.js +3 -1
- package/lib/cjs/components/columns/Columns.d.ts +3 -2
- package/lib/cjs/components/columns/Columns.form.d.ts +6 -3
- package/lib/cjs/components/columns/Columns.form.js +5 -0
- package/lib/cjs/components/columns/Columns.js +1 -1
- package/lib/cjs/components/container/Container.form.d.ts +6 -3
- package/lib/cjs/components/container/Container.form.js +5 -0
- package/lib/cjs/components/content/Content.d.ts +2 -1
- package/lib/cjs/components/content/Content.form.d.ts +6 -3
- package/lib/cjs/components/content/Content.form.js +5 -0
- package/lib/cjs/components/currency/Currency.form.d.ts +6 -3
- package/lib/cjs/components/currency/Currency.form.js +5 -0
- package/lib/cjs/components/currency/Currency.js +1 -2
- package/lib/cjs/components/datagrid/DataGrid.d.ts +17 -7
- package/lib/cjs/components/datagrid/DataGrid.form.d.ts +6 -3
- package/lib/cjs/components/datagrid/DataGrid.form.js +5 -0
- package/lib/cjs/components/datagrid/DataGrid.js +55 -37
- package/lib/cjs/components/datagrid/fixtures/comp-with-reorder.d.ts +100 -0
- package/lib/cjs/components/datagrid/fixtures/comp-with-reorder.js +139 -0
- package/lib/cjs/components/datagrid/fixtures/comp10.d.ts +81 -0
- package/lib/cjs/components/datagrid/fixtures/comp10.js +87 -0
- package/lib/cjs/components/datagrid/fixtures/comp9.d.ts +41 -0
- package/lib/cjs/components/datagrid/fixtures/comp9.js +44 -0
- package/lib/cjs/components/datagrid/fixtures/index.d.ts +4 -1
- package/lib/cjs/components/datagrid/fixtures/index.js +7 -1
- package/lib/cjs/components/datamap/DataMap.d.ts +1 -0
- package/lib/cjs/components/datamap/DataMap.form.d.ts +6 -3
- package/lib/cjs/components/datamap/DataMap.form.js +5 -0
- package/lib/cjs/components/datetime/DateTime.d.ts +0 -14
- package/lib/cjs/components/datetime/DateTime.form.d.ts +6 -3
- package/lib/cjs/components/datetime/DateTime.form.js +5 -0
- package/lib/cjs/components/datetime/editForm/DateTime.edit.date.js +2 -2
- package/lib/cjs/components/day/Day.d.ts +23 -49
- package/lib/cjs/components/day/Day.form.d.ts +6 -3
- package/lib/cjs/components/day/Day.form.js +5 -0
- package/lib/cjs/components/day/Day.js +16 -21
- package/lib/cjs/components/day/fixtures/comp7.d.ts +109 -0
- package/lib/cjs/components/day/fixtures/comp7.js +109 -0
- package/lib/cjs/components/day/fixtures/comp8.d.ts +41 -0
- package/lib/cjs/components/day/fixtures/comp8.js +40 -0
- package/lib/cjs/components/day/fixtures/index.d.ts +3 -1
- package/lib/cjs/components/day/fixtures/index.js +5 -1
- package/lib/cjs/components/editgrid/EditGrid.d.ts +7 -3
- package/lib/cjs/components/editgrid/EditGrid.form.d.ts +6 -3
- package/lib/cjs/components/editgrid/EditGrid.form.js +5 -0
- package/lib/cjs/components/editgrid/EditGrid.js +5 -5
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.display.js +2 -5
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.templates.js +6 -9
- package/lib/cjs/components/email/Email.form.d.ts +6 -3
- package/lib/cjs/components/email/Email.form.js +5 -0
- package/lib/cjs/components/fieldset/Fieldset.form.d.ts +6 -3
- package/lib/cjs/components/fieldset/Fieldset.form.js +5 -0
- package/lib/cjs/components/file/File.d.ts +9 -22
- package/lib/cjs/components/file/File.form.d.ts +6 -3
- package/lib/cjs/components/file/File.form.js +5 -0
- package/lib/cjs/components/file/File.js +1 -2
- package/lib/cjs/components/form/Form.d.ts +38 -20
- package/lib/cjs/components/form/Form.form.d.ts +6 -3
- package/lib/cjs/components/form/Form.form.js +5 -0
- package/lib/cjs/components/form/Form.js +27 -15
- package/lib/cjs/components/hidden/Hidden.d.ts +1 -11
- package/lib/cjs/components/hidden/Hidden.form.d.ts +6 -3
- package/lib/cjs/components/hidden/Hidden.form.js +5 -0
- package/lib/cjs/components/hidden/Hidden.js +1 -2
- package/lib/cjs/components/html/HTML.d.ts +2 -1
- package/lib/cjs/components/html/HTML.form.d.ts +6 -3
- package/lib/cjs/components/html/HTML.form.js +5 -0
- package/lib/cjs/components/number/Number.d.ts +3 -17
- package/lib/cjs/components/number/Number.form.d.ts +6 -3
- package/lib/cjs/components/number/Number.form.js +5 -0
- package/lib/cjs/components/number/Number.js +2 -3
- package/lib/cjs/components/number/fixtures/comp8.d.ts +32 -0
- package/lib/cjs/components/number/fixtures/comp8.js +28 -0
- package/lib/cjs/components/number/fixtures/index.d.ts +2 -1
- package/lib/cjs/components/number/fixtures/index.js +3 -1
- package/lib/cjs/components/panel/Panel.form.d.ts +6 -3
- package/lib/cjs/components/panel/Panel.form.js +5 -0
- package/lib/cjs/components/panel/Panel.js +0 -1
- package/lib/cjs/components/password/Password.form.d.ts +6 -3
- package/lib/cjs/components/password/Password.form.js +5 -0
- package/lib/cjs/components/phonenumber/PhoneNumber.form.d.ts +6 -3
- package/lib/cjs/components/phonenumber/PhoneNumber.form.js +5 -0
- package/lib/cjs/components/phonenumber/fixtures/comp2.d.ts +16 -0
- package/lib/cjs/components/phonenumber/fixtures/comp2.js +25 -0
- package/lib/cjs/components/phonenumber/fixtures/index.d.ts +2 -1
- package/lib/cjs/components/phonenumber/fixtures/index.js +3 -1
- package/lib/cjs/components/radio/Radio.d.ts +3 -26
- package/lib/cjs/components/radio/Radio.form.d.ts +6 -3
- package/lib/cjs/components/radio/Radio.form.js +5 -0
- package/lib/cjs/components/radio/Radio.js +6 -7
- package/lib/cjs/components/recaptcha/ReCaptcha.d.ts +1 -1
- package/lib/cjs/components/recaptcha/ReCaptcha.form.d.ts +6 -3
- package/lib/cjs/components/recaptcha/ReCaptcha.form.js +5 -0
- package/lib/cjs/components/select/Select.d.ts +16 -39
- package/lib/cjs/components/select/Select.form.d.ts +6 -3
- package/lib/cjs/components/select/Select.form.js +5 -0
- package/lib/cjs/components/select/Select.js +14 -18
- package/lib/cjs/components/selectboxes/SelectBoxes.d.ts +2 -17
- package/lib/cjs/components/selectboxes/SelectBoxes.form.d.ts +6 -3
- package/lib/cjs/components/selectboxes/SelectBoxes.form.js +5 -0
- package/lib/cjs/components/selectboxes/SelectBoxes.js +7 -9
- package/lib/cjs/components/signature/Signature.d.ts +0 -14
- package/lib/cjs/components/signature/Signature.form.d.ts +6 -3
- package/lib/cjs/components/signature/Signature.form.js +5 -0
- package/lib/cjs/components/signature/Signature.js +1 -1
- package/lib/cjs/components/survey/Survey.d.ts +3 -15
- package/lib/cjs/components/survey/Survey.form.d.ts +6 -3
- package/lib/cjs/components/survey/Survey.form.js +5 -0
- package/lib/cjs/components/table/Table.d.ts +2 -1
- package/lib/cjs/components/table/Table.form.d.ts +6 -3
- package/lib/cjs/components/table/Table.form.js +5 -0
- package/lib/cjs/components/tabs/Tabs.d.ts +4 -4
- package/lib/cjs/components/tabs/Tabs.form.d.ts +6 -3
- package/lib/cjs/components/tabs/Tabs.form.js +5 -0
- package/lib/cjs/components/tabs/Tabs.js +1 -2
- package/lib/cjs/components/tags/Tags.d.ts +0 -14
- package/lib/cjs/components/tags/Tags.form.d.ts +6 -3
- package/lib/cjs/components/tags/Tags.form.js +5 -0
- package/lib/cjs/components/textarea/TextArea.d.ts +4 -9
- package/lib/cjs/components/textarea/TextArea.form.d.ts +6 -3
- package/lib/cjs/components/textarea/TextArea.form.js +5 -0
- package/lib/cjs/components/textarea/TextArea.js +2 -2
- package/lib/cjs/components/textfield/TextField.d.ts +14 -30
- package/lib/cjs/components/textfield/TextField.form.d.ts +6 -3
- package/lib/cjs/components/textfield/TextField.form.js +5 -0
- package/lib/cjs/components/textfield/TextField.js +16 -17
- package/lib/cjs/components/time/Time.form.d.ts +6 -3
- package/lib/cjs/components/time/Time.form.js +5 -0
- package/lib/cjs/components/unknown/Unknown.form.d.ts +5 -34
- package/lib/cjs/components/unknown/Unknown.form.js +4 -0
- package/lib/cjs/components/url/Url.form.d.ts +6 -3
- package/lib/cjs/components/url/Url.form.js +5 -0
- package/lib/cjs/components/well/Well.form.d.ts +6 -3
- package/lib/cjs/components/well/Well.form.js +5 -0
- package/lib/cjs/formio.embed.d.ts +1 -2
- package/lib/cjs/formio.embed.js +2 -100
- package/lib/cjs/formio.form.d.ts +11 -4
- package/lib/cjs/formio.form.js +13 -5
- package/lib/cjs/providers/Providers.d.ts +36 -5
- package/lib/cjs/providers/Providers.js +29 -0
- package/lib/cjs/providers/address/AddressProvider.d.ts +131 -12
- package/lib/cjs/providers/address/AddressProvider.js +88 -2
- package/lib/cjs/providers/address/AzureAddressProvider.d.ts +48 -1
- package/lib/cjs/providers/address/AzureAddressProvider.js +37 -0
- package/lib/cjs/providers/address/CustomAddressProvider.d.ts +27 -4
- package/lib/cjs/providers/address/CustomAddressProvider.js +34 -0
- package/lib/cjs/providers/address/GoogleAddressProvider.d.ts +135 -6
- package/lib/cjs/providers/address/GoogleAddressProvider.js +95 -1
- package/lib/cjs/providers/address/NominatimAddressProvider.d.ts +32 -7
- package/lib/cjs/providers/address/NominatimAddressProvider.js +33 -0
- package/lib/cjs/providers/address/index.d.ts +3 -1
- package/lib/cjs/providers/processor/fileProcessor.d.ts +7 -1
- package/lib/cjs/providers/processor/fileProcessor.js +6 -0
- package/lib/cjs/providers/storage/azure.d.ts +6 -13
- package/lib/cjs/providers/storage/azure.js +5 -0
- package/lib/cjs/providers/storage/base64.d.ts +5 -6
- package/lib/cjs/providers/storage/base64.js +4 -0
- package/lib/cjs/providers/storage/dropbox.d.ts +6 -4
- package/lib/cjs/providers/storage/dropbox.js +5 -0
- package/lib/cjs/providers/storage/googleDrive.d.ts +7 -5
- package/lib/cjs/providers/storage/googleDrive.js +6 -0
- package/lib/cjs/providers/storage/indexeddb.d.ts +5 -7
- package/lib/cjs/providers/storage/indexeddb.js +4 -0
- package/lib/cjs/providers/storage/s3.d.ts +6 -20
- package/lib/cjs/providers/storage/s3.js +5 -0
- package/lib/cjs/providers/storage/url.d.ts +6 -7
- package/lib/cjs/providers/storage/url.js +10 -0
- package/lib/cjs/providers/storage/util.d.ts +24 -1
- package/lib/cjs/providers/storage/util.js +18 -0
- package/lib/cjs/templates/Templates.d.ts +1 -0
- package/lib/cjs/translations/en.d.ts +5 -0
- package/lib/cjs/translations/en.js +6 -1
- package/lib/cjs/utils/ChoicesWrapper.d.ts +1 -1
- package/lib/cjs/utils/ChoicesWrapper.js +13 -2
- package/lib/cjs/utils/Evaluator.d.ts +6 -3
- package/lib/cjs/utils/Evaluator.js +11 -20
- package/lib/cjs/utils/builder.d.ts +9 -7
- package/lib/cjs/utils/builder.js +10 -5
- package/lib/cjs/utils/calendarUtils.d.ts +7 -13
- package/lib/cjs/utils/calendarUtils.js +10 -17
- package/lib/cjs/utils/conditionOperators/IsEmptyValue.js +4 -3
- package/lib/cjs/utils/conditionOperators/IsEqualTo.js +3 -3
- package/lib/cjs/utils/formUtils.d.ts +43 -171
- package/lib/cjs/utils/formUtils.js +38 -569
- package/lib/cjs/utils/utils.d.ts +360 -223
- package/lib/cjs/utils/utils.js +394 -239
- package/lib/cjs/widgets/CalendarWidget.d.ts +9 -10
- package/lib/cjs/widgets/CalendarWidget.js +9 -11
- package/lib/mjs/CDN.d.ts +1 -0
- package/lib/mjs/CDN.js +6 -3
- package/lib/mjs/Element.d.ts +86 -96
- package/lib/mjs/Element.js +68 -78
- package/lib/mjs/Embed.d.ts +1 -1
- package/lib/mjs/Embed.js +52 -12
- package/lib/mjs/Form.d.ts +365 -36
- package/lib/mjs/Form.js +140 -57
- package/lib/mjs/FormBuilder.d.ts +187 -2
- package/lib/mjs/FormBuilder.js +32 -8
- package/lib/mjs/Formio.js +1 -0
- package/lib/mjs/InlineEmbed.d.ts +7 -0
- package/lib/mjs/InlineEmbed.js +112 -0
- package/lib/mjs/PDF.d.ts +11 -13
- package/lib/mjs/PDF.js +6 -8
- package/lib/mjs/Webform.d.ts +187 -139
- package/lib/mjs/Webform.js +342 -312
- package/lib/mjs/WebformBuilder.d.ts +16 -14
- package/lib/mjs/WebformBuilder.js +19 -12
- package/lib/mjs/Wizard.d.ts +31 -21
- package/lib/mjs/Wizard.js +42 -19
- package/lib/mjs/WizardBuilder.d.ts +1 -1
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.d.ts +8 -5
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.js +6 -3
- package/lib/mjs/components/Components.d.ts +4 -4
- package/lib/mjs/components/Components.js +3 -3
- package/lib/mjs/components/_classes/component/Component.d.ts +515 -269
- package/lib/mjs/components/_classes/component/Component.form.d.ts +6 -3
- package/lib/mjs/components/_classes/component/Component.form.js +5 -0
- package/lib/mjs/components/_classes/component/Component.js +470 -204
- package/lib/mjs/components/_classes/component/editForm/Component.edit.display.js +1 -1
- package/lib/mjs/components/_classes/component/editForm/Component.edit.validation.js +1 -1
- package/lib/mjs/components/_classes/component/editForm/utils.js +1 -1
- package/lib/mjs/components/_classes/component/fixtures/comp6.d.ts +77 -0
- package/lib/mjs/components/_classes/component/fixtures/comp6.js +57 -0
- package/lib/mjs/components/_classes/component/fixtures/comp7.d.ts +84 -0
- package/lib/mjs/components/_classes/component/fixtures/comp7.js +84 -0
- package/lib/mjs/components/_classes/component/fixtures/index.d.ts +3 -1
- package/lib/mjs/components/_classes/component/fixtures/index.js +3 -1
- package/lib/mjs/components/_classes/field/Field.d.ts +11 -2
- package/lib/mjs/components/_classes/field/Field.js +13 -1
- package/lib/mjs/components/_classes/input/Input.d.ts +4 -3
- package/lib/mjs/components/_classes/input/Input.js +30 -7
- package/lib/mjs/components/_classes/list/ListComponent.d.ts +2 -2
- package/lib/mjs/components/_classes/list/ListComponent.form.d.ts +6 -3
- package/lib/mjs/components/_classes/list/ListComponent.form.js +5 -0
- package/lib/mjs/components/_classes/multivalue/Multivalue.d.ts +43 -12
- package/lib/mjs/components/_classes/multivalue/Multivalue.js +44 -3
- package/lib/mjs/components/_classes/nested/NestedComponent.d.ts +163 -67
- package/lib/mjs/components/_classes/nested/NestedComponent.form.d.ts +6 -3
- package/lib/mjs/components/_classes/nested/NestedComponent.form.js +5 -0
- package/lib/mjs/components/_classes/nested/NestedComponent.js +175 -54
- package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.d.ts +2 -2
- package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +1 -1
- package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.d.ts +7 -1
- package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +2 -3
- package/lib/mjs/components/address/Address.d.ts +4 -2
- package/lib/mjs/components/address/Address.form.d.ts +6 -3
- package/lib/mjs/components/address/Address.form.js +5 -0
- package/lib/mjs/components/address/Address.js +4 -0
- package/lib/mjs/components/address/editForm/Address.edit.provider.js +1 -1
- package/lib/mjs/components/button/Button.d.ts +3 -12
- package/lib/mjs/components/button/Button.form.d.ts +6 -3
- package/lib/mjs/components/button/Button.form.js +5 -0
- package/lib/mjs/components/button/Button.js +5 -0
- package/lib/mjs/components/checkbox/Checkbox.d.ts +5 -28
- package/lib/mjs/components/checkbox/Checkbox.form.d.ts +6 -3
- package/lib/mjs/components/checkbox/Checkbox.form.js +5 -0
- package/lib/mjs/components/checkbox/Checkbox.js +1 -1
- package/lib/mjs/components/checkbox/fixtures/comp6.d.ts +32 -0
- package/lib/mjs/components/checkbox/fixtures/comp6.js +28 -0
- package/lib/mjs/components/checkbox/fixtures/index.d.ts +2 -1
- package/lib/mjs/components/checkbox/fixtures/index.js +2 -1
- package/lib/mjs/components/columns/Columns.d.ts +3 -2
- package/lib/mjs/components/columns/Columns.form.d.ts +6 -3
- package/lib/mjs/components/columns/Columns.form.js +5 -0
- package/lib/mjs/components/columns/Columns.js +1 -1
- package/lib/mjs/components/container/Container.form.d.ts +6 -3
- package/lib/mjs/components/container/Container.form.js +5 -0
- package/lib/mjs/components/content/Content.d.ts +2 -1
- package/lib/mjs/components/content/Content.form.d.ts +6 -3
- package/lib/mjs/components/content/Content.form.js +5 -0
- package/lib/mjs/components/currency/Currency.form.d.ts +6 -3
- package/lib/mjs/components/currency/Currency.form.js +5 -0
- package/lib/mjs/components/currency/Currency.js +1 -2
- package/lib/mjs/components/datagrid/DataGrid.d.ts +17 -7
- package/lib/mjs/components/datagrid/DataGrid.form.d.ts +6 -3
- package/lib/mjs/components/datagrid/DataGrid.form.js +5 -0
- package/lib/mjs/components/datagrid/DataGrid.js +55 -37
- package/lib/mjs/components/datagrid/fixtures/comp-with-reorder.d.ts +100 -0
- package/lib/mjs/components/datagrid/fixtures/comp-with-reorder.js +137 -0
- package/lib/mjs/components/datagrid/fixtures/comp10.d.ts +81 -0
- package/lib/mjs/components/datagrid/fixtures/comp10.js +85 -0
- package/lib/mjs/components/datagrid/fixtures/comp9.d.ts +41 -0
- package/lib/mjs/components/datagrid/fixtures/comp9.js +42 -0
- package/lib/mjs/components/datagrid/fixtures/index.d.ts +4 -1
- package/lib/mjs/components/datagrid/fixtures/index.js +4 -1
- package/lib/mjs/components/datamap/DataMap.d.ts +1 -0
- package/lib/mjs/components/datamap/DataMap.form.d.ts +6 -3
- package/lib/mjs/components/datamap/DataMap.form.js +5 -0
- package/lib/mjs/components/datetime/DateTime.d.ts +0 -14
- package/lib/mjs/components/datetime/DateTime.form.d.ts +6 -3
- package/lib/mjs/components/datetime/DateTime.form.js +5 -0
- package/lib/mjs/components/datetime/editForm/DateTime.edit.date.js +1 -1
- package/lib/mjs/components/day/Day.d.ts +23 -49
- package/lib/mjs/components/day/Day.form.d.ts +6 -3
- package/lib/mjs/components/day/Day.form.js +5 -0
- package/lib/mjs/components/day/Day.js +16 -21
- package/lib/mjs/components/day/fixtures/comp7.d.ts +109 -0
- package/lib/mjs/components/day/fixtures/comp7.js +107 -0
- package/lib/mjs/components/day/fixtures/comp8.d.ts +41 -0
- package/lib/mjs/components/day/fixtures/comp8.js +38 -0
- package/lib/mjs/components/day/fixtures/index.d.ts +3 -1
- package/lib/mjs/components/day/fixtures/index.js +3 -1
- package/lib/mjs/components/editgrid/EditGrid.d.ts +7 -3
- package/lib/mjs/components/editgrid/EditGrid.form.d.ts +6 -3
- package/lib/mjs/components/editgrid/EditGrid.form.js +5 -0
- package/lib/mjs/components/editgrid/EditGrid.js +5 -5
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.display.js +1 -1
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.templates.js +1 -1
- package/lib/mjs/components/email/Email.form.d.ts +6 -3
- package/lib/mjs/components/email/Email.form.js +5 -0
- package/lib/mjs/components/fieldset/Fieldset.form.d.ts +6 -3
- package/lib/mjs/components/fieldset/Fieldset.form.js +5 -0
- package/lib/mjs/components/file/File.d.ts +9 -22
- package/lib/mjs/components/file/File.form.d.ts +6 -3
- package/lib/mjs/components/file/File.form.js +5 -0
- package/lib/mjs/components/file/File.js +1 -2
- package/lib/mjs/components/form/Form.d.ts +38 -20
- package/lib/mjs/components/form/Form.form.d.ts +6 -3
- package/lib/mjs/components/form/Form.form.js +5 -0
- package/lib/mjs/components/form/Form.js +25 -13
- package/lib/mjs/components/hidden/Hidden.d.ts +1 -11
- package/lib/mjs/components/hidden/Hidden.form.d.ts +6 -3
- package/lib/mjs/components/hidden/Hidden.form.js +5 -0
- package/lib/mjs/components/hidden/Hidden.js +1 -2
- package/lib/mjs/components/html/HTML.d.ts +2 -1
- package/lib/mjs/components/html/HTML.form.d.ts +6 -3
- package/lib/mjs/components/html/HTML.form.js +5 -0
- package/lib/mjs/components/number/Number.d.ts +3 -17
- package/lib/mjs/components/number/Number.form.d.ts +6 -3
- package/lib/mjs/components/number/Number.form.js +5 -0
- package/lib/mjs/components/number/Number.js +2 -3
- package/lib/mjs/components/number/fixtures/comp8.d.ts +32 -0
- package/lib/mjs/components/number/fixtures/comp8.js +26 -0
- package/lib/mjs/components/number/fixtures/index.d.ts +2 -1
- package/lib/mjs/components/number/fixtures/index.js +2 -1
- package/lib/mjs/components/panel/Panel.form.d.ts +6 -3
- package/lib/mjs/components/panel/Panel.form.js +5 -0
- package/lib/mjs/components/panel/Panel.js +0 -1
- package/lib/mjs/components/password/Password.form.d.ts +6 -3
- package/lib/mjs/components/password/Password.form.js +5 -0
- package/lib/mjs/components/phonenumber/PhoneNumber.form.d.ts +6 -3
- package/lib/mjs/components/phonenumber/PhoneNumber.form.js +5 -0
- package/lib/mjs/components/phonenumber/fixtures/comp2.d.ts +16 -0
- package/lib/mjs/components/phonenumber/fixtures/comp2.js +23 -0
- package/lib/mjs/components/phonenumber/fixtures/index.d.ts +2 -1
- package/lib/mjs/components/phonenumber/fixtures/index.js +2 -1
- package/lib/mjs/components/radio/Radio.d.ts +3 -26
- package/lib/mjs/components/radio/Radio.form.d.ts +6 -3
- package/lib/mjs/components/radio/Radio.form.js +5 -0
- package/lib/mjs/components/radio/Radio.js +6 -6
- package/lib/mjs/components/recaptcha/ReCaptcha.d.ts +1 -1
- package/lib/mjs/components/recaptcha/ReCaptcha.form.d.ts +6 -3
- package/lib/mjs/components/recaptcha/ReCaptcha.form.js +5 -0
- package/lib/mjs/components/select/Select.d.ts +16 -39
- package/lib/mjs/components/select/Select.form.d.ts +6 -3
- package/lib/mjs/components/select/Select.form.js +5 -0
- package/lib/mjs/components/select/Select.js +15 -19
- package/lib/mjs/components/selectboxes/SelectBoxes.d.ts +2 -17
- package/lib/mjs/components/selectboxes/SelectBoxes.form.d.ts +6 -3
- package/lib/mjs/components/selectboxes/SelectBoxes.form.js +5 -0
- package/lib/mjs/components/selectboxes/SelectBoxes.js +7 -9
- package/lib/mjs/components/signature/Signature.d.ts +0 -14
- package/lib/mjs/components/signature/Signature.form.d.ts +6 -3
- package/lib/mjs/components/signature/Signature.form.js +5 -0
- package/lib/mjs/components/signature/Signature.js +1 -1
- package/lib/mjs/components/survey/Survey.d.ts +3 -15
- package/lib/mjs/components/survey/Survey.form.d.ts +6 -3
- package/lib/mjs/components/survey/Survey.form.js +5 -0
- package/lib/mjs/components/table/Table.d.ts +2 -1
- package/lib/mjs/components/table/Table.form.d.ts +6 -3
- package/lib/mjs/components/table/Table.form.js +5 -0
- package/lib/mjs/components/tabs/Tabs.d.ts +4 -4
- package/lib/mjs/components/tabs/Tabs.form.d.ts +6 -3
- package/lib/mjs/components/tabs/Tabs.form.js +5 -0
- package/lib/mjs/components/tabs/Tabs.js +1 -2
- package/lib/mjs/components/tags/Tags.d.ts +0 -14
- package/lib/mjs/components/tags/Tags.form.d.ts +6 -3
- package/lib/mjs/components/tags/Tags.form.js +5 -0
- package/lib/mjs/components/textarea/TextArea.d.ts +4 -9
- package/lib/mjs/components/textarea/TextArea.form.d.ts +6 -3
- package/lib/mjs/components/textarea/TextArea.form.js +5 -0
- package/lib/mjs/components/textarea/TextArea.js +2 -2
- package/lib/mjs/components/textfield/TextField.d.ts +14 -30
- package/lib/mjs/components/textfield/TextField.form.d.ts +6 -3
- package/lib/mjs/components/textfield/TextField.form.js +5 -0
- package/lib/mjs/components/textfield/TextField.js +16 -17
- package/lib/mjs/components/time/Time.form.d.ts +6 -3
- package/lib/mjs/components/time/Time.form.js +5 -0
- package/lib/mjs/components/unknown/Unknown.form.d.ts +5 -34
- package/lib/mjs/components/unknown/Unknown.form.js +4 -0
- package/lib/mjs/components/url/Url.form.d.ts +6 -3
- package/lib/mjs/components/url/Url.form.js +5 -0
- package/lib/mjs/components/well/Well.form.d.ts +6 -3
- package/lib/mjs/components/well/Well.form.js +5 -0
- package/lib/mjs/formio.embed.d.ts +1 -2
- package/lib/mjs/formio.embed.js +2 -99
- package/lib/mjs/formio.form.d.ts +11 -4
- package/lib/mjs/formio.form.js +10 -3
- package/lib/mjs/providers/Providers.d.ts +36 -5
- package/lib/mjs/providers/Providers.js +29 -0
- package/lib/mjs/providers/address/AddressProvider.d.ts +131 -12
- package/lib/mjs/providers/address/AddressProvider.js +88 -2
- package/lib/mjs/providers/address/AzureAddressProvider.d.ts +48 -1
- package/lib/mjs/providers/address/AzureAddressProvider.js +37 -0
- package/lib/mjs/providers/address/CustomAddressProvider.d.ts +27 -4
- package/lib/mjs/providers/address/CustomAddressProvider.js +34 -0
- package/lib/mjs/providers/address/GoogleAddressProvider.d.ts +135 -6
- package/lib/mjs/providers/address/GoogleAddressProvider.js +94 -1
- package/lib/mjs/providers/address/NominatimAddressProvider.d.ts +32 -7
- package/lib/mjs/providers/address/NominatimAddressProvider.js +33 -0
- package/lib/mjs/providers/address/index.d.ts +3 -1
- package/lib/mjs/providers/processor/fileProcessor.d.ts +7 -1
- package/lib/mjs/providers/processor/fileProcessor.js +6 -0
- package/lib/mjs/providers/storage/azure.d.ts +6 -13
- package/lib/mjs/providers/storage/azure.js +5 -0
- package/lib/mjs/providers/storage/base64.d.ts +5 -6
- package/lib/mjs/providers/storage/base64.js +4 -0
- package/lib/mjs/providers/storage/dropbox.d.ts +6 -4
- package/lib/mjs/providers/storage/dropbox.js +5 -0
- package/lib/mjs/providers/storage/googleDrive.d.ts +7 -5
- package/lib/mjs/providers/storage/googleDrive.js +6 -0
- package/lib/mjs/providers/storage/indexeddb.d.ts +5 -7
- package/lib/mjs/providers/storage/indexeddb.js +4 -0
- package/lib/mjs/providers/storage/s3.d.ts +6 -20
- package/lib/mjs/providers/storage/s3.js +5 -0
- package/lib/mjs/providers/storage/url.d.ts +6 -7
- package/lib/mjs/providers/storage/url.js +10 -0
- package/lib/mjs/providers/storage/util.d.ts +24 -1
- package/lib/mjs/providers/storage/util.js +18 -0
- package/lib/mjs/templates/Templates.d.ts +1 -0
- package/lib/mjs/translations/en.d.ts +5 -0
- package/lib/mjs/translations/en.js +6 -1
- package/lib/mjs/utils/ChoicesWrapper.d.ts +1 -1
- package/lib/mjs/utils/ChoicesWrapper.js +13 -2
- package/lib/mjs/utils/Evaluator.d.ts +6 -3
- package/lib/mjs/utils/Evaluator.js +9 -20
- package/lib/mjs/utils/builder.d.ts +9 -7
- package/lib/mjs/utils/builder.js +10 -5
- package/lib/mjs/utils/calendarUtils.d.ts +7 -13
- package/lib/mjs/utils/calendarUtils.js +10 -17
- package/lib/mjs/utils/conditionOperators/IsEmptyValue.js +3 -3
- package/lib/mjs/utils/conditionOperators/IsEqualTo.js +1 -1
- package/lib/mjs/utils/formUtils.d.ts +43 -171
- package/lib/mjs/utils/formUtils.js +6 -554
- package/lib/mjs/utils/utils.d.ts +360 -223
- package/lib/mjs/utils/utils.js +387 -233
- package/lib/mjs/widgets/CalendarWidget.d.ts +9 -10
- package/lib/mjs/widgets/CalendarWidget.js +9 -11
- package/package.json +22 -23
- package/sdk.d.ts +1 -0
- package/utils.d.ts +1 -0
|
@@ -165,9 +165,7 @@ export default class Component extends Element {
|
|
|
165
165
|
}
|
|
166
166
|
/**
|
|
167
167
|
* Return the simple condition settings as part of the component.
|
|
168
|
-
*
|
|
169
|
-
* @return {Object}
|
|
170
|
-
*
|
|
168
|
+
* @returns {object} - The simple conditional settings.
|
|
171
169
|
*/
|
|
172
170
|
static get conditionOperatorsSettings() {
|
|
173
171
|
return {
|
|
@@ -184,10 +182,8 @@ export default class Component extends Element {
|
|
|
184
182
|
}
|
|
185
183
|
/**
|
|
186
184
|
* Return the array of possible types of component value absed on its schema.
|
|
187
|
-
*
|
|
188
185
|
* @param schema
|
|
189
|
-
* @
|
|
190
|
-
*
|
|
186
|
+
* @returns {Array}
|
|
191
187
|
*/
|
|
192
188
|
static savedValueTypes(schema) {
|
|
193
189
|
schema = schema || {};
|
|
@@ -196,7 +192,6 @@ export default class Component extends Element {
|
|
|
196
192
|
/**
|
|
197
193
|
* Provides a table view for this component. Override if you wish to do something different than using getView
|
|
198
194
|
* method of your instance.
|
|
199
|
-
*
|
|
200
195
|
* @param value
|
|
201
196
|
* @param options
|
|
202
197
|
*/
|
|
@@ -205,10 +200,9 @@ export default class Component extends Element {
|
|
|
205
200
|
/* eslint-enable no-unused-vars */
|
|
206
201
|
/**
|
|
207
202
|
* Initialize a new Component.
|
|
208
|
-
*
|
|
209
|
-
* @param {
|
|
210
|
-
* @param {
|
|
211
|
-
* @param {Object} data - The global data submission object this component will belong.
|
|
203
|
+
* @param {object} component - The component JSON you wish to initialize.
|
|
204
|
+
* @param {object} options - The options for this component.
|
|
205
|
+
* @param {object} data - The global data submission object this component will belong.
|
|
212
206
|
*/
|
|
213
207
|
/* eslint-disable max-statements */
|
|
214
208
|
constructor(component, options, data) {
|
|
@@ -239,7 +233,6 @@ export default class Component extends Element {
|
|
|
239
233
|
}
|
|
240
234
|
/**
|
|
241
235
|
* The data path to this specific component instance.
|
|
242
|
-
*
|
|
243
236
|
* @type {string}
|
|
244
237
|
*/
|
|
245
238
|
this.path = component?.key || '';
|
|
@@ -287,32 +280,27 @@ export default class Component extends Element {
|
|
|
287
280
|
this.row = this.options.row;
|
|
288
281
|
/**
|
|
289
282
|
* Points to a flat map of child components (if applicable).
|
|
290
|
-
*
|
|
291
|
-
* @type {Object}
|
|
283
|
+
* @type {object}
|
|
292
284
|
*/
|
|
293
285
|
this.childComponentsMap = {};
|
|
294
286
|
/**
|
|
295
287
|
* Determines if this component is disabled, or not.
|
|
296
|
-
*
|
|
297
288
|
* @type {boolean}
|
|
298
289
|
*/
|
|
299
290
|
this._disabled = boolValue(this.component.disabled) ? this.component.disabled : false;
|
|
300
291
|
/**
|
|
301
292
|
* Points to the root component, usually the FormComponent.
|
|
302
|
-
*
|
|
303
293
|
* @type {Component}
|
|
304
294
|
*/
|
|
305
295
|
this.root = this.options.root || this;
|
|
306
296
|
this.localRoot = this.options.localRoot || this;
|
|
307
297
|
/**
|
|
308
298
|
* If this input has been input and provided value.
|
|
309
|
-
*
|
|
310
299
|
* @type {boolean}
|
|
311
300
|
*/
|
|
312
301
|
this.pristine = true;
|
|
313
302
|
/**
|
|
314
303
|
* Points to the parent component.
|
|
315
|
-
*
|
|
316
304
|
* @type {Component}
|
|
317
305
|
*/
|
|
318
306
|
this.parent = this.options.parent;
|
|
@@ -332,7 +320,7 @@ export default class Component extends Element {
|
|
|
332
320
|
this._referenceAttributeName = 'ref';
|
|
333
321
|
/**
|
|
334
322
|
* Used to trigger a new change in this component.
|
|
335
|
-
* @type {
|
|
323
|
+
* @type {Function} - Call to trigger a change in this component.
|
|
336
324
|
*/
|
|
337
325
|
let changes = [];
|
|
338
326
|
let lastChanged = null;
|
|
@@ -373,7 +361,6 @@ export default class Component extends Element {
|
|
|
373
361
|
};
|
|
374
362
|
/**
|
|
375
363
|
* Used to trigger a redraw event within this component.
|
|
376
|
-
*
|
|
377
364
|
* @type {Function}
|
|
378
365
|
*/
|
|
379
366
|
this.triggerRedraw = _.debounce(this.redraw.bind(this), 100);
|
|
@@ -572,8 +559,8 @@ export default class Component extends Element {
|
|
|
572
559
|
return this.shouldForceVisibility(component, 'show');
|
|
573
560
|
}
|
|
574
561
|
/**
|
|
575
|
-
*
|
|
576
|
-
* @param
|
|
562
|
+
* Sets the component visibility.
|
|
563
|
+
* @param {boolean} value - Whether the component should be visible or not.
|
|
577
564
|
*/
|
|
578
565
|
set visible(value) {
|
|
579
566
|
if (this._visible !== value) {
|
|
@@ -591,8 +578,8 @@ export default class Component extends Element {
|
|
|
591
578
|
}
|
|
592
579
|
}
|
|
593
580
|
/**
|
|
594
|
-
*
|
|
595
|
-
* @returns {boolean}
|
|
581
|
+
* Returns the component visibility
|
|
582
|
+
* @returns {boolean} - Whether the component is visible or not.
|
|
596
583
|
*/
|
|
597
584
|
get visible() {
|
|
598
585
|
// Show only if visibility changes or if we are in builder mode or if hidden fields should be shown.
|
|
@@ -682,9 +669,10 @@ export default class Component extends Element {
|
|
|
682
669
|
}
|
|
683
670
|
/**
|
|
684
671
|
* Returns only the schema that is different from the default.
|
|
685
|
-
*
|
|
686
|
-
* @param schema
|
|
687
|
-
* @param
|
|
672
|
+
* @param {object} schema - The "full" json schema for the component.
|
|
673
|
+
* @param {object} defaultSchema - The "default" json schema for the component.
|
|
674
|
+
* @param {boolean} recursion - If we are currently in a recursive loop.
|
|
675
|
+
* @returns {object} - The minified json schema for this component.
|
|
688
676
|
*/
|
|
689
677
|
getModifiedSchema(schema, defaultSchema, recursion) {
|
|
690
678
|
const modified = {};
|
|
@@ -718,21 +706,24 @@ export default class Component extends Element {
|
|
|
718
706
|
}
|
|
719
707
|
/**
|
|
720
708
|
* Returns the JSON schema for this component.
|
|
709
|
+
* @returns {object} - The JSON schema for this component.
|
|
721
710
|
*/
|
|
722
711
|
get schema() {
|
|
723
712
|
return fastCloneDeep(this.getModifiedSchema(_.omit(this.component, 'id'), this.defaultSchema));
|
|
724
713
|
}
|
|
725
714
|
/**
|
|
726
715
|
* Returns true if component is inside DataGrid
|
|
716
|
+
* @returns {boolean} - True if component is inside DataGrid
|
|
727
717
|
*/
|
|
728
718
|
get isInDataGrid() {
|
|
729
719
|
return this.inDataGrid;
|
|
730
720
|
}
|
|
731
721
|
/**
|
|
732
722
|
* Translate a text using the i18n system.
|
|
733
|
-
*
|
|
734
723
|
* @param {string} text - The i18n identifier.
|
|
735
|
-
* @param {
|
|
724
|
+
* @param {object} params - The i18n parameters to use for translation.
|
|
725
|
+
* @param {...any} args - Additional arguments to pass to the translation library.
|
|
726
|
+
* @returns {string} - The translated text.
|
|
736
727
|
*/
|
|
737
728
|
t(text, params = {}, ...args) {
|
|
738
729
|
if (!text) {
|
|
@@ -822,7 +813,7 @@ export default class Component extends Element {
|
|
|
822
813
|
isHtmlRenderMode() {
|
|
823
814
|
return this.options.renderMode === 'html';
|
|
824
815
|
}
|
|
825
|
-
renderTemplate(name, data = {}, modeOption) {
|
|
816
|
+
renderTemplate(name, data = {}, modeOption = '') {
|
|
826
817
|
// Need to make this fall back to form if renderMode is not found similar to how we search templates.
|
|
827
818
|
const mode = modeOption || this.options.renderMode || 'form';
|
|
828
819
|
data.component = this.component;
|
|
@@ -862,11 +853,12 @@ export default class Component extends Element {
|
|
|
862
853
|
}
|
|
863
854
|
/**
|
|
864
855
|
* Sanitize an html string.
|
|
865
|
-
*
|
|
866
|
-
* @param
|
|
867
|
-
* @
|
|
856
|
+
* @param {string} dirty - The dirty html string to sanitize.
|
|
857
|
+
* @param {boolean} forceSanitize - If we should force the sanitize to occur.
|
|
858
|
+
* @param {object} options - The options for the sanitize.
|
|
859
|
+
* @returns {*} - The sanitized html string.
|
|
868
860
|
*/
|
|
869
|
-
sanitize(dirty, forceSanitize, options) {
|
|
861
|
+
sanitize(dirty, forceSanitize = false, options = {}) {
|
|
870
862
|
if (!this.shouldSanitizeValue && !forceSanitize) {
|
|
871
863
|
return dirty;
|
|
872
864
|
}
|
|
@@ -876,12 +868,9 @@ export default class Component extends Element {
|
|
|
876
868
|
}
|
|
877
869
|
/**
|
|
878
870
|
* Render a template string into html.
|
|
879
|
-
*
|
|
880
|
-
* @param template
|
|
881
|
-
* @
|
|
882
|
-
* @param actions
|
|
883
|
-
*
|
|
884
|
-
* @return {HTMLElement|String} - The created element or an empty string if template is not specified.
|
|
871
|
+
* @param {string} template - The template to render.
|
|
872
|
+
* @param {object} data - The data to provide to the template.
|
|
873
|
+
* @returns {HTMLElement | string} - The created element or an empty string if template is not specified.
|
|
885
874
|
*/
|
|
886
875
|
renderString(template, data) {
|
|
887
876
|
if (!template) {
|
|
@@ -890,9 +879,18 @@ export default class Component extends Element {
|
|
|
890
879
|
// Interpolate the template and populate
|
|
891
880
|
return this.interpolate(template, data);
|
|
892
881
|
}
|
|
882
|
+
/**
|
|
883
|
+
* Allows for modification of the component value prior to submission.
|
|
884
|
+
* @param {*} input - The input to be modified.
|
|
885
|
+
* @returns {*} - The modified input mapping for the extended component.
|
|
886
|
+
*/
|
|
893
887
|
performInputMapping(input) {
|
|
894
888
|
return input;
|
|
895
889
|
}
|
|
890
|
+
/**
|
|
891
|
+
* Returns the component "widget" if one is available.
|
|
892
|
+
* @returns {Widget|null} - The widget instance. null if not available.
|
|
893
|
+
*/
|
|
896
894
|
get widget() {
|
|
897
895
|
const settings = this.component.widget;
|
|
898
896
|
if (settings && this.root?.shadowRoot) {
|
|
@@ -901,6 +899,10 @@ export default class Component extends Element {
|
|
|
901
899
|
const widget = settings && Widgets[settings.type] ? new Widgets[settings.type](settings, this.component, this) : null;
|
|
902
900
|
return widget;
|
|
903
901
|
}
|
|
902
|
+
/**
|
|
903
|
+
* Returns the native supported browser language.
|
|
904
|
+
* @returns {string|null} - The native browser language that is supported.
|
|
905
|
+
*/
|
|
904
906
|
getBrowserLanguage() {
|
|
905
907
|
const nav = window.navigator;
|
|
906
908
|
const browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'];
|
|
@@ -924,38 +926,46 @@ export default class Component extends Element {
|
|
|
924
926
|
return null;
|
|
925
927
|
}
|
|
926
928
|
/**
|
|
927
|
-
* Called before a next and previous page is triggered allowing the components
|
|
928
|
-
* to
|
|
929
|
-
*
|
|
930
|
-
* @return {*}
|
|
929
|
+
* Called before a next and previous page is triggered allowing the components to perform special functions.
|
|
930
|
+
* @returns {Promise<boolean>} - A promise to resolve when the component is no longer blocking the next/previous page navigation.
|
|
931
931
|
*/
|
|
932
932
|
beforePage() {
|
|
933
933
|
return Promise.resolve(true);
|
|
934
934
|
}
|
|
935
|
+
/**
|
|
936
|
+
* Called before the next page is triggered allowing the components to hook into the page navigation and perform tasks.
|
|
937
|
+
* @returns {Promise<boolean>} - A promise to resolve when the component is no longer blocking the next page navigation.
|
|
938
|
+
*/
|
|
935
939
|
beforeNext() {
|
|
936
940
|
return this.beforePage(true);
|
|
937
941
|
}
|
|
938
942
|
/**
|
|
939
|
-
* Called before a submission is triggered allowing the components
|
|
940
|
-
* to
|
|
941
|
-
*
|
|
942
|
-
* @return {*}
|
|
943
|
+
* Called before a submission is triggered allowing the components to perform special async functions.
|
|
944
|
+
* @returns {Promise<boolean>} - A promise to resolve when the component is no longer blocking the submission.
|
|
943
945
|
*/
|
|
944
946
|
beforeSubmit() {
|
|
945
947
|
return Promise.resolve(true);
|
|
946
948
|
}
|
|
947
949
|
/**
|
|
948
950
|
* Return the submission timezone.
|
|
949
|
-
*
|
|
950
|
-
* @return {*}
|
|
951
|
+
* @returns {string} - The submission timezone.
|
|
951
952
|
*/
|
|
952
953
|
get submissionTimezone() {
|
|
953
954
|
this.options.submissionTimezone = this.options.submissionTimezone || _.get(this.root, 'options.submissionTimezone');
|
|
954
955
|
return this.options.submissionTimezone;
|
|
955
956
|
}
|
|
957
|
+
/**
|
|
958
|
+
* Return the current timezone.
|
|
959
|
+
* @returns {string} - The current timezone.
|
|
960
|
+
*/
|
|
956
961
|
get timezone() {
|
|
957
962
|
return this.getTimezone(this.component);
|
|
958
963
|
}
|
|
964
|
+
/**
|
|
965
|
+
* Return the current timezone.
|
|
966
|
+
* @param {object} settings - Settings to control how the timezone should be returned.
|
|
967
|
+
* @returns {string} - The current timezone.
|
|
968
|
+
*/
|
|
959
969
|
getTimezone(settings) {
|
|
960
970
|
if (settings.timezone) {
|
|
961
971
|
return settings.timezone;
|
|
@@ -979,6 +989,9 @@ export default class Component extends Element {
|
|
|
979
989
|
* @param {string} [referenceAttributeName] - The attribute name to use for the reference.
|
|
980
990
|
*/
|
|
981
991
|
loadRefs(element, refs, referenceAttributeName) {
|
|
992
|
+
if (!element) {
|
|
993
|
+
return;
|
|
994
|
+
}
|
|
982
995
|
for (const ref in refs) {
|
|
983
996
|
const refType = refs[ref];
|
|
984
997
|
const isString = typeof refType === 'string';
|
|
@@ -993,21 +1006,42 @@ export default class Component extends Element {
|
|
|
993
1006
|
}
|
|
994
1007
|
}
|
|
995
1008
|
}
|
|
996
|
-
|
|
1009
|
+
/**
|
|
1010
|
+
* Opens the modal element.
|
|
1011
|
+
* @param {string} template - The template to use for the modal dialog.
|
|
1012
|
+
*/
|
|
1013
|
+
setOpenModalElement(template = null) {
|
|
997
1014
|
this.componentModal.setOpenModalElement(template || this.getModalPreviewTemplate());
|
|
998
1015
|
}
|
|
1016
|
+
/**
|
|
1017
|
+
* Renders a modal preview template and returns the markup as a string
|
|
1018
|
+
* @param {object|null|undefined} ctx - The rendering context
|
|
1019
|
+
* @returns {string} - The modal preview markup
|
|
1020
|
+
*/
|
|
1021
|
+
renderModalPreview(ctx) {
|
|
1022
|
+
return this.renderTemplate('modalPreview', ctx || {});
|
|
1023
|
+
}
|
|
1024
|
+
/**
|
|
1025
|
+
* Returns the modal preview template.
|
|
1026
|
+
* @returns {string} - The modal preview template.
|
|
1027
|
+
*/
|
|
999
1028
|
getModalPreviewTemplate() {
|
|
1000
1029
|
const dataValue = this.component.type === 'password' ? this.dataValue.replace(/./g, '•') : this.dataValue;
|
|
1001
1030
|
let modalLabel;
|
|
1002
1031
|
if (this.hasInput && this.component.validate?.required && !this.isPDFReadOnlyMode) {
|
|
1003
1032
|
modalLabel = { className: 'field-required' };
|
|
1004
1033
|
}
|
|
1005
|
-
return this.
|
|
1034
|
+
return this.renderModalPreview({
|
|
1006
1035
|
previewText: this.getValueAsString(dataValue, { modalPreview: true }) || this.t('Click to set value'),
|
|
1007
1036
|
messages: '',
|
|
1008
1037
|
labelInfo: modalLabel,
|
|
1009
1038
|
});
|
|
1010
1039
|
}
|
|
1040
|
+
/**
|
|
1041
|
+
* Performs a complete build of a component, which empties, renders, sets the content in the DOM, and then finally attaches events.
|
|
1042
|
+
* @param {HTMLElement} element - The element to attach this component to.
|
|
1043
|
+
* @returns {Promise<void>} - A promise that resolves when the component has been built.
|
|
1044
|
+
*/
|
|
1011
1045
|
build(element) {
|
|
1012
1046
|
element = element || this.element;
|
|
1013
1047
|
this.empty(element);
|
|
@@ -1017,6 +1051,12 @@ export default class Component extends Element {
|
|
|
1017
1051
|
get hasModalSaveButton() {
|
|
1018
1052
|
return true;
|
|
1019
1053
|
}
|
|
1054
|
+
/**
|
|
1055
|
+
* Renders a component as an HTML string.
|
|
1056
|
+
* @param {string} children - The contents of all the children HTML as a string.
|
|
1057
|
+
* @param {boolean} topLevel - If this is the topmost component that is being rendered.
|
|
1058
|
+
* @returns {string} - The rendered HTML string of a component.
|
|
1059
|
+
*/
|
|
1020
1060
|
render(children = `Unknown component: ${this.component.type}`, topLevel = false) {
|
|
1021
1061
|
const isVisible = this.visible;
|
|
1022
1062
|
this.rendered = true;
|
|
@@ -1040,27 +1080,54 @@ export default class Component extends Element {
|
|
|
1040
1080
|
}, topLevel);
|
|
1041
1081
|
}
|
|
1042
1082
|
}
|
|
1083
|
+
/**
|
|
1084
|
+
* Creates the tooltip instance using tippy.js and returns it
|
|
1085
|
+
* @param {HTMLElement} tooltipEl - HTML element to attach the tooltip
|
|
1086
|
+
* @param {object|null|undefined} settings - tippy.js options
|
|
1087
|
+
* @returns {import('tippy.js').Tippy} - tippy.js instance
|
|
1088
|
+
*/
|
|
1089
|
+
createTooltip(tooltipEl, settings = {}) {
|
|
1090
|
+
const tooltipAttribute = tooltipEl.getAttribute('data-tooltip');
|
|
1091
|
+
const tooltipDataTitle = tooltipEl.getAttribute('data-title');
|
|
1092
|
+
const tooltipText = this.interpolate(tooltipDataTitle || tooltipAttribute)
|
|
1093
|
+
.replace(/(?:\r\n|\r|\n)/g, '<br />');
|
|
1094
|
+
return tippy(tooltipEl, {
|
|
1095
|
+
allowHTML: true,
|
|
1096
|
+
trigger: 'mouseenter click focus',
|
|
1097
|
+
placement: 'right',
|
|
1098
|
+
zIndex: 10000,
|
|
1099
|
+
interactive: true,
|
|
1100
|
+
...settings,
|
|
1101
|
+
content: this.t(this.sanitize(tooltipText), { _userInput: true }),
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
/**
|
|
1105
|
+
* Attaches all the tooltips provided the refs object.
|
|
1106
|
+
* @param {object} toolTipsRefs - The refs for the tooltips within your template.
|
|
1107
|
+
* @returns {void}
|
|
1108
|
+
*/
|
|
1043
1109
|
attachTooltips(toolTipsRefs) {
|
|
1044
1110
|
toolTipsRefs?.forEach((tooltip, index) => {
|
|
1045
1111
|
if (tooltip) {
|
|
1046
|
-
|
|
1047
|
-
const tooltipDataTitle = tooltip.getAttribute('data-title');
|
|
1048
|
-
const tooltipText = this.interpolate(tooltipDataTitle || tooltipAttribute)
|
|
1049
|
-
.replace(/(?:\r\n|\r|\n)/g, '<br />');
|
|
1050
|
-
this.tooltips[index] = tippy(tooltip, {
|
|
1051
|
-
allowHTML: true,
|
|
1052
|
-
trigger: 'mouseenter click focus',
|
|
1053
|
-
placement: 'right',
|
|
1054
|
-
zIndex: 10000,
|
|
1055
|
-
interactive: true,
|
|
1056
|
-
content: this.t(this.sanitize(tooltipText), { _userInput: true }),
|
|
1057
|
-
});
|
|
1112
|
+
this.tooltips[index] = this.createTooltip(tooltip);
|
|
1058
1113
|
}
|
|
1059
1114
|
});
|
|
1060
1115
|
}
|
|
1116
|
+
/**
|
|
1117
|
+
* Create a new component modal for this component.
|
|
1118
|
+
* @param {HTMLElement} element - The element to attach the modal to.
|
|
1119
|
+
* @param {boolean} modalShouldBeOpened - TRUE if the modal should open immediately.
|
|
1120
|
+
* @param {any} currentValue - The current value of the component.
|
|
1121
|
+
* @returns {ComponentModal} - The created component modal.
|
|
1122
|
+
*/
|
|
1061
1123
|
createComponentModal(element, modalShouldBeOpened, currentValue) {
|
|
1062
1124
|
return new ComponentModal(this, element, modalShouldBeOpened, currentValue, this._referenceAttributeName);
|
|
1063
1125
|
}
|
|
1126
|
+
/**
|
|
1127
|
+
* Attaches all event listensers for this component to the DOM elements that were rendered.
|
|
1128
|
+
* @param {HTMLElement} element - The element to attach the listeners to.
|
|
1129
|
+
* @returns {Promise<void>} - Resolves when the component is done attaching to the DOM.
|
|
1130
|
+
*/
|
|
1064
1131
|
attach(element) {
|
|
1065
1132
|
if (!this.builderMode && !this.previewMode && this.component.modalEdit) {
|
|
1066
1133
|
const modalShouldBeOpened = this.componentModal ? this.componentModal.isOpened : false;
|
|
@@ -1098,6 +1165,9 @@ export default class Component extends Element {
|
|
|
1098
1165
|
this.addons.forEach((addon) => addon.attach(element));
|
|
1099
1166
|
return Promise.resolve();
|
|
1100
1167
|
}
|
|
1168
|
+
/**
|
|
1169
|
+
* Restors the "focus" on a component after a redraw event has occured.
|
|
1170
|
+
*/
|
|
1101
1171
|
restoreFocus() {
|
|
1102
1172
|
const isFocused = this.root?.focusedComponent?.path === this.path;
|
|
1103
1173
|
if (isFocused) {
|
|
@@ -1106,6 +1176,12 @@ export default class Component extends Element {
|
|
|
1106
1176
|
this.restoreCaretPosition();
|
|
1107
1177
|
}
|
|
1108
1178
|
}
|
|
1179
|
+
/**
|
|
1180
|
+
* Adds a keyboard shortcut to this component.
|
|
1181
|
+
* @param {HTMLElement} element - The element to attach the keyboard shortcut to.
|
|
1182
|
+
* @param {string} shortcut - The keyboard shortcut to add.
|
|
1183
|
+
* @returns {void}
|
|
1184
|
+
*/
|
|
1109
1185
|
addShortcut(element, shortcut) {
|
|
1110
1186
|
// Avoid infinite recursion.
|
|
1111
1187
|
if (!element || !this.root || (this.root === this)) {
|
|
@@ -1116,6 +1192,12 @@ export default class Component extends Element {
|
|
|
1116
1192
|
}
|
|
1117
1193
|
this.root.addShortcut(element, shortcut);
|
|
1118
1194
|
}
|
|
1195
|
+
/**
|
|
1196
|
+
* Removes a keyboard shortcut from this component.
|
|
1197
|
+
* @param {HTMLElement} element - The element to remove the keyboard shortcut from.
|
|
1198
|
+
* @param {string} shortcut - The keyboard shortcut to remove.
|
|
1199
|
+
* @returns {void}
|
|
1200
|
+
*/
|
|
1119
1201
|
removeShortcut(element, shortcut) {
|
|
1120
1202
|
// Avoid infinite recursion.
|
|
1121
1203
|
if (!element || (this.root === this)) {
|
|
@@ -1148,6 +1230,13 @@ export default class Component extends Element {
|
|
|
1148
1230
|
this.tooltip.destroy();
|
|
1149
1231
|
}
|
|
1150
1232
|
}
|
|
1233
|
+
/**
|
|
1234
|
+
* Determines if the component should be refreshed based on the path of another component that changed.
|
|
1235
|
+
* @param {string} refreshData - The path of the data that needs to trigger a refresh.
|
|
1236
|
+
* @param {boolean} changed - Flag that is true if the data has been changed.
|
|
1237
|
+
* @param {any} flags - The flags for the checkData procedure.
|
|
1238
|
+
* @returns {void}
|
|
1239
|
+
*/
|
|
1151
1240
|
checkRefresh(refreshData, changed, flags) {
|
|
1152
1241
|
const changePath = _.get(changed, 'instance.path', false);
|
|
1153
1242
|
// Don't let components change themselves.
|
|
@@ -1164,6 +1253,12 @@ export default class Component extends Element {
|
|
|
1164
1253
|
this.refresh(changed.value, changed, flags);
|
|
1165
1254
|
}
|
|
1166
1255
|
}
|
|
1256
|
+
/**
|
|
1257
|
+
* Iterates over a list of changes, and determines if the component should be refreshed if it is configured to refresh on any of those components.
|
|
1258
|
+
* @param {Array<any>} changes - The list of components that have changed.
|
|
1259
|
+
* @param {any} flags - The checkData flags.
|
|
1260
|
+
* @returns {void}
|
|
1261
|
+
*/
|
|
1167
1262
|
checkRefreshOn(changes, flags = {}) {
|
|
1168
1263
|
changes = changes || [];
|
|
1169
1264
|
if (flags.noRefresh) {
|
|
@@ -1185,8 +1280,8 @@ export default class Component extends Element {
|
|
|
1185
1280
|
}
|
|
1186
1281
|
/**
|
|
1187
1282
|
* Refreshes the component with a new value.
|
|
1188
|
-
*
|
|
1189
|
-
* @
|
|
1283
|
+
* @param {any} value - The latest value of the component to check if it needs to be refreshed.
|
|
1284
|
+
* @returns {void}
|
|
1190
1285
|
*/
|
|
1191
1286
|
refresh(value) {
|
|
1192
1287
|
if (this.hasOwnProperty('refreshOnValue')) {
|
|
@@ -1209,8 +1304,8 @@ export default class Component extends Element {
|
|
|
1209
1304
|
* with the components data and returns true if they are in the same context.
|
|
1210
1305
|
*
|
|
1211
1306
|
* Different rows of the same EditGrid, for example, are in different contexts.
|
|
1212
|
-
*
|
|
1213
|
-
* @
|
|
1307
|
+
* @param {any} component - The component to check if it is in the same context as this component.
|
|
1308
|
+
* @returns {boolean} - TRUE if the component is in the same context as this component.
|
|
1214
1309
|
*/
|
|
1215
1310
|
inContext(component) {
|
|
1216
1311
|
if (component.data === this.data) {
|
|
@@ -1225,9 +1320,18 @@ export default class Component extends Element {
|
|
|
1225
1320
|
}
|
|
1226
1321
|
return false;
|
|
1227
1322
|
}
|
|
1323
|
+
/**
|
|
1324
|
+
* Determines if we are in "view" only mode.
|
|
1325
|
+
* @returns {boolean} - TRUE if we are in "view" only mode.
|
|
1326
|
+
*/
|
|
1228
1327
|
get viewOnly() {
|
|
1229
1328
|
return this.options.readOnly && this.options.viewAsHtml;
|
|
1230
1329
|
}
|
|
1330
|
+
/**
|
|
1331
|
+
* Sets the HTMLElement for this component.
|
|
1332
|
+
* @param {HTMLElement} element - The element that is attached to this component.
|
|
1333
|
+
* @returns {void}
|
|
1334
|
+
*/
|
|
1231
1335
|
setElement(element) {
|
|
1232
1336
|
if (this.element) {
|
|
1233
1337
|
delete this.element.component;
|
|
@@ -1235,6 +1339,10 @@ export default class Component extends Element {
|
|
|
1235
1339
|
}
|
|
1236
1340
|
this.element = element;
|
|
1237
1341
|
}
|
|
1342
|
+
/**
|
|
1343
|
+
* Creates an element to hold the "view only" version of this component.
|
|
1344
|
+
* @returns {HTMLElement} - The element for this component.
|
|
1345
|
+
*/
|
|
1238
1346
|
createViewOnlyElement() {
|
|
1239
1347
|
this.setElement(this.ce('dl', {
|
|
1240
1348
|
id: this.id
|
|
@@ -1245,14 +1353,18 @@ export default class Component extends Element {
|
|
|
1245
1353
|
}
|
|
1246
1354
|
return this.element;
|
|
1247
1355
|
}
|
|
1356
|
+
/**
|
|
1357
|
+
* The default value for the "view only" mode of a component if the value is not provided.
|
|
1358
|
+
* @returns {string} - The default value for this component.
|
|
1359
|
+
*/
|
|
1248
1360
|
get defaultViewOnlyValue() {
|
|
1249
1361
|
return '-';
|
|
1250
1362
|
}
|
|
1251
1363
|
/**
|
|
1252
1364
|
* Uses the widget to determine the output string.
|
|
1253
|
-
*
|
|
1254
|
-
* @param
|
|
1255
|
-
* @
|
|
1365
|
+
* @param {any} value - The current value of the component.
|
|
1366
|
+
* @param {any} options - The options for getValueAsString.
|
|
1367
|
+
* @returns {any|Array<any>} - The value as a string.
|
|
1256
1368
|
*/
|
|
1257
1369
|
getWidgetValueAsString(value, options) {
|
|
1258
1370
|
const noInputWidget = !this.refs.input || !this.refs.input[0] || !this.refs.input[0].widget;
|
|
@@ -1277,6 +1389,12 @@ export default class Component extends Element {
|
|
|
1277
1389
|
const widget = this.refs.input[0].widget;
|
|
1278
1390
|
return widget.getValueAsString(value, options);
|
|
1279
1391
|
}
|
|
1392
|
+
/**
|
|
1393
|
+
* Returns the value of the component as a string.
|
|
1394
|
+
* @param {any} value - The value for this component.
|
|
1395
|
+
* @param {any} options - The options for this component.
|
|
1396
|
+
* @returns {string} - The string representation of the value of this component.
|
|
1397
|
+
*/
|
|
1280
1398
|
getValueAsString(value, options) {
|
|
1281
1399
|
if (!value) {
|
|
1282
1400
|
return '';
|
|
@@ -1294,20 +1412,32 @@ export default class Component extends Element {
|
|
|
1294
1412
|
const stringValue = value.toString();
|
|
1295
1413
|
return this.sanitize(stringValue);
|
|
1296
1414
|
}
|
|
1415
|
+
/**
|
|
1416
|
+
* Returns the string representation "view" of the component value.
|
|
1417
|
+
* @param {any} value - The value of the component.
|
|
1418
|
+
* @param {any} options - The options for this component.
|
|
1419
|
+
* @returns {string} - The string representation of the value of this component.
|
|
1420
|
+
*/
|
|
1297
1421
|
getView(value, options) {
|
|
1298
1422
|
if (this.component.protected) {
|
|
1299
1423
|
return '--- PROTECTED ---';
|
|
1300
1424
|
}
|
|
1301
1425
|
return this.getValueAsString(value, options);
|
|
1302
1426
|
}
|
|
1427
|
+
/**
|
|
1428
|
+
* Updates the items list for this component. Useful for Select and other List component types.
|
|
1429
|
+
* @param {...any} args - The arguments to pass to the onChange event.
|
|
1430
|
+
* @returns {void}
|
|
1431
|
+
*/
|
|
1303
1432
|
updateItems(...args) {
|
|
1304
1433
|
this.restoreValue();
|
|
1305
1434
|
this.onChange(...args);
|
|
1306
1435
|
}
|
|
1307
1436
|
/**
|
|
1308
|
-
*
|
|
1309
|
-
* @param {
|
|
1310
|
-
* @
|
|
1437
|
+
* Returns the value for a specific item in a List type component.
|
|
1438
|
+
* @param {any} data - The data for this component.
|
|
1439
|
+
* @param {boolean} [forceUseValue] - if true, return 'value' property of the data
|
|
1440
|
+
* @returns {any} - The value of the item.
|
|
1311
1441
|
*/
|
|
1312
1442
|
itemValue(data, forceUseValue = false) {
|
|
1313
1443
|
if (_.isObject(data) && !_.isArray(data)) {
|
|
@@ -1320,6 +1450,11 @@ export default class Component extends Element {
|
|
|
1320
1450
|
}
|
|
1321
1451
|
return data;
|
|
1322
1452
|
}
|
|
1453
|
+
/**
|
|
1454
|
+
* Returns the item value for html mode.
|
|
1455
|
+
* @param {any} value - The value for this component.
|
|
1456
|
+
* @returns {any} - The value of the item for html mode.
|
|
1457
|
+
*/
|
|
1323
1458
|
itemValueForHTMLMode(value) {
|
|
1324
1459
|
if (Array.isArray(value)) {
|
|
1325
1460
|
const values = value.map(item => Array.isArray(item) ? this.itemValueForHTMLMode(item) : this.itemValue(item));
|
|
@@ -1327,6 +1462,13 @@ export default class Component extends Element {
|
|
|
1327
1462
|
}
|
|
1328
1463
|
return this.itemValue(value);
|
|
1329
1464
|
}
|
|
1465
|
+
/**
|
|
1466
|
+
* Creates a modal to input the value of this component.
|
|
1467
|
+
* @param {HTMLElement} element - The element to attach the modal to.
|
|
1468
|
+
* @param {any} attr - A list of attributes to add to the modal.
|
|
1469
|
+
* @param {boolean} confirm - If we should add a confirmation to the modal that keeps it from closing unless confirmed.
|
|
1470
|
+
* @returns {HTMLElement} - The created modal element.
|
|
1471
|
+
*/
|
|
1330
1472
|
createModal(element, attr, confirm) {
|
|
1331
1473
|
const dialog = this.ce('div', attr || {});
|
|
1332
1474
|
this.setContent(dialog, this.renderTemplate('dialog'));
|
|
@@ -1362,6 +1504,10 @@ export default class Component extends Element {
|
|
|
1362
1504
|
this.addEventListener(dialog.refs.dialogClose, 'click', handleCloseClick);
|
|
1363
1505
|
return dialog;
|
|
1364
1506
|
}
|
|
1507
|
+
/**
|
|
1508
|
+
* Uses CSS classes to show or hide an element.
|
|
1509
|
+
* @returns {boolean} - TRUE if the element has been css removed.
|
|
1510
|
+
*/
|
|
1365
1511
|
get optimizeRedraw() {
|
|
1366
1512
|
if (this.options.optimizeRedraw && this.element && !this.visible) {
|
|
1367
1513
|
this.addClass(this.element, 'formio-removed');
|
|
@@ -1399,7 +1545,7 @@ export default class Component extends Element {
|
|
|
1399
1545
|
}
|
|
1400
1546
|
/**
|
|
1401
1547
|
* Build the custom style from the layout values
|
|
1402
|
-
* @
|
|
1548
|
+
* @returns {string} - The custom style
|
|
1403
1549
|
*/
|
|
1404
1550
|
get customStyle() {
|
|
1405
1551
|
let customCSS = '';
|
|
@@ -1410,24 +1556,31 @@ export default class Component extends Element {
|
|
|
1410
1556
|
});
|
|
1411
1557
|
return customCSS;
|
|
1412
1558
|
}
|
|
1559
|
+
/**
|
|
1560
|
+
* Returns the component condition operator settings if available.
|
|
1561
|
+
* @returns {object} - The component condition operator settings.
|
|
1562
|
+
*/
|
|
1413
1563
|
static get serverConditionSettings() {
|
|
1414
1564
|
return Component.conditionOperatorsSettings;
|
|
1415
1565
|
}
|
|
1566
|
+
/**
|
|
1567
|
+
* Returns if the application is on a mobile device.
|
|
1568
|
+
* @returns {boolean} - TRUE if the application is on a mobile device.
|
|
1569
|
+
*/
|
|
1416
1570
|
get isMobile() {
|
|
1417
1571
|
return isMobile();
|
|
1418
1572
|
}
|
|
1419
1573
|
/**
|
|
1420
1574
|
* Returns the outside wrapping element of this component.
|
|
1421
|
-
* @returns {HTMLElement}
|
|
1575
|
+
* @returns {HTMLElement} - The wrapping element of this component.
|
|
1422
1576
|
*/
|
|
1423
1577
|
getElement() {
|
|
1424
1578
|
return this.element;
|
|
1425
1579
|
}
|
|
1426
1580
|
/**
|
|
1427
1581
|
* Create an evaluation context for all script executions and interpolations.
|
|
1428
|
-
*
|
|
1429
|
-
* @
|
|
1430
|
-
* @return {*}
|
|
1582
|
+
* @param {any} additional - Additional context to provide.
|
|
1583
|
+
* @returns {any} - The evaluation context.
|
|
1431
1584
|
*/
|
|
1432
1585
|
evalContext(additional) {
|
|
1433
1586
|
return super.evalContext(Object.assign({
|
|
@@ -1449,18 +1602,29 @@ export default class Component extends Element {
|
|
|
1449
1602
|
}
|
|
1450
1603
|
/**
|
|
1451
1604
|
* Sets the pristine flag for this component.
|
|
1452
|
-
*
|
|
1453
|
-
* @param pristine {boolean} - TRUE to make pristine, FALSE not pristine.
|
|
1605
|
+
* @param {boolean} pristine - TRUE to make pristine, FALSE not pristine.
|
|
1454
1606
|
*/
|
|
1455
1607
|
setPristine(pristine) {
|
|
1456
1608
|
this.pristine = pristine;
|
|
1457
1609
|
}
|
|
1610
|
+
/**
|
|
1611
|
+
* Returns if the component is pristine.
|
|
1612
|
+
* @returns {boolean} - TRUE if the component is pristine.
|
|
1613
|
+
*/
|
|
1458
1614
|
get isPristine() {
|
|
1459
1615
|
return this.pristine;
|
|
1460
1616
|
}
|
|
1617
|
+
/**
|
|
1618
|
+
* Sets the dirty flag for this component.
|
|
1619
|
+
* @param {boolean} dirty - TRUE to make dirty, FALSE not dirty.
|
|
1620
|
+
*/
|
|
1461
1621
|
setDirty(dirty) {
|
|
1462
1622
|
this.dirty = dirty;
|
|
1463
1623
|
}
|
|
1624
|
+
/**
|
|
1625
|
+
* Returns if the component is dirty.
|
|
1626
|
+
* @returns {boolean} - TRUE if the component is dirty.
|
|
1627
|
+
*/
|
|
1464
1628
|
get isDirty() {
|
|
1465
1629
|
return this.dirty;
|
|
1466
1630
|
}
|
|
@@ -1474,12 +1638,23 @@ export default class Component extends Element {
|
|
|
1474
1638
|
this.restoreValue();
|
|
1475
1639
|
this.triggerRootChange();
|
|
1476
1640
|
}
|
|
1641
|
+
/**
|
|
1642
|
+
* Returns the icon class for a given icon name.
|
|
1643
|
+
* @param {string} name - The name of the icon you wish to fetch provided the icon class. This is the "font awesome" version of the name of the icon.
|
|
1644
|
+
* @param {boolean} spinning - If the component should be spinning.
|
|
1645
|
+
* @returns {string} - The icon class for the equivalent icon in the iconset we are using.
|
|
1646
|
+
*/
|
|
1477
1647
|
iconClass(name, spinning) {
|
|
1478
1648
|
const iconset = this.options.iconset || Templates.current.defaultIconset || 'fa';
|
|
1479
1649
|
return Templates.current.hasOwnProperty('iconClass')
|
|
1480
1650
|
? Templates.current.iconClass(iconset, name, spinning)
|
|
1481
1651
|
: this.options.iconset === 'fa' ? Templates.defaultTemplates.iconClass(iconset, name, spinning) : name;
|
|
1482
1652
|
}
|
|
1653
|
+
/**
|
|
1654
|
+
* Returns the size css class names for our current template.
|
|
1655
|
+
* @param {string} size - The size class name for the default iconset.
|
|
1656
|
+
* @returns {string} - The size class for our component.
|
|
1657
|
+
*/
|
|
1483
1658
|
size(size) {
|
|
1484
1659
|
return Templates.current.hasOwnProperty('size')
|
|
1485
1660
|
? Templates.current.size(size)
|
|
@@ -1492,15 +1667,23 @@ export default class Component extends Element {
|
|
|
1492
1667
|
get name() {
|
|
1493
1668
|
return this.t(this.component.label || this.component.placeholder || this.key, { _userInput: true });
|
|
1494
1669
|
}
|
|
1670
|
+
/**
|
|
1671
|
+
* Returns the visible errors for this component.
|
|
1672
|
+
* @returns {Array<object>} - The visible errors for this component.
|
|
1673
|
+
*/
|
|
1495
1674
|
get visibleErrors() {
|
|
1496
1675
|
return this._visibleErrors;
|
|
1497
1676
|
}
|
|
1677
|
+
/**
|
|
1678
|
+
* Returns all the errors for this component, visible or not.
|
|
1679
|
+
* @returns {Array<object>} - All the errors for this component.
|
|
1680
|
+
*/
|
|
1498
1681
|
get errors() {
|
|
1499
1682
|
return this._errors;
|
|
1500
1683
|
}
|
|
1501
1684
|
/**
|
|
1502
1685
|
* Returns the error label for this component.
|
|
1503
|
-
* @
|
|
1686
|
+
* @returns {string} - The error label for this component.
|
|
1504
1687
|
*/
|
|
1505
1688
|
get errorLabel() {
|
|
1506
1689
|
return this.t(this.component.errorLabel
|
|
@@ -1510,12 +1693,20 @@ export default class Component extends Element {
|
|
|
1510
1693
|
}
|
|
1511
1694
|
/**
|
|
1512
1695
|
* Get the error message provided a certain type of error.
|
|
1513
|
-
* @param type
|
|
1514
|
-
* @
|
|
1696
|
+
* @param {string} type - The type of error to fetch the message for.
|
|
1697
|
+
* @returns {string} - The error message configured for this component.
|
|
1515
1698
|
*/
|
|
1516
1699
|
errorMessage(type) {
|
|
1517
1700
|
return (this.component.errors && this.component.errors[type]) ? this.component.errors[type] : type;
|
|
1518
1701
|
}
|
|
1702
|
+
/**
|
|
1703
|
+
* Sets the content, innerHTML, of an element to the sanitized content.
|
|
1704
|
+
* @param {HTMLElement} element - The element to set the innerHTML to.
|
|
1705
|
+
* @param {string} content - The HTML string content that we wish to set.
|
|
1706
|
+
* @param {boolean} forceSanitize - If we should force the content to be sanitized.
|
|
1707
|
+
* @param {any} sanitizeOptions - The options for the sanitize function.
|
|
1708
|
+
* @returns {boolean} - TRUE if the content was sanitized and set.
|
|
1709
|
+
*/
|
|
1519
1710
|
setContent(element, content, forceSanitize, sanitizeOptions) {
|
|
1520
1711
|
if (element instanceof HTMLElement) {
|
|
1521
1712
|
element.innerHTML = this.sanitize(content, forceSanitize, sanitizeOptions);
|
|
@@ -1523,6 +1714,9 @@ export default class Component extends Element {
|
|
|
1523
1714
|
}
|
|
1524
1715
|
return false;
|
|
1525
1716
|
}
|
|
1717
|
+
/**
|
|
1718
|
+
* Restores the caret position in the input element after a refresh occurs.
|
|
1719
|
+
*/
|
|
1526
1720
|
restoreCaretPosition() {
|
|
1527
1721
|
if (this.root?.currentSelection) {
|
|
1528
1722
|
if (this.refs.input?.length) {
|
|
@@ -1544,6 +1738,10 @@ export default class Component extends Element {
|
|
|
1544
1738
|
}
|
|
1545
1739
|
}
|
|
1546
1740
|
}
|
|
1741
|
+
/**
|
|
1742
|
+
* Redraw the component.
|
|
1743
|
+
* @returns {Promise<void>} - A promise that resolves when the component is done redrawing.
|
|
1744
|
+
*/
|
|
1547
1745
|
redraw() {
|
|
1548
1746
|
// Don't bother if we have not built yet.
|
|
1549
1747
|
if (!this.element || !this.element.parentNode || this.optimizeRedraw) {
|
|
@@ -1559,29 +1757,54 @@ export default class Component extends Element {
|
|
|
1559
1757
|
this.setElement(parent.children[index]);
|
|
1560
1758
|
return this.attach(this.element);
|
|
1561
1759
|
}
|
|
1760
|
+
/**
|
|
1761
|
+
* Rebuild and redraw a component.
|
|
1762
|
+
* @returns {Promise<void>} - A promise that resolves when the component is done rebuilding and redrawing.
|
|
1763
|
+
*/
|
|
1562
1764
|
rebuild() {
|
|
1563
1765
|
this.destroy();
|
|
1564
1766
|
this.init();
|
|
1565
1767
|
this.visible = this.conditionallyVisible(null, null);
|
|
1566
1768
|
return this.redraw();
|
|
1567
1769
|
}
|
|
1770
|
+
/**
|
|
1771
|
+
* Removes all event listeners attached to this component.
|
|
1772
|
+
*/
|
|
1568
1773
|
removeEventListeners() {
|
|
1569
1774
|
super.removeEventListeners();
|
|
1570
1775
|
this.tooltips.forEach(tooltip => tooltip.destroy());
|
|
1571
1776
|
this.tooltips = [];
|
|
1572
1777
|
}
|
|
1778
|
+
/**
|
|
1779
|
+
* Returns if the dom node has the classes provided.
|
|
1780
|
+
* @param {HTMLElement} element - The element to check for the class.
|
|
1781
|
+
* @param {string} className - The name of the class to check.
|
|
1782
|
+
* @returns {boolean|void} - TRUE if the element has the class.
|
|
1783
|
+
*/
|
|
1573
1784
|
hasClass(element, className) {
|
|
1574
1785
|
if (!element) {
|
|
1575
1786
|
return;
|
|
1576
1787
|
}
|
|
1577
1788
|
return super.hasClass(element, this.transform('class', className));
|
|
1578
1789
|
}
|
|
1790
|
+
/**
|
|
1791
|
+
* Adds a class to an HTML element.
|
|
1792
|
+
* @param {HTMLElement} element - The dom element to add the class to.
|
|
1793
|
+
* @param {string} className - The class name you wish to add.
|
|
1794
|
+
* @returns {this|void} - The component instance.
|
|
1795
|
+
*/
|
|
1579
1796
|
addClass(element, className) {
|
|
1580
1797
|
if (!element) {
|
|
1581
1798
|
return;
|
|
1582
1799
|
}
|
|
1583
1800
|
return super.addClass(element, this.transform('class', className));
|
|
1584
1801
|
}
|
|
1802
|
+
/**
|
|
1803
|
+
* Removes a class from an element.
|
|
1804
|
+
* @param {HTMLElement} element - The element to remove the class from.
|
|
1805
|
+
* @param {string} className - The class name to remove.
|
|
1806
|
+
* @returns {this|void} - The component instance.
|
|
1807
|
+
*/
|
|
1585
1808
|
removeClass(element, className) {
|
|
1586
1809
|
if (!element) {
|
|
1587
1810
|
return;
|
|
@@ -1590,8 +1813,7 @@ export default class Component extends Element {
|
|
|
1590
1813
|
}
|
|
1591
1814
|
/**
|
|
1592
1815
|
* Determines if this component has a condition defined.
|
|
1593
|
-
*
|
|
1594
|
-
* @return {null}
|
|
1816
|
+
* @returns {boolean} - TRUE if the component has a condition defined.
|
|
1595
1817
|
*/
|
|
1596
1818
|
hasCondition() {
|
|
1597
1819
|
if (this._hasCondition !== null) {
|
|
@@ -1602,9 +1824,9 @@ export default class Component extends Element {
|
|
|
1602
1824
|
}
|
|
1603
1825
|
/**
|
|
1604
1826
|
* Check if this component is conditionally visible.
|
|
1605
|
-
*
|
|
1606
|
-
* @param data
|
|
1607
|
-
* @
|
|
1827
|
+
* @param {any} data - The data to check against.
|
|
1828
|
+
* @param {any} row - The row data to check against.
|
|
1829
|
+
* @returns {boolean} - TRUE if the component is conditionally visible.
|
|
1608
1830
|
*/
|
|
1609
1831
|
conditionallyVisible(data, row) {
|
|
1610
1832
|
data = data || this.rootValue;
|
|
@@ -1619,16 +1841,19 @@ export default class Component extends Element {
|
|
|
1619
1841
|
* Checks the condition of this component.
|
|
1620
1842
|
*
|
|
1621
1843
|
* TODO: Switch row and data parameters to be consistent with other methods.
|
|
1622
|
-
*
|
|
1623
|
-
* @param
|
|
1624
|
-
* @
|
|
1625
|
-
* @return {boolean} - True if the condition applies to this component.
|
|
1844
|
+
* @param {any} row - The row contextual data.
|
|
1845
|
+
* @param {any} data - The global data object.
|
|
1846
|
+
* @returns {boolean} - True if the condition applies to this component.
|
|
1626
1847
|
*/
|
|
1627
1848
|
checkCondition(row, data) {
|
|
1628
1849
|
return FormioUtils.checkCondition(this.component, row || this.data, data || this.rootValue, this.root ? this.root._form : {}, this);
|
|
1629
1850
|
}
|
|
1630
1851
|
/**
|
|
1631
1852
|
* Check for conditionals and hide/show the element based on those conditions.
|
|
1853
|
+
* @param {any} data - The data to check against.
|
|
1854
|
+
* @param {any} flags - The flags passed to checkData function.
|
|
1855
|
+
* @param {any} row - The row data to check against.
|
|
1856
|
+
* @returns {boolean} - TRUE if the component is visible.
|
|
1632
1857
|
*/
|
|
1633
1858
|
checkComponentConditions(data, flags, row) {
|
|
1634
1859
|
data = data || this.rootValue;
|
|
@@ -1646,8 +1871,10 @@ export default class Component extends Element {
|
|
|
1646
1871
|
}
|
|
1647
1872
|
/**
|
|
1648
1873
|
* Checks conditions for this component and any sub components.
|
|
1649
|
-
* @param
|
|
1650
|
-
* @
|
|
1874
|
+
* @param {any} data - The data to check against.
|
|
1875
|
+
* @param {any} flags - The flags passed to checkData function.
|
|
1876
|
+
* @param {any} row - The row data to check against.
|
|
1877
|
+
* @returns {boolean} - TRUE if the component is visible.
|
|
1651
1878
|
*/
|
|
1652
1879
|
checkConditions(data, flags, row) {
|
|
1653
1880
|
data = data || this.rootValue;
|
|
@@ -1655,17 +1882,20 @@ export default class Component extends Element {
|
|
|
1655
1882
|
row = row || this.data;
|
|
1656
1883
|
return this.checkComponentConditions(data, flags, row);
|
|
1657
1884
|
}
|
|
1885
|
+
/**
|
|
1886
|
+
* Returns the component logic if applicable.
|
|
1887
|
+
* @returns {Array<object>} - The component logic.
|
|
1888
|
+
*/
|
|
1658
1889
|
get logic() {
|
|
1659
1890
|
return this.component.logic || [];
|
|
1660
1891
|
}
|
|
1661
1892
|
/**
|
|
1662
1893
|
* Check all triggers and apply necessary actions.
|
|
1663
|
-
*
|
|
1664
|
-
* @param data
|
|
1894
|
+
* @param {any} data - The data to check against.
|
|
1895
|
+
* @param {any} row - The row data to check against.
|
|
1896
|
+
* @returns {boolean|void} - TRUE if the component was altered.
|
|
1665
1897
|
*/
|
|
1666
|
-
fieldLogic(data, row) {
|
|
1667
|
-
data = data || this.rootValue;
|
|
1668
|
-
row = row || this.data;
|
|
1898
|
+
fieldLogic(data = this.rootValue, row = this.data) {
|
|
1669
1899
|
const logics = this.logic;
|
|
1670
1900
|
// If there aren't logic, don't go further.
|
|
1671
1901
|
if (logics.length === 0) {
|
|
@@ -1688,6 +1918,10 @@ export default class Component extends Element {
|
|
|
1688
1918
|
}
|
|
1689
1919
|
return changed;
|
|
1690
1920
|
}
|
|
1921
|
+
/**
|
|
1922
|
+
* Retuns if the browser is Internet Explorer.
|
|
1923
|
+
* @returns {boolean} - TRUE if the browser is IE.
|
|
1924
|
+
*/
|
|
1691
1925
|
isIE() {
|
|
1692
1926
|
if (typeof window === 'undefined') {
|
|
1693
1927
|
return false;
|
|
@@ -1712,9 +1946,24 @@ export default class Component extends Element {
|
|
|
1712
1946
|
// other browser
|
|
1713
1947
|
return false;
|
|
1714
1948
|
}
|
|
1949
|
+
/**
|
|
1950
|
+
* Defines the logic action value through evaluation.
|
|
1951
|
+
* @param {object} action - The action within the Logic system to perform.
|
|
1952
|
+
* @param {object} argsObject - The arguments to pass to the evaluation.
|
|
1953
|
+
* @returns {any} - The result of the evaluation.
|
|
1954
|
+
*/
|
|
1715
1955
|
defineActionValue(action, argsObject) {
|
|
1716
1956
|
return this.evaluate(action.value, argsObject, 'value');
|
|
1717
1957
|
}
|
|
1958
|
+
/**
|
|
1959
|
+
* Apply the actions of Logic for a component once the conditions have been met.
|
|
1960
|
+
* @param {object} newComponent - The new component to apply the actions to.
|
|
1961
|
+
* @param {Array<object>} actions - An array of actions
|
|
1962
|
+
* @param {any} result - The result of the conditional check in order to evaluate the actions.
|
|
1963
|
+
* @param {any} row - The contextual row data for this component.
|
|
1964
|
+
* @param {any} data - The global data object for the submission.
|
|
1965
|
+
* @returns {boolean} - TRUE if the component was altered.
|
|
1966
|
+
*/
|
|
1718
1967
|
applyActions(newComponent, actions, result, row, data) {
|
|
1719
1968
|
data = data || this.rootValue;
|
|
1720
1969
|
row = row || this.data;
|
|
@@ -1794,8 +2043,8 @@ export default class Component extends Element {
|
|
|
1794
2043
|
}
|
|
1795
2044
|
/**
|
|
1796
2045
|
* Add a new input error to this element.
|
|
1797
|
-
*
|
|
1798
|
-
* @
|
|
2046
|
+
* @param {Array<object>|string} messages - An array of messages to add to the element.
|
|
2047
|
+
* @returns {void}
|
|
1799
2048
|
*/
|
|
1800
2049
|
addMessages(messages) {
|
|
1801
2050
|
if (!messages) {
|
|
@@ -1818,6 +2067,15 @@ export default class Component extends Element {
|
|
|
1818
2067
|
}).join(''));
|
|
1819
2068
|
}
|
|
1820
2069
|
}
|
|
2070
|
+
/**
|
|
2071
|
+
* Sets the form input widget error classes.
|
|
2072
|
+
* @param {Array<HTMLElement>} elements - An array of DOM elements to set the error classes on.
|
|
2073
|
+
* @param {boolean} dirty - If the input is dirty.
|
|
2074
|
+
* @param {boolean} hasErrors - If the input has errors.
|
|
2075
|
+
* @param {boolean} hasMessages - If the input has messages.
|
|
2076
|
+
* @param {HTMLElement} element - The wrapper element for all the other elements passed in first argument.
|
|
2077
|
+
* @returns {void}
|
|
2078
|
+
*/
|
|
1821
2079
|
setErrorClasses(elements, dirty, hasErrors, hasMessages, element = this.element) {
|
|
1822
2080
|
this.clearErrorClasses();
|
|
1823
2081
|
elements.forEach((element) => {
|
|
@@ -1844,6 +2102,12 @@ export default class Component extends Element {
|
|
|
1844
2102
|
this.addClass(element, 'has-message');
|
|
1845
2103
|
}
|
|
1846
2104
|
}
|
|
2105
|
+
/**
|
|
2106
|
+
* Adds the classes necessary to mark an element as invalid.
|
|
2107
|
+
* @param {HTMLElement} element - The element you wish to add the invalid classes to.
|
|
2108
|
+
* @param {boolean} invalid - TRUE if the component is invalid, FALSE otherwise.
|
|
2109
|
+
* @returns {void}
|
|
2110
|
+
*/
|
|
1847
2111
|
setElementInvalid(element, invalid) {
|
|
1848
2112
|
if (!element)
|
|
1849
2113
|
return;
|
|
@@ -1855,6 +2119,9 @@ export default class Component extends Element {
|
|
|
1855
2119
|
}
|
|
1856
2120
|
element.setAttribute('aria-invalid', invalid ? 'true' : 'false');
|
|
1857
2121
|
}
|
|
2122
|
+
/**
|
|
2123
|
+
* Clears the components data if it is conditionally hidden AND clearOnHide is set to true for this component.
|
|
2124
|
+
*/
|
|
1858
2125
|
clearOnHide() {
|
|
1859
2126
|
// clearOnHide defaults to true for old forms (without the value set) so only trigger if the value is false.
|
|
1860
2127
|
if (
|
|
@@ -1874,6 +2141,10 @@ export default class Component extends Element {
|
|
|
1874
2141
|
}
|
|
1875
2142
|
}
|
|
1876
2143
|
}
|
|
2144
|
+
/**
|
|
2145
|
+
* Triggers a debounced onChange event for the root component (usually Webform).
|
|
2146
|
+
* @param {...any} args - The arguments to pass to the onChange event.
|
|
2147
|
+
*/
|
|
1877
2148
|
triggerRootChange(...args) {
|
|
1878
2149
|
if (this.options.onChange) {
|
|
1879
2150
|
this.options.onChange(...args);
|
|
@@ -1882,6 +2153,13 @@ export default class Component extends Element {
|
|
|
1882
2153
|
this.root.triggerChange(...args);
|
|
1883
2154
|
}
|
|
1884
2155
|
}
|
|
2156
|
+
/**
|
|
2157
|
+
* Called when the component value has been changed. This will then trigger the root level onChange handler which
|
|
2158
|
+
* propagates the checkData methods for the full component tree.
|
|
2159
|
+
* @param {any} flags - The flags for the change event propagation.
|
|
2160
|
+
* @param {boolean} fromRoot - If the change event is from the root component.
|
|
2161
|
+
* @returns {boolean} - TRUE if the component has changed.
|
|
2162
|
+
*/
|
|
1885
2163
|
onChange(flags, fromRoot) {
|
|
1886
2164
|
flags = flags || {};
|
|
1887
2165
|
if (flags.modified) {
|
|
@@ -2017,7 +2295,7 @@ export default class Component extends Element {
|
|
|
2017
2295
|
return Promise.reject();
|
|
2018
2296
|
}
|
|
2019
2297
|
this.quill = new Quill(element, isIEBrowser ? { ...settings, modules: {} } : settings);
|
|
2020
|
-
/** This block of code adds the [source] capabilities. See https://codepen.io/anon/pen/ZyEjrQ
|
|
2298
|
+
/** This block of code adds the [source] capabilities. See https://codepen.io/anon/pen/ZyEjrQ */
|
|
2021
2299
|
const txtArea = document.createElement('textarea');
|
|
2022
2300
|
txtArea.setAttribute('class', 'quill-source-code');
|
|
2023
2301
|
this.quill.addContainer('ql-custom').appendChild(txtArea);
|
|
@@ -2031,7 +2309,7 @@ export default class Component extends Element {
|
|
|
2031
2309
|
txtArea.style.display = (txtArea.style.display === 'none') ? 'inherit' : 'none';
|
|
2032
2310
|
});
|
|
2033
2311
|
}
|
|
2034
|
-
/** END CODEBLOCK
|
|
2312
|
+
/** END CODEBLOCK */
|
|
2035
2313
|
// Make sure to select cursor when they click on the element.
|
|
2036
2314
|
this.addEventListener(element, 'click', () => this.quill.focus());
|
|
2037
2315
|
// Allows users to skip toolbar items when tabbing though form
|
|
@@ -2078,23 +2356,22 @@ export default class Component extends Element {
|
|
|
2078
2356
|
}
|
|
2079
2357
|
/**
|
|
2080
2358
|
* The empty value for this component.
|
|
2081
|
-
*
|
|
2082
|
-
* @return {null}
|
|
2359
|
+
* @returns {null} - The empty value for this component.
|
|
2083
2360
|
*/
|
|
2084
2361
|
get emptyValue() {
|
|
2085
2362
|
return null;
|
|
2086
2363
|
}
|
|
2087
2364
|
/**
|
|
2088
2365
|
* Returns if this component has a value set.
|
|
2089
|
-
*
|
|
2366
|
+
* @param {any} data - The global data object.
|
|
2367
|
+
* @returns {boolean} - TRUE if a value is set.
|
|
2090
2368
|
*/
|
|
2091
2369
|
hasValue(data) {
|
|
2092
2370
|
return !_.isUndefined(_.get(data || this.data, this.key));
|
|
2093
2371
|
}
|
|
2094
2372
|
/**
|
|
2095
2373
|
* Get the data value at the root level.
|
|
2096
|
-
*
|
|
2097
|
-
* @return {*}
|
|
2374
|
+
* @returns {*} - The root value for the component, typically the Webform data object.
|
|
2098
2375
|
*/
|
|
2099
2376
|
get rootValue() {
|
|
2100
2377
|
return this.root ? this.root.data : this.data;
|
|
@@ -2104,7 +2381,7 @@ export default class Component extends Element {
|
|
|
2104
2381
|
}
|
|
2105
2382
|
/**
|
|
2106
2383
|
* Get the static value of this component.
|
|
2107
|
-
* @
|
|
2384
|
+
* @returns {*} - The value for this component.
|
|
2108
2385
|
*/
|
|
2109
2386
|
get dataValue() {
|
|
2110
2387
|
if (!this.key ||
|
|
@@ -2122,8 +2399,7 @@ export default class Component extends Element {
|
|
|
2122
2399
|
}
|
|
2123
2400
|
/**
|
|
2124
2401
|
* Sets the static value of this component.
|
|
2125
|
-
*
|
|
2126
|
-
* @param value
|
|
2402
|
+
* @param {*} value - The value to set for this component.
|
|
2127
2403
|
*/
|
|
2128
2404
|
set dataValue(value) {
|
|
2129
2405
|
if (!this.allowData ||
|
|
@@ -2143,8 +2419,8 @@ export default class Component extends Element {
|
|
|
2143
2419
|
}
|
|
2144
2420
|
/**
|
|
2145
2421
|
* Splice a value from the dataValue.
|
|
2146
|
-
*
|
|
2147
|
-
* @param
|
|
2422
|
+
* @param {number} index - The index to splice for an array component values.
|
|
2423
|
+
* @param {*} flags - The flags to use when splicing the value.
|
|
2148
2424
|
*/
|
|
2149
2425
|
splice(index, flags = {}) {
|
|
2150
2426
|
if (this.hasValue()) {
|
|
@@ -2212,8 +2488,7 @@ export default class Component extends Element {
|
|
|
2212
2488
|
}
|
|
2213
2489
|
/**
|
|
2214
2490
|
* Get the input value of this component.
|
|
2215
|
-
*
|
|
2216
|
-
* @return {*}
|
|
2491
|
+
* @returns {*} - The value for the component.
|
|
2217
2492
|
*/
|
|
2218
2493
|
getValue() {
|
|
2219
2494
|
if (!this.hasInput || this.viewOnly || !this.refs.input || !this.refs.input.length) {
|
|
@@ -2235,9 +2510,8 @@ export default class Component extends Element {
|
|
|
2235
2510
|
}
|
|
2236
2511
|
/**
|
|
2237
2512
|
* Get the value at a specific index.
|
|
2238
|
-
*
|
|
2239
|
-
* @
|
|
2240
|
-
* @returns {*}
|
|
2513
|
+
* @param {number} index - For an array component or multiple values, this returns the value at a specific index.
|
|
2514
|
+
* @returns {*} - The value at the specified index.
|
|
2241
2515
|
*/
|
|
2242
2516
|
getValueAt(index) {
|
|
2243
2517
|
const input = this.performInputMapping(this.refs.input[index]);
|
|
@@ -2245,11 +2519,9 @@ export default class Component extends Element {
|
|
|
2245
2519
|
}
|
|
2246
2520
|
/**
|
|
2247
2521
|
* Set the value of this component.
|
|
2248
|
-
*
|
|
2249
|
-
* @param value
|
|
2250
|
-
* @
|
|
2251
|
-
*
|
|
2252
|
-
* @return {boolean} - If the value changed.
|
|
2522
|
+
* @param {*} value - The value to set for this component.
|
|
2523
|
+
* @param {*} flags - The flags to use when setting the value.
|
|
2524
|
+
* @returns {boolean} - If the value changed.
|
|
2253
2525
|
*/
|
|
2254
2526
|
setValue(value, flags = {}) {
|
|
2255
2527
|
const changed = this.updateValue(value, flags);
|
|
@@ -2280,9 +2552,9 @@ export default class Component extends Element {
|
|
|
2280
2552
|
}
|
|
2281
2553
|
/**
|
|
2282
2554
|
* Set the value at a specific index.
|
|
2283
|
-
*
|
|
2284
|
-
* @param index
|
|
2285
|
-
* @param value
|
|
2555
|
+
* @param {number} index - The index to set the value at.
|
|
2556
|
+
* @param {*} value - The value to set at the specified index.
|
|
2557
|
+
* @param {*} flags - The flags to use when setting the value.
|
|
2286
2558
|
*/
|
|
2287
2559
|
setValueAt(index, value, flags = {}) {
|
|
2288
2560
|
if (!flags.noDefault && (value === null || value === undefined) && !this.component.multiple) {
|
|
@@ -2329,9 +2601,8 @@ export default class Component extends Element {
|
|
|
2329
2601
|
}
|
|
2330
2602
|
/**
|
|
2331
2603
|
* Normalize values coming into updateValue.
|
|
2332
|
-
*
|
|
2333
|
-
* @
|
|
2334
|
-
* @return {*}
|
|
2604
|
+
* @param {*} value - The value to normalize before setting.
|
|
2605
|
+
* @returns {*} - The normalized value.
|
|
2335
2606
|
*/
|
|
2336
2607
|
normalizeValue(value) {
|
|
2337
2608
|
if (this.component.multiple && !Array.isArray(value)) {
|
|
@@ -2341,8 +2612,9 @@ export default class Component extends Element {
|
|
|
2341
2612
|
}
|
|
2342
2613
|
/**
|
|
2343
2614
|
* Update a value of this component.
|
|
2344
|
-
*
|
|
2345
|
-
* @param flags
|
|
2615
|
+
* @param {*} value - The value to update.
|
|
2616
|
+
* @param {*} flags - The flags to use when updating the value.
|
|
2617
|
+
* @returns {boolean} - If the value changed.
|
|
2346
2618
|
*/
|
|
2347
2619
|
updateComponentValue(value, flags = {}) {
|
|
2348
2620
|
let newValue = (!flags.resetValue && (value === undefined || value === null)) ? this.getValue() : value;
|
|
@@ -2361,9 +2633,8 @@ export default class Component extends Element {
|
|
|
2361
2633
|
}
|
|
2362
2634
|
/**
|
|
2363
2635
|
* Updates the value of this component plus all sub-components.
|
|
2364
|
-
*
|
|
2365
|
-
* @
|
|
2366
|
-
* @return {boolean}
|
|
2636
|
+
* @param {...any} args - The arguments to pass to updateValue.
|
|
2637
|
+
* @returns {boolean} - If the value changed.
|
|
2367
2638
|
*/
|
|
2368
2639
|
updateValue(...args) {
|
|
2369
2640
|
return this.updateComponentValue(...args);
|
|
@@ -2381,7 +2652,7 @@ export default class Component extends Element {
|
|
|
2381
2652
|
*/
|
|
2382
2653
|
resetValue() {
|
|
2383
2654
|
this.unset();
|
|
2384
|
-
this.setValue(this.emptyValue, {
|
|
2655
|
+
this.setValue(this.defaultValue || this.emptyValue, {
|
|
2385
2656
|
noUpdateEvent: true,
|
|
2386
2657
|
noValidate: true,
|
|
2387
2658
|
resetValue: true
|
|
@@ -2389,10 +2660,9 @@ export default class Component extends Element {
|
|
|
2389
2660
|
}
|
|
2390
2661
|
/**
|
|
2391
2662
|
* Determine if the value of this component has changed.
|
|
2392
|
-
*
|
|
2393
|
-
* @param
|
|
2394
|
-
* @
|
|
2395
|
-
* @return {boolean}
|
|
2663
|
+
* @param {*} newValue - The new value to check.
|
|
2664
|
+
* @param {*} oldValue - The existing value of the component.
|
|
2665
|
+
* @returns {boolean} - TRUE if the value has changed.
|
|
2396
2666
|
*/
|
|
2397
2667
|
hasChanged(newValue, oldValue) {
|
|
2398
2668
|
if (((newValue === undefined) || (newValue === null)) &&
|
|
@@ -2410,8 +2680,9 @@ export default class Component extends Element {
|
|
|
2410
2680
|
}
|
|
2411
2681
|
/**
|
|
2412
2682
|
* Update the value on change.
|
|
2413
|
-
*
|
|
2414
|
-
* @param
|
|
2683
|
+
* @param {*} flags - The flags to use when triggering the on change event.
|
|
2684
|
+
* @param {boolean} changed - If the value has changed.
|
|
2685
|
+
* @returns {boolean} - If the value changed.
|
|
2415
2686
|
*/
|
|
2416
2687
|
updateOnChange(flags = {}, changed = false) {
|
|
2417
2688
|
if (!flags.noUpdateEvent && changed) {
|
|
@@ -2424,13 +2695,6 @@ export default class Component extends Element {
|
|
|
2424
2695
|
}
|
|
2425
2696
|
return false;
|
|
2426
2697
|
}
|
|
2427
|
-
/**
|
|
2428
|
-
* Perform a calculated value operation.
|
|
2429
|
-
*
|
|
2430
|
-
* @param data - The global data object.
|
|
2431
|
-
*
|
|
2432
|
-
* @return {boolean} - If the value changed during calculation.
|
|
2433
|
-
*/
|
|
2434
2698
|
convertNumberOrBoolToString(value) {
|
|
2435
2699
|
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
2436
2700
|
return value.toString();
|
|
@@ -2527,7 +2791,7 @@ export default class Component extends Element {
|
|
|
2527
2791
|
}
|
|
2528
2792
|
this.calculatedValue = fastCloneDeep(calculatedValue);
|
|
2529
2793
|
if (changed) {
|
|
2530
|
-
if (!flags.noPristineChangeOnModified) {
|
|
2794
|
+
if (!flags.noPristineChangeOnModified && this.root.initialized) {
|
|
2531
2795
|
this.pristine = false;
|
|
2532
2796
|
}
|
|
2533
2797
|
flags.triggeredComponentId = this.id;
|
|
@@ -2538,9 +2802,10 @@ export default class Component extends Element {
|
|
|
2538
2802
|
/* eslint-enable max-statements */
|
|
2539
2803
|
/**
|
|
2540
2804
|
* Performs calculations in this component plus any child components.
|
|
2541
|
-
*
|
|
2542
|
-
* @param
|
|
2543
|
-
* @
|
|
2805
|
+
* @param {*} data - The data to perform the calculation with.
|
|
2806
|
+
* @param {*} flags - The flags to use when calculating the value.
|
|
2807
|
+
* @param {*} row - The contextual row data to use when performing the calculation.
|
|
2808
|
+
* @returns {boolean} - TRUE if the value changed.
|
|
2544
2809
|
*/
|
|
2545
2810
|
calculateValue(data, flags, row) {
|
|
2546
2811
|
data = data || this.rootValue;
|
|
@@ -2550,15 +2815,14 @@ export default class Component extends Element {
|
|
|
2550
2815
|
}
|
|
2551
2816
|
/**
|
|
2552
2817
|
* Get this component's label text.
|
|
2553
|
-
*
|
|
2818
|
+
* @returns {string} - The label text for this component.
|
|
2554
2819
|
*/
|
|
2555
2820
|
get label() {
|
|
2556
2821
|
return this.component.label;
|
|
2557
2822
|
}
|
|
2558
2823
|
/**
|
|
2559
2824
|
* Set this component's label text and render it.
|
|
2560
|
-
*
|
|
2561
|
-
* @param value - The new label text.
|
|
2825
|
+
* @param {string} value - The new label text.
|
|
2562
2826
|
*/
|
|
2563
2827
|
set label(value) {
|
|
2564
2828
|
this.component.label = value;
|
|
@@ -2568,17 +2832,18 @@ export default class Component extends Element {
|
|
|
2568
2832
|
}
|
|
2569
2833
|
/**
|
|
2570
2834
|
* Get FormioForm element at the root of this component tree.
|
|
2571
|
-
*
|
|
2835
|
+
* @returns {*} root - The root component to search from.
|
|
2572
2836
|
*/
|
|
2573
2837
|
getRoot() {
|
|
2574
2838
|
return this.root;
|
|
2575
2839
|
}
|
|
2576
2840
|
/**
|
|
2577
2841
|
* Returns the invalid message, or empty string if the component is valid.
|
|
2578
|
-
*
|
|
2579
|
-
* @param
|
|
2580
|
-
* @param
|
|
2581
|
-
* @
|
|
2842
|
+
* @param {*} data - The data to check if the component is valid.
|
|
2843
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
2844
|
+
* @param {boolean} ignoreCondition - If conditions for the component should be ignored when checking validity.
|
|
2845
|
+
* @param {*} row - Contextual row data for this component.
|
|
2846
|
+
* @returns {string} - The message to show when the component is invalid.
|
|
2582
2847
|
*/
|
|
2583
2848
|
invalidMessage(data, dirty, ignoreCondition, row) {
|
|
2584
2849
|
if (!ignoreCondition && !this.checkCondition(row, data)) {
|
|
@@ -2610,10 +2875,9 @@ export default class Component extends Element {
|
|
|
2610
2875
|
}
|
|
2611
2876
|
/**
|
|
2612
2877
|
* Returns if the component is valid or not.
|
|
2613
|
-
*
|
|
2614
|
-
* @param
|
|
2615
|
-
* @
|
|
2616
|
-
* @return {boolean}
|
|
2878
|
+
* @param {*} data - The data to check if the component is valid.
|
|
2879
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
2880
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
2617
2881
|
*/
|
|
2618
2882
|
isValid(data, dirty) {
|
|
2619
2883
|
return !this.invalidMessage(data, dirty);
|
|
@@ -2632,8 +2896,8 @@ export default class Component extends Element {
|
|
|
2632
2896
|
}
|
|
2633
2897
|
/**
|
|
2634
2898
|
* Interpolate errors from the validation methods.
|
|
2635
|
-
* @param {
|
|
2636
|
-
* @returns
|
|
2899
|
+
* @param {Array<any>} errors - An array of errors to interpolate.
|
|
2900
|
+
* @returns {Array<any>} - The interpolated errors.
|
|
2637
2901
|
*/
|
|
2638
2902
|
interpolateErrors(errors) {
|
|
2639
2903
|
const interpolatedErrors = FormioUtils.interpolateErrors(this.component, errors, this.t.bind(this));
|
|
@@ -2645,7 +2909,7 @@ export default class Component extends Element {
|
|
|
2645
2909
|
* @param {*} data - The root submission data.
|
|
2646
2910
|
* @param {*} row - The contextual row data.
|
|
2647
2911
|
* @param {*} flags - The flags to perform validation.
|
|
2648
|
-
* @returns
|
|
2912
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
2649
2913
|
*/
|
|
2650
2914
|
showValidationErrors(errors, data, row, flags) {
|
|
2651
2915
|
if (flags.silentCheck) {
|
|
@@ -2665,9 +2929,9 @@ export default class Component extends Element {
|
|
|
2665
2929
|
* @param {*} data - The root data you wish to use for this component.
|
|
2666
2930
|
* @param {*} row - The contextual row data you wish to use for this component.
|
|
2667
2931
|
* @param {*} flags - The flags to control the behavior of the validation.
|
|
2668
|
-
* @returns
|
|
2932
|
+
* @returns {Array<any>} - An array of errors if the component is invalid.
|
|
2669
2933
|
*/
|
|
2670
|
-
validateComponent(data, row, flags = {}) {
|
|
2934
|
+
validateComponent(data = null, row = null, flags = {}) {
|
|
2671
2935
|
data = data || this.rootValue;
|
|
2672
2936
|
row = row || this.data;
|
|
2673
2937
|
const { async = false } = flags;
|
|
@@ -2698,13 +2962,14 @@ export default class Component extends Element {
|
|
|
2698
2962
|
}
|
|
2699
2963
|
/**
|
|
2700
2964
|
* Checks the validity of this component and sets the error message if it is invalid.
|
|
2701
|
-
*
|
|
2702
|
-
* @param
|
|
2703
|
-
* @param
|
|
2704
|
-
* @param
|
|
2705
|
-
* @
|
|
2706
|
-
|
|
2707
|
-
|
|
2965
|
+
* @param {*} data - The data to check if the component is valid.
|
|
2966
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
2967
|
+
* @param {*} row - The contextual row data for this component.
|
|
2968
|
+
* @param {*} flags - The flags to use when checking the validity.
|
|
2969
|
+
* @param {Array<any>} allErrors - An array of all errors that have occured so that it can be appended when another one occurs here.
|
|
2970
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
2971
|
+
*/
|
|
2972
|
+
checkComponentValidity(data = null, dirty = false, row = null, flags = {}, allErrors = []) {
|
|
2708
2973
|
data = data || this.rootValue;
|
|
2709
2974
|
row = row || this.data;
|
|
2710
2975
|
flags.dirty = dirty || false;
|
|
@@ -2740,32 +3005,30 @@ export default class Component extends Element {
|
|
|
2740
3005
|
}
|
|
2741
3006
|
/**
|
|
2742
3007
|
* Checks the validity of the component.
|
|
2743
|
-
* @param {*} data
|
|
2744
|
-
* @param {
|
|
2745
|
-
* @param {*} row
|
|
2746
|
-
* @param {
|
|
2747
|
-
* @
|
|
2748
|
-
|
|
2749
|
-
|
|
3008
|
+
* @param {*} data - The data to check if the component is valid.
|
|
3009
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
3010
|
+
* @param {*} row - The contextual row data for this component.
|
|
3011
|
+
* @param {boolean} silentCheck - If the check should be silent and not set the error messages.
|
|
3012
|
+
* @param {Array<any>} errors - An array of all errors that have occured so that it can be appended when another one occurs here.
|
|
3013
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
3014
|
+
*/
|
|
3015
|
+
checkValidity(data = null, dirty = false, row = null, silentCheck = false, errors = []) {
|
|
2750
3016
|
data = data || this.rootValue;
|
|
2751
3017
|
row = row || this.data;
|
|
2752
|
-
console.log('Deprecation warning: Component.checkValidity() will be deprecated in 6.x version of renderer. Use Component.validateComponent instead.');
|
|
2753
3018
|
return this.checkComponentValidity(data, dirty, row, { silentCheck }, errors);
|
|
2754
3019
|
}
|
|
2755
|
-
checkAsyncValidity(data, dirty, row, silentCheck, errors = []) {
|
|
2756
|
-
console.log('Deprecation warning: Component.checkAsyncValidity() will be deprecated in 6.x version of renderer. Use Component.validateComponent instead.');
|
|
3020
|
+
checkAsyncValidity(data = null, dirty = false, row = null, silentCheck = false, errors = []) {
|
|
2757
3021
|
return this.checkComponentValidity(data, dirty, row, { async: true, silentCheck }, errors);
|
|
2758
3022
|
}
|
|
2759
3023
|
/**
|
|
2760
3024
|
* Check the conditions, calculations, and validity of a single component and triggers an update if
|
|
2761
3025
|
* something changed.
|
|
2762
|
-
*
|
|
2763
|
-
* @param
|
|
2764
|
-
* @param
|
|
2765
|
-
*
|
|
2766
|
-
* @return boolean - If component is valid or not.
|
|
3026
|
+
* @param {*} data - The root data of the change event.
|
|
3027
|
+
* @param {*} flags - The flags from this change event.
|
|
3028
|
+
* @param {*} row - The contextual row data for this component.
|
|
3029
|
+
* @returns {void|boolean} - TRUE if no check should be performed on the component.
|
|
2767
3030
|
*/
|
|
2768
|
-
checkData(data, flags, row) {
|
|
3031
|
+
checkData(data = null, flags = null, row = null) {
|
|
2769
3032
|
data = data || this.rootValue;
|
|
2770
3033
|
flags = flags || {};
|
|
2771
3034
|
row = row || this.data;
|
|
@@ -2808,8 +3071,7 @@ export default class Component extends Element {
|
|
|
2808
3071
|
}
|
|
2809
3072
|
/**
|
|
2810
3073
|
* Check if a component is eligible for multiple validation
|
|
2811
|
-
*
|
|
2812
|
-
* @return {boolean}
|
|
3074
|
+
* @returns {boolean} - TRUE if the component is eligible for multiple validation.
|
|
2813
3075
|
*/
|
|
2814
3076
|
validateMultiple() {
|
|
2815
3077
|
return true;
|
|
@@ -2927,8 +3189,7 @@ export default class Component extends Element {
|
|
|
2927
3189
|
/**
|
|
2928
3190
|
* Determines if the value of this component is hidden from the user as if it is coming from the server, but is
|
|
2929
3191
|
* protected.
|
|
2930
|
-
*
|
|
2931
|
-
* @return {boolean|*}
|
|
3192
|
+
* @returns {boolean|*} - TRUE if the value is hidden.
|
|
2932
3193
|
*/
|
|
2933
3194
|
isValueHidden() {
|
|
2934
3195
|
if (this.component.protected && this.root.editing) {
|
|
@@ -2973,6 +3234,8 @@ export default class Component extends Element {
|
|
|
2973
3234
|
}
|
|
2974
3235
|
/**
|
|
2975
3236
|
* Prints out the value of this component as a string value.
|
|
3237
|
+
* @param {*} value - The value to print out.
|
|
3238
|
+
* @returns {string} - The string representation of the value.
|
|
2976
3239
|
*/
|
|
2977
3240
|
asString(value) {
|
|
2978
3241
|
value = value || this.getValue();
|
|
@@ -2980,15 +3243,14 @@ export default class Component extends Element {
|
|
|
2980
3243
|
}
|
|
2981
3244
|
/**
|
|
2982
3245
|
* Return if the component is disabled.
|
|
2983
|
-
* @
|
|
3246
|
+
* @returns {boolean} - TRUE if the component is disabled.
|
|
2984
3247
|
*/
|
|
2985
3248
|
get disabled() {
|
|
2986
3249
|
return this._disabled || this.parentDisabled;
|
|
2987
3250
|
}
|
|
2988
3251
|
/**
|
|
2989
3252
|
* Disable this component.
|
|
2990
|
-
*
|
|
2991
|
-
* @param {boolean} disabled
|
|
3253
|
+
* @param {boolean} disabled - TRUE to disable the component.
|
|
2992
3254
|
*/
|
|
2993
3255
|
set disabled(disabled) {
|
|
2994
3256
|
this._disabled = disabled;
|
|
@@ -3099,6 +3361,10 @@ export default class Component extends Element {
|
|
|
3099
3361
|
const disabled = this.shouldDisabled;
|
|
3100
3362
|
// Change states which won't be recalculated during redrawing
|
|
3101
3363
|
if (this.visible !== visible) {
|
|
3364
|
+
// If the logic is triggered by an event and the action sets the hidden state then the original
|
|
3365
|
+
// component definition must be changed so that the components hidden state does not get flipped back by
|
|
3366
|
+
// the fieldLogic function
|
|
3367
|
+
this.originalComponent.hidden = !visible;
|
|
3102
3368
|
this.visible = visible;
|
|
3103
3369
|
}
|
|
3104
3370
|
if (this.disabled !== disabled) {
|
|
@@ -3113,6 +3379,7 @@ export default class Component extends Element {
|
|
|
3113
3379
|
}
|
|
3114
3380
|
/**
|
|
3115
3381
|
* Get the element information.
|
|
3382
|
+
* @returns {*} - The components "input" DOM element information.
|
|
3116
3383
|
*/
|
|
3117
3384
|
elementInfo() {
|
|
3118
3385
|
const attributes = {
|
|
@@ -3151,14 +3418,12 @@ export default class Component extends Element {
|
|
|
3151
3418
|
const { left, top } = element.getBoundingClientRect();
|
|
3152
3419
|
window.scrollTo(left + window.scrollX, top + window.scrollY);
|
|
3153
3420
|
}
|
|
3154
|
-
focus(index) {
|
|
3421
|
+
focus(index = (this.refs.input.length - 1)) {
|
|
3155
3422
|
if ('beforeFocus' in this.parent) {
|
|
3156
3423
|
this.parent.beforeFocus(this);
|
|
3157
3424
|
}
|
|
3158
3425
|
if (this.refs.input?.length) {
|
|
3159
|
-
const focusingInput =
|
|
3160
|
-
? this.refs.input[index]
|
|
3161
|
-
: this.refs.input[this.refs.input.length - 1];
|
|
3426
|
+
const focusingInput = this.refs.input[index];
|
|
3162
3427
|
if (this.component.widget?.type === 'calendar') {
|
|
3163
3428
|
const sibling = focusingInput.nextSibling;
|
|
3164
3429
|
if (sibling) {
|
|
@@ -3178,6 +3443,7 @@ export default class Component extends Element {
|
|
|
3178
3443
|
}
|
|
3179
3444
|
/**
|
|
3180
3445
|
* Get `Formio` instance for working with files
|
|
3446
|
+
* @returns {import('@formio/core').Formio} - The Formio instance file service.
|
|
3181
3447
|
*/
|
|
3182
3448
|
get fileService() {
|
|
3183
3449
|
if (this.options.fileService) {
|