@formio/js 5.0.0-dev.5604.02ffada → 5.0.0-dev.5610.11a9aca
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Changelog.md +1 -0
- package/dist/formio.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.js +641 -1189
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +3 -11
- package/dist/formio.full.js +685 -913
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +3 -11
- package/dist/formio.js +16 -16
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +1 -1
- package/dist/formio.utils.js +1855 -487
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +12 -2
- package/embed.d.ts +1 -0
- package/form.d.ts +1 -0
- package/lib/cjs/Element.d.ts +85 -96
- package/lib/cjs/Element.js +65 -76
- 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/InlineEmbed.d.ts +7 -0
- package/lib/cjs/InlineEmbed.js +109 -0
- package/lib/cjs/PDF.d.ts +11 -13
- package/lib/cjs/PDF.js +6 -8
- package/lib/cjs/Webform.d.ts +180 -139
- package/lib/cjs/Webform.js +313 -298
- package/lib/cjs/WebformBuilder.d.ts +16 -14
- package/lib/cjs/WebformBuilder.js +11 -10
- package/lib/cjs/Wizard.d.ts +31 -21
- package/lib/cjs/Wizard.js +42 -19
- 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 +501 -266
- 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 +433 -190
- package/lib/cjs/components/_classes/component/editForm/Component.edit.display.js +0 -8
- 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/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 +2 -2
- 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 +37 -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/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 +4 -27
- 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/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 +8 -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 +5 -5
- 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 +22 -48
- 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 +15 -20
- 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 +3 -3
- 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/form/Form.d.ts +31 -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 +13 -10
- 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 +1 -2
- 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/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 +3 -4
- package/lib/cjs/components/recaptcha/ReCaptcha.d.ts +1 -1
- package/lib/cjs/components/recaptcha/ReCaptcha.form.d.ts +5 -3
- package/lib/cjs/components/recaptcha/ReCaptcha.form.js +4 -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 +13 -16
- 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 +1 -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/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 +13 -16
- 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 +130 -6
- package/lib/cjs/providers/address/GoogleAddressProvider.js +72 -0
- 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/utils/Evaluator.d.ts +7 -3
- package/lib/cjs/utils/Evaluator.js +12 -18
- 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/formUtils.d.ts +43 -171
- package/lib/cjs/utils/formUtils.js +38 -569
- package/lib/cjs/utils/utils.d.ts +361 -216
- package/lib/cjs/utils/utils.js +329 -169
- package/lib/cjs/widgets/CalendarWidget.d.ts +9 -10
- package/lib/cjs/widgets/CalendarWidget.js +9 -11
- package/lib/mjs/Element.d.ts +85 -96
- package/lib/mjs/Element.js +65 -76
- 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/InlineEmbed.d.ts +7 -0
- package/lib/mjs/InlineEmbed.js +105 -0
- package/lib/mjs/PDF.d.ts +11 -13
- package/lib/mjs/PDF.js +6 -8
- package/lib/mjs/Webform.d.ts +180 -139
- package/lib/mjs/Webform.js +325 -310
- package/lib/mjs/WebformBuilder.d.ts +16 -14
- package/lib/mjs/WebformBuilder.js +11 -10
- package/lib/mjs/Wizard.d.ts +31 -21
- package/lib/mjs/Wizard.js +41 -18
- 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 +501 -266
- 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 +433 -190
- package/lib/mjs/components/_classes/component/editForm/Component.edit.display.js +0 -8
- 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/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 +2 -2
- 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 +37 -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/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 +4 -27
- 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/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 +8 -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 +5 -5
- 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 +22 -48
- 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 +15 -20
- 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 +3 -3
- 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/form/Form.d.ts +31 -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 +13 -10
- 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 +1 -2
- 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/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 +3 -4
- package/lib/mjs/components/recaptcha/ReCaptcha.d.ts +1 -1
- package/lib/mjs/components/recaptcha/ReCaptcha.form.d.ts +5 -3
- package/lib/mjs/components/recaptcha/ReCaptcha.form.js +4 -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 +13 -16
- 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 +1 -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/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 +13 -16
- 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 +130 -6
- package/lib/mjs/providers/address/GoogleAddressProvider.js +72 -0
- 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/utils/Evaluator.d.ts +7 -3
- package/lib/mjs/utils/Evaluator.js +10 -18
- 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/formUtils.d.ts +43 -171
- package/lib/mjs/utils/formUtils.js +6 -554
- package/lib/mjs/utils/utils.d.ts +361 -216
- package/lib/mjs/utils/utils.js +321 -161
- package/lib/mjs/widgets/CalendarWidget.d.ts +9 -10
- package/lib/mjs/widgets/CalendarWidget.js +9 -11
- package/package.json +22 -22
- 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,9 +1006,17 @@ 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
|
+
* Returns the modal preview template.
|
|
1018
|
+
* @returns {string} - The modal preview template.
|
|
1019
|
+
*/
|
|
999
1020
|
getModalPreviewTemplate() {
|
|
1000
1021
|
const dataValue = this.component.type === 'password' ? this.dataValue.replace(/./g, '•') : this.dataValue;
|
|
1001
1022
|
let modalLabel;
|
|
@@ -1008,6 +1029,11 @@ export default class Component extends Element {
|
|
|
1008
1029
|
labelInfo: modalLabel,
|
|
1009
1030
|
});
|
|
1010
1031
|
}
|
|
1032
|
+
/**
|
|
1033
|
+
* Performs a complete build of a component, which empties, renders, sets the content in the DOM, and then finally attaches events.
|
|
1034
|
+
* @param {HTMLElement} element - The element to attach this component to.
|
|
1035
|
+
* @returns {Promise<void>} - A promise that resolves when the component has been built.
|
|
1036
|
+
*/
|
|
1011
1037
|
build(element) {
|
|
1012
1038
|
element = element || this.element;
|
|
1013
1039
|
this.empty(element);
|
|
@@ -1017,6 +1043,12 @@ export default class Component extends Element {
|
|
|
1017
1043
|
get hasModalSaveButton() {
|
|
1018
1044
|
return true;
|
|
1019
1045
|
}
|
|
1046
|
+
/**
|
|
1047
|
+
* Renders a component as an HTML string.
|
|
1048
|
+
* @param {string} children - The contents of all the children HTML as a string.
|
|
1049
|
+
* @param {boolean} topLevel - If this is the topmost component that is being rendered.
|
|
1050
|
+
* @returns {string} - The rendered HTML string of a component.
|
|
1051
|
+
*/
|
|
1020
1052
|
render(children = `Unknown component: ${this.component.type}`, topLevel = false) {
|
|
1021
1053
|
const isVisible = this.visible;
|
|
1022
1054
|
this.rendered = true;
|
|
@@ -1040,6 +1072,11 @@ export default class Component extends Element {
|
|
|
1040
1072
|
}, topLevel);
|
|
1041
1073
|
}
|
|
1042
1074
|
}
|
|
1075
|
+
/**
|
|
1076
|
+
* Attaches all the tooltips provided the refs object.
|
|
1077
|
+
* @param {object} toolTipsRefs - The refs for the tooltips within your template.
|
|
1078
|
+
* @returns {void}
|
|
1079
|
+
*/
|
|
1043
1080
|
attachTooltips(toolTipsRefs) {
|
|
1044
1081
|
toolTipsRefs?.forEach((tooltip, index) => {
|
|
1045
1082
|
if (tooltip) {
|
|
@@ -1058,9 +1095,21 @@ export default class Component extends Element {
|
|
|
1058
1095
|
}
|
|
1059
1096
|
});
|
|
1060
1097
|
}
|
|
1098
|
+
/**
|
|
1099
|
+
* Create a new component modal for this component.
|
|
1100
|
+
* @param {HTMLElement} element - The element to attach the modal to.
|
|
1101
|
+
* @param {boolean} modalShouldBeOpened - TRUE if the modal should open immediately.
|
|
1102
|
+
* @param {any} currentValue - The current value of the component.
|
|
1103
|
+
* @returns {ComponentModal} - The created component modal.
|
|
1104
|
+
*/
|
|
1061
1105
|
createComponentModal(element, modalShouldBeOpened, currentValue) {
|
|
1062
1106
|
return new ComponentModal(this, element, modalShouldBeOpened, currentValue, this._referenceAttributeName);
|
|
1063
1107
|
}
|
|
1108
|
+
/**
|
|
1109
|
+
* Attaches all event listensers for this component to the DOM elements that were rendered.
|
|
1110
|
+
* @param {HTMLElement} element - The element to attach the listeners to.
|
|
1111
|
+
* @returns {Promise<void>} - Resolves when the component is done attaching to the DOM.
|
|
1112
|
+
*/
|
|
1064
1113
|
attach(element) {
|
|
1065
1114
|
if (!this.builderMode && !this.previewMode && this.component.modalEdit) {
|
|
1066
1115
|
const modalShouldBeOpened = this.componentModal ? this.componentModal.isOpened : false;
|
|
@@ -1098,6 +1147,9 @@ export default class Component extends Element {
|
|
|
1098
1147
|
this.addons.forEach((addon) => addon.attach(element));
|
|
1099
1148
|
return Promise.resolve();
|
|
1100
1149
|
}
|
|
1150
|
+
/**
|
|
1151
|
+
* Restors the "focus" on a component after a redraw event has occured.
|
|
1152
|
+
*/
|
|
1101
1153
|
restoreFocus() {
|
|
1102
1154
|
const isFocused = this.root?.focusedComponent?.path === this.path;
|
|
1103
1155
|
if (isFocused) {
|
|
@@ -1106,6 +1158,12 @@ export default class Component extends Element {
|
|
|
1106
1158
|
this.restoreCaretPosition();
|
|
1107
1159
|
}
|
|
1108
1160
|
}
|
|
1161
|
+
/**
|
|
1162
|
+
* Adds a keyboard shortcut to this component.
|
|
1163
|
+
* @param {HTMLElement} element - The element to attach the keyboard shortcut to.
|
|
1164
|
+
* @param {string} shortcut - The keyboard shortcut to add.
|
|
1165
|
+
* @returns {void}
|
|
1166
|
+
*/
|
|
1109
1167
|
addShortcut(element, shortcut) {
|
|
1110
1168
|
// Avoid infinite recursion.
|
|
1111
1169
|
if (!element || !this.root || (this.root === this)) {
|
|
@@ -1116,6 +1174,12 @@ export default class Component extends Element {
|
|
|
1116
1174
|
}
|
|
1117
1175
|
this.root.addShortcut(element, shortcut);
|
|
1118
1176
|
}
|
|
1177
|
+
/**
|
|
1178
|
+
* Removes a keyboard shortcut from this component.
|
|
1179
|
+
* @param {HTMLElement} element - The element to remove the keyboard shortcut from.
|
|
1180
|
+
* @param {string} shortcut - The keyboard shortcut to remove.
|
|
1181
|
+
* @returns {void}
|
|
1182
|
+
*/
|
|
1119
1183
|
removeShortcut(element, shortcut) {
|
|
1120
1184
|
// Avoid infinite recursion.
|
|
1121
1185
|
if (!element || (this.root === this)) {
|
|
@@ -1148,6 +1212,13 @@ export default class Component extends Element {
|
|
|
1148
1212
|
this.tooltip.destroy();
|
|
1149
1213
|
}
|
|
1150
1214
|
}
|
|
1215
|
+
/**
|
|
1216
|
+
* Determines if the component should be refreshed based on the path of another component that changed.
|
|
1217
|
+
* @param {string} refreshData - The path of the data that needs to trigger a refresh.
|
|
1218
|
+
* @param {boolean} changed - Flag that is true if the data has been changed.
|
|
1219
|
+
* @param {any} flags - The flags for the checkData procedure.
|
|
1220
|
+
* @returns {void}
|
|
1221
|
+
*/
|
|
1151
1222
|
checkRefresh(refreshData, changed, flags) {
|
|
1152
1223
|
const changePath = _.get(changed, 'instance.path', false);
|
|
1153
1224
|
// Don't let components change themselves.
|
|
@@ -1164,6 +1235,12 @@ export default class Component extends Element {
|
|
|
1164
1235
|
this.refresh(changed.value, changed, flags);
|
|
1165
1236
|
}
|
|
1166
1237
|
}
|
|
1238
|
+
/**
|
|
1239
|
+
* 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.
|
|
1240
|
+
* @param {Array<any>} changes - The list of components that have changed.
|
|
1241
|
+
* @param {any} flags - The checkData flags.
|
|
1242
|
+
* @returns {void}
|
|
1243
|
+
*/
|
|
1167
1244
|
checkRefreshOn(changes, flags = {}) {
|
|
1168
1245
|
changes = changes || [];
|
|
1169
1246
|
if (flags.noRefresh) {
|
|
@@ -1185,8 +1262,8 @@ export default class Component extends Element {
|
|
|
1185
1262
|
}
|
|
1186
1263
|
/**
|
|
1187
1264
|
* Refreshes the component with a new value.
|
|
1188
|
-
*
|
|
1189
|
-
* @
|
|
1265
|
+
* @param {any} value - The latest value of the component to check if it needs to be refreshed.
|
|
1266
|
+
* @returns {void}
|
|
1190
1267
|
*/
|
|
1191
1268
|
refresh(value) {
|
|
1192
1269
|
if (this.hasOwnProperty('refreshOnValue')) {
|
|
@@ -1209,8 +1286,8 @@ export default class Component extends Element {
|
|
|
1209
1286
|
* with the components data and returns true if they are in the same context.
|
|
1210
1287
|
*
|
|
1211
1288
|
* Different rows of the same EditGrid, for example, are in different contexts.
|
|
1212
|
-
*
|
|
1213
|
-
* @
|
|
1289
|
+
* @param {any} component - The component to check if it is in the same context as this component.
|
|
1290
|
+
* @returns {boolean} - TRUE if the component is in the same context as this component.
|
|
1214
1291
|
*/
|
|
1215
1292
|
inContext(component) {
|
|
1216
1293
|
if (component.data === this.data) {
|
|
@@ -1225,9 +1302,18 @@ export default class Component extends Element {
|
|
|
1225
1302
|
}
|
|
1226
1303
|
return false;
|
|
1227
1304
|
}
|
|
1305
|
+
/**
|
|
1306
|
+
* Determines if we are in "view" only mode.
|
|
1307
|
+
* @returns {boolean} - TRUE if we are in "view" only mode.
|
|
1308
|
+
*/
|
|
1228
1309
|
get viewOnly() {
|
|
1229
1310
|
return this.options.readOnly && this.options.viewAsHtml;
|
|
1230
1311
|
}
|
|
1312
|
+
/**
|
|
1313
|
+
* Sets the HTMLElement for this component.
|
|
1314
|
+
* @param {HTMLElement} element - The element that is attached to this component.
|
|
1315
|
+
* @returns {void}
|
|
1316
|
+
*/
|
|
1231
1317
|
setElement(element) {
|
|
1232
1318
|
if (this.element) {
|
|
1233
1319
|
delete this.element.component;
|
|
@@ -1235,6 +1321,10 @@ export default class Component extends Element {
|
|
|
1235
1321
|
}
|
|
1236
1322
|
this.element = element;
|
|
1237
1323
|
}
|
|
1324
|
+
/**
|
|
1325
|
+
* Creates an element to hold the "view only" version of this component.
|
|
1326
|
+
* @returns {HTMLElement} - The element for this component.
|
|
1327
|
+
*/
|
|
1238
1328
|
createViewOnlyElement() {
|
|
1239
1329
|
this.setElement(this.ce('dl', {
|
|
1240
1330
|
id: this.id
|
|
@@ -1245,14 +1335,18 @@ export default class Component extends Element {
|
|
|
1245
1335
|
}
|
|
1246
1336
|
return this.element;
|
|
1247
1337
|
}
|
|
1338
|
+
/**
|
|
1339
|
+
* The default value for the "view only" mode of a component if the value is not provided.
|
|
1340
|
+
* @returns {string} - The default value for this component.
|
|
1341
|
+
*/
|
|
1248
1342
|
get defaultViewOnlyValue() {
|
|
1249
1343
|
return '-';
|
|
1250
1344
|
}
|
|
1251
1345
|
/**
|
|
1252
1346
|
* Uses the widget to determine the output string.
|
|
1253
|
-
*
|
|
1254
|
-
* @param
|
|
1255
|
-
* @
|
|
1347
|
+
* @param {any} value - The current value of the component.
|
|
1348
|
+
* @param {any} options - The options for getValueAsString.
|
|
1349
|
+
* @returns {any|Array<any>} - The value as a string.
|
|
1256
1350
|
*/
|
|
1257
1351
|
getWidgetValueAsString(value, options) {
|
|
1258
1352
|
const noInputWidget = !this.refs.input || !this.refs.input[0] || !this.refs.input[0].widget;
|
|
@@ -1277,6 +1371,12 @@ export default class Component extends Element {
|
|
|
1277
1371
|
const widget = this.refs.input[0].widget;
|
|
1278
1372
|
return widget.getValueAsString(value, options);
|
|
1279
1373
|
}
|
|
1374
|
+
/**
|
|
1375
|
+
* Returns the value of the component as a string.
|
|
1376
|
+
* @param {any} value - The value for this component.
|
|
1377
|
+
* @param {any} options - The options for this component.
|
|
1378
|
+
* @returns {string} - The string representation of the value of this component.
|
|
1379
|
+
*/
|
|
1280
1380
|
getValueAsString(value, options) {
|
|
1281
1381
|
if (!value) {
|
|
1282
1382
|
return '';
|
|
@@ -1294,20 +1394,32 @@ export default class Component extends Element {
|
|
|
1294
1394
|
const stringValue = value.toString();
|
|
1295
1395
|
return this.sanitize(stringValue);
|
|
1296
1396
|
}
|
|
1397
|
+
/**
|
|
1398
|
+
* Returns the string representation "view" of the component value.
|
|
1399
|
+
* @param {any} value - The value of the component.
|
|
1400
|
+
* @param {any} options - The options for this component.
|
|
1401
|
+
* @returns {string} - The string representation of the value of this component.
|
|
1402
|
+
*/
|
|
1297
1403
|
getView(value, options) {
|
|
1298
1404
|
if (this.component.protected) {
|
|
1299
1405
|
return '--- PROTECTED ---';
|
|
1300
1406
|
}
|
|
1301
1407
|
return this.getValueAsString(value, options);
|
|
1302
1408
|
}
|
|
1409
|
+
/**
|
|
1410
|
+
* Updates the items list for this component. Useful for Select and other List component types.
|
|
1411
|
+
* @param {...any} args - The arguments to pass to the onChange event.
|
|
1412
|
+
* @returns {void}
|
|
1413
|
+
*/
|
|
1303
1414
|
updateItems(...args) {
|
|
1304
1415
|
this.restoreValue();
|
|
1305
1416
|
this.onChange(...args);
|
|
1306
1417
|
}
|
|
1307
1418
|
/**
|
|
1308
|
-
*
|
|
1309
|
-
* @param {
|
|
1310
|
-
* @
|
|
1419
|
+
* Returns the value for a specific item in a List type component.
|
|
1420
|
+
* @param {any} data - The data for this component.
|
|
1421
|
+
* @param {boolean} [forceUseValue] - if true, return 'value' property of the data
|
|
1422
|
+
* @returns {any} - The value of the item.
|
|
1311
1423
|
*/
|
|
1312
1424
|
itemValue(data, forceUseValue = false) {
|
|
1313
1425
|
if (_.isObject(data) && !_.isArray(data)) {
|
|
@@ -1320,6 +1432,11 @@ export default class Component extends Element {
|
|
|
1320
1432
|
}
|
|
1321
1433
|
return data;
|
|
1322
1434
|
}
|
|
1435
|
+
/**
|
|
1436
|
+
* Returns the item value for html mode.
|
|
1437
|
+
* @param {any} value - The value for this component.
|
|
1438
|
+
* @returns {any} - The value of the item for html mode.
|
|
1439
|
+
*/
|
|
1323
1440
|
itemValueForHTMLMode(value) {
|
|
1324
1441
|
if (Array.isArray(value)) {
|
|
1325
1442
|
const values = value.map(item => Array.isArray(item) ? this.itemValueForHTMLMode(item) : this.itemValue(item));
|
|
@@ -1327,6 +1444,13 @@ export default class Component extends Element {
|
|
|
1327
1444
|
}
|
|
1328
1445
|
return this.itemValue(value);
|
|
1329
1446
|
}
|
|
1447
|
+
/**
|
|
1448
|
+
* Creates a modal to input the value of this component.
|
|
1449
|
+
* @param {HTMLElement} element - The element to attach the modal to.
|
|
1450
|
+
* @param {any} attr - A list of attributes to add to the modal.
|
|
1451
|
+
* @param {boolean} confirm - If we should add a confirmation to the modal that keeps it from closing unless confirmed.
|
|
1452
|
+
* @returns {HTMLElement} - The created modal element.
|
|
1453
|
+
*/
|
|
1330
1454
|
createModal(element, attr, confirm) {
|
|
1331
1455
|
const dialog = this.ce('div', attr || {});
|
|
1332
1456
|
this.setContent(dialog, this.renderTemplate('dialog'));
|
|
@@ -1362,6 +1486,10 @@ export default class Component extends Element {
|
|
|
1362
1486
|
this.addEventListener(dialog.refs.dialogClose, 'click', handleCloseClick);
|
|
1363
1487
|
return dialog;
|
|
1364
1488
|
}
|
|
1489
|
+
/**
|
|
1490
|
+
* Uses CSS classes to show or hide an element.
|
|
1491
|
+
* @returns {boolean} - TRUE if the element has been css removed.
|
|
1492
|
+
*/
|
|
1365
1493
|
get optimizeRedraw() {
|
|
1366
1494
|
if (this.options.optimizeRedraw && this.element && !this.visible) {
|
|
1367
1495
|
this.addClass(this.element, 'formio-removed');
|
|
@@ -1399,7 +1527,7 @@ export default class Component extends Element {
|
|
|
1399
1527
|
}
|
|
1400
1528
|
/**
|
|
1401
1529
|
* Build the custom style from the layout values
|
|
1402
|
-
* @
|
|
1530
|
+
* @returns {string} - The custom style
|
|
1403
1531
|
*/
|
|
1404
1532
|
get customStyle() {
|
|
1405
1533
|
let customCSS = '';
|
|
@@ -1410,24 +1538,31 @@ export default class Component extends Element {
|
|
|
1410
1538
|
});
|
|
1411
1539
|
return customCSS;
|
|
1412
1540
|
}
|
|
1541
|
+
/**
|
|
1542
|
+
* Returns the component condition operator settings if available.
|
|
1543
|
+
* @returns {object} - The component condition operator settings.
|
|
1544
|
+
*/
|
|
1413
1545
|
static get serverConditionSettings() {
|
|
1414
1546
|
return Component.conditionOperatorsSettings;
|
|
1415
1547
|
}
|
|
1548
|
+
/**
|
|
1549
|
+
* Returns if the application is on a mobile device.
|
|
1550
|
+
* @returns {boolean} - TRUE if the application is on a mobile device.
|
|
1551
|
+
*/
|
|
1416
1552
|
get isMobile() {
|
|
1417
1553
|
return isMobile();
|
|
1418
1554
|
}
|
|
1419
1555
|
/**
|
|
1420
1556
|
* Returns the outside wrapping element of this component.
|
|
1421
|
-
* @returns {HTMLElement}
|
|
1557
|
+
* @returns {HTMLElement} - The wrapping element of this component.
|
|
1422
1558
|
*/
|
|
1423
1559
|
getElement() {
|
|
1424
1560
|
return this.element;
|
|
1425
1561
|
}
|
|
1426
1562
|
/**
|
|
1427
1563
|
* Create an evaluation context for all script executions and interpolations.
|
|
1428
|
-
*
|
|
1429
|
-
* @
|
|
1430
|
-
* @return {*}
|
|
1564
|
+
* @param {any} additional - Additional context to provide.
|
|
1565
|
+
* @returns {any} - The evaluation context.
|
|
1431
1566
|
*/
|
|
1432
1567
|
evalContext(additional) {
|
|
1433
1568
|
return super.evalContext(Object.assign({
|
|
@@ -1449,18 +1584,29 @@ export default class Component extends Element {
|
|
|
1449
1584
|
}
|
|
1450
1585
|
/**
|
|
1451
1586
|
* Sets the pristine flag for this component.
|
|
1452
|
-
*
|
|
1453
|
-
* @param pristine {boolean} - TRUE to make pristine, FALSE not pristine.
|
|
1587
|
+
* @param {boolean} pristine - TRUE to make pristine, FALSE not pristine.
|
|
1454
1588
|
*/
|
|
1455
1589
|
setPristine(pristine) {
|
|
1456
1590
|
this.pristine = pristine;
|
|
1457
1591
|
}
|
|
1592
|
+
/**
|
|
1593
|
+
* Returns if the component is pristine.
|
|
1594
|
+
* @returns {boolean} - TRUE if the component is pristine.
|
|
1595
|
+
*/
|
|
1458
1596
|
get isPristine() {
|
|
1459
1597
|
return this.pristine;
|
|
1460
1598
|
}
|
|
1599
|
+
/**
|
|
1600
|
+
* Sets the dirty flag for this component.
|
|
1601
|
+
* @param {boolean} dirty - TRUE to make dirty, FALSE not dirty.
|
|
1602
|
+
*/
|
|
1461
1603
|
setDirty(dirty) {
|
|
1462
1604
|
this.dirty = dirty;
|
|
1463
1605
|
}
|
|
1606
|
+
/**
|
|
1607
|
+
* Returns if the component is dirty.
|
|
1608
|
+
* @returns {boolean} - TRUE if the component is dirty.
|
|
1609
|
+
*/
|
|
1464
1610
|
get isDirty() {
|
|
1465
1611
|
return this.dirty;
|
|
1466
1612
|
}
|
|
@@ -1474,12 +1620,23 @@ export default class Component extends Element {
|
|
|
1474
1620
|
this.restoreValue();
|
|
1475
1621
|
this.triggerRootChange();
|
|
1476
1622
|
}
|
|
1623
|
+
/**
|
|
1624
|
+
* Returns the icon class for a given icon name.
|
|
1625
|
+
* @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.
|
|
1626
|
+
* @param {boolean} spinning - If the component should be spinning.
|
|
1627
|
+
* @returns {string} - The icon class for the equivalent icon in the iconset we are using.
|
|
1628
|
+
*/
|
|
1477
1629
|
iconClass(name, spinning) {
|
|
1478
1630
|
const iconset = this.options.iconset || Templates.current.defaultIconset || 'fa';
|
|
1479
1631
|
return Templates.current.hasOwnProperty('iconClass')
|
|
1480
1632
|
? Templates.current.iconClass(iconset, name, spinning)
|
|
1481
1633
|
: this.options.iconset === 'fa' ? Templates.defaultTemplates.iconClass(iconset, name, spinning) : name;
|
|
1482
1634
|
}
|
|
1635
|
+
/**
|
|
1636
|
+
* Returns the size css class names for our current template.
|
|
1637
|
+
* @param {string} size - The size class name for the default iconset.
|
|
1638
|
+
* @returns {string} - The size class for our component.
|
|
1639
|
+
*/
|
|
1483
1640
|
size(size) {
|
|
1484
1641
|
return Templates.current.hasOwnProperty('size')
|
|
1485
1642
|
? Templates.current.size(size)
|
|
@@ -1492,15 +1649,23 @@ export default class Component extends Element {
|
|
|
1492
1649
|
get name() {
|
|
1493
1650
|
return this.t(this.component.label || this.component.placeholder || this.key, { _userInput: true });
|
|
1494
1651
|
}
|
|
1652
|
+
/**
|
|
1653
|
+
* Returns the visible errors for this component.
|
|
1654
|
+
* @returns {Array<object>} - The visible errors for this component.
|
|
1655
|
+
*/
|
|
1495
1656
|
get visibleErrors() {
|
|
1496
1657
|
return this._visibleErrors;
|
|
1497
1658
|
}
|
|
1659
|
+
/**
|
|
1660
|
+
* Returns all the errors for this component, visible or not.
|
|
1661
|
+
* @returns {Array<object>} - All the errors for this component.
|
|
1662
|
+
*/
|
|
1498
1663
|
get errors() {
|
|
1499
1664
|
return this._errors;
|
|
1500
1665
|
}
|
|
1501
1666
|
/**
|
|
1502
1667
|
* Returns the error label for this component.
|
|
1503
|
-
* @
|
|
1668
|
+
* @returns {string} - The error label for this component.
|
|
1504
1669
|
*/
|
|
1505
1670
|
get errorLabel() {
|
|
1506
1671
|
return this.t(this.component.errorLabel
|
|
@@ -1510,12 +1675,20 @@ export default class Component extends Element {
|
|
|
1510
1675
|
}
|
|
1511
1676
|
/**
|
|
1512
1677
|
* Get the error message provided a certain type of error.
|
|
1513
|
-
* @param type
|
|
1514
|
-
* @
|
|
1678
|
+
* @param {string} type - The type of error to fetch the message for.
|
|
1679
|
+
* @returns {string} - The error message configured for this component.
|
|
1515
1680
|
*/
|
|
1516
1681
|
errorMessage(type) {
|
|
1517
1682
|
return (this.component.errors && this.component.errors[type]) ? this.component.errors[type] : type;
|
|
1518
1683
|
}
|
|
1684
|
+
/**
|
|
1685
|
+
* Sets the content, innerHTML, of an element to the sanitized content.
|
|
1686
|
+
* @param {HTMLElement} element - The element to set the innerHTML to.
|
|
1687
|
+
* @param {string} content - The HTML string content that we wish to set.
|
|
1688
|
+
* @param {boolean} forceSanitize - If we should force the content to be sanitized.
|
|
1689
|
+
* @param {any} sanitizeOptions - The options for the sanitize function.
|
|
1690
|
+
* @returns {boolean} - TRUE if the content was sanitized and set.
|
|
1691
|
+
*/
|
|
1519
1692
|
setContent(element, content, forceSanitize, sanitizeOptions) {
|
|
1520
1693
|
if (element instanceof HTMLElement) {
|
|
1521
1694
|
element.innerHTML = this.sanitize(content, forceSanitize, sanitizeOptions);
|
|
@@ -1523,6 +1696,9 @@ export default class Component extends Element {
|
|
|
1523
1696
|
}
|
|
1524
1697
|
return false;
|
|
1525
1698
|
}
|
|
1699
|
+
/**
|
|
1700
|
+
* Restores the caret position in the input element after a refresh occurs.
|
|
1701
|
+
*/
|
|
1526
1702
|
restoreCaretPosition() {
|
|
1527
1703
|
if (this.root?.currentSelection) {
|
|
1528
1704
|
if (this.refs.input?.length) {
|
|
@@ -1544,6 +1720,10 @@ export default class Component extends Element {
|
|
|
1544
1720
|
}
|
|
1545
1721
|
}
|
|
1546
1722
|
}
|
|
1723
|
+
/**
|
|
1724
|
+
* Redraw the component.
|
|
1725
|
+
* @returns {Promise<void>} - A promise that resolves when the component is done redrawing.
|
|
1726
|
+
*/
|
|
1547
1727
|
redraw() {
|
|
1548
1728
|
// Don't bother if we have not built yet.
|
|
1549
1729
|
if (!this.element || !this.element.parentNode || this.optimizeRedraw) {
|
|
@@ -1559,29 +1739,54 @@ export default class Component extends Element {
|
|
|
1559
1739
|
this.setElement(parent.children[index]);
|
|
1560
1740
|
return this.attach(this.element);
|
|
1561
1741
|
}
|
|
1742
|
+
/**
|
|
1743
|
+
* Rebuild and redraw a component.
|
|
1744
|
+
* @returns {Promise<void>} - A promise that resolves when the component is done rebuilding and redrawing.
|
|
1745
|
+
*/
|
|
1562
1746
|
rebuild() {
|
|
1563
1747
|
this.destroy();
|
|
1564
1748
|
this.init();
|
|
1565
1749
|
this.visible = this.conditionallyVisible(null, null);
|
|
1566
1750
|
return this.redraw();
|
|
1567
1751
|
}
|
|
1752
|
+
/**
|
|
1753
|
+
* Removes all event listeners attached to this component.
|
|
1754
|
+
*/
|
|
1568
1755
|
removeEventListeners() {
|
|
1569
1756
|
super.removeEventListeners();
|
|
1570
1757
|
this.tooltips.forEach(tooltip => tooltip.destroy());
|
|
1571
1758
|
this.tooltips = [];
|
|
1572
1759
|
}
|
|
1760
|
+
/**
|
|
1761
|
+
* Returns if the dom node has the classes provided.
|
|
1762
|
+
* @param {HTMLElement} element - The element to check for the class.
|
|
1763
|
+
* @param {string} className - The name of the class to check.
|
|
1764
|
+
* @returns {boolean|void} - TRUE if the element has the class.
|
|
1765
|
+
*/
|
|
1573
1766
|
hasClass(element, className) {
|
|
1574
1767
|
if (!element) {
|
|
1575
1768
|
return;
|
|
1576
1769
|
}
|
|
1577
1770
|
return super.hasClass(element, this.transform('class', className));
|
|
1578
1771
|
}
|
|
1772
|
+
/**
|
|
1773
|
+
* Adds a class to an HTML element.
|
|
1774
|
+
* @param {HTMLElement} element - The dom element to add the class to.
|
|
1775
|
+
* @param {string} className - The class name you wish to add.
|
|
1776
|
+
* @returns {this|void} - The component instance.
|
|
1777
|
+
*/
|
|
1579
1778
|
addClass(element, className) {
|
|
1580
1779
|
if (!element) {
|
|
1581
1780
|
return;
|
|
1582
1781
|
}
|
|
1583
1782
|
return super.addClass(element, this.transform('class', className));
|
|
1584
1783
|
}
|
|
1784
|
+
/**
|
|
1785
|
+
* Removes a class from an element.
|
|
1786
|
+
* @param {HTMLElement} element - The element to remove the class from.
|
|
1787
|
+
* @param {string} className - The class name to remove.
|
|
1788
|
+
* @returns {this|void} - The component instance.
|
|
1789
|
+
*/
|
|
1585
1790
|
removeClass(element, className) {
|
|
1586
1791
|
if (!element) {
|
|
1587
1792
|
return;
|
|
@@ -1590,8 +1795,7 @@ export default class Component extends Element {
|
|
|
1590
1795
|
}
|
|
1591
1796
|
/**
|
|
1592
1797
|
* Determines if this component has a condition defined.
|
|
1593
|
-
*
|
|
1594
|
-
* @return {null}
|
|
1798
|
+
* @returns {boolean} - TRUE if the component has a condition defined.
|
|
1595
1799
|
*/
|
|
1596
1800
|
hasCondition() {
|
|
1597
1801
|
if (this._hasCondition !== null) {
|
|
@@ -1602,9 +1806,9 @@ export default class Component extends Element {
|
|
|
1602
1806
|
}
|
|
1603
1807
|
/**
|
|
1604
1808
|
* Check if this component is conditionally visible.
|
|
1605
|
-
*
|
|
1606
|
-
* @param data
|
|
1607
|
-
* @
|
|
1809
|
+
* @param {any} data - The data to check against.
|
|
1810
|
+
* @param {any} row - The row data to check against.
|
|
1811
|
+
* @returns {boolean} - TRUE if the component is conditionally visible.
|
|
1608
1812
|
*/
|
|
1609
1813
|
conditionallyVisible(data, row) {
|
|
1610
1814
|
data = data || this.rootValue;
|
|
@@ -1619,16 +1823,19 @@ export default class Component extends Element {
|
|
|
1619
1823
|
* Checks the condition of this component.
|
|
1620
1824
|
*
|
|
1621
1825
|
* 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.
|
|
1826
|
+
* @param {any} row - The row contextual data.
|
|
1827
|
+
* @param {any} data - The global data object.
|
|
1828
|
+
* @returns {boolean} - True if the condition applies to this component.
|
|
1626
1829
|
*/
|
|
1627
1830
|
checkCondition(row, data) {
|
|
1628
1831
|
return FormioUtils.checkCondition(this.component, row || this.data, data || this.rootValue, this.root ? this.root._form : {}, this);
|
|
1629
1832
|
}
|
|
1630
1833
|
/**
|
|
1631
1834
|
* Check for conditionals and hide/show the element based on those conditions.
|
|
1835
|
+
* @param {any} data - The data to check against.
|
|
1836
|
+
* @param {any} flags - The flags passed to checkData function.
|
|
1837
|
+
* @param {any} row - The row data to check against.
|
|
1838
|
+
* @returns {boolean} - TRUE if the component is visible.
|
|
1632
1839
|
*/
|
|
1633
1840
|
checkComponentConditions(data, flags, row) {
|
|
1634
1841
|
data = data || this.rootValue;
|
|
@@ -1646,8 +1853,10 @@ export default class Component extends Element {
|
|
|
1646
1853
|
}
|
|
1647
1854
|
/**
|
|
1648
1855
|
* Checks conditions for this component and any sub components.
|
|
1649
|
-
* @param
|
|
1650
|
-
* @
|
|
1856
|
+
* @param {any} data - The data to check against.
|
|
1857
|
+
* @param {any} flags - The flags passed to checkData function.
|
|
1858
|
+
* @param {any} row - The row data to check against.
|
|
1859
|
+
* @returns {boolean} - TRUE if the component is visible.
|
|
1651
1860
|
*/
|
|
1652
1861
|
checkConditions(data, flags, row) {
|
|
1653
1862
|
data = data || this.rootValue;
|
|
@@ -1655,17 +1864,20 @@ export default class Component extends Element {
|
|
|
1655
1864
|
row = row || this.data;
|
|
1656
1865
|
return this.checkComponentConditions(data, flags, row);
|
|
1657
1866
|
}
|
|
1867
|
+
/**
|
|
1868
|
+
* Returns the component logic if applicable.
|
|
1869
|
+
* @returns {Array<object>} - The component logic.
|
|
1870
|
+
*/
|
|
1658
1871
|
get logic() {
|
|
1659
1872
|
return this.component.logic || [];
|
|
1660
1873
|
}
|
|
1661
1874
|
/**
|
|
1662
1875
|
* Check all triggers and apply necessary actions.
|
|
1663
|
-
*
|
|
1664
|
-
* @param data
|
|
1876
|
+
* @param {any} data - The data to check against.
|
|
1877
|
+
* @param {any} row - The row data to check against.
|
|
1878
|
+
* @returns {boolean|void} - TRUE if the component was altered.
|
|
1665
1879
|
*/
|
|
1666
|
-
fieldLogic(data, row) {
|
|
1667
|
-
data = data || this.rootValue;
|
|
1668
|
-
row = row || this.data;
|
|
1880
|
+
fieldLogic(data = this.rootValue, row = this.data) {
|
|
1669
1881
|
const logics = this.logic;
|
|
1670
1882
|
// If there aren't logic, don't go further.
|
|
1671
1883
|
if (logics.length === 0) {
|
|
@@ -1688,6 +1900,10 @@ export default class Component extends Element {
|
|
|
1688
1900
|
}
|
|
1689
1901
|
return changed;
|
|
1690
1902
|
}
|
|
1903
|
+
/**
|
|
1904
|
+
* Retuns if the browser is Internet Explorer.
|
|
1905
|
+
* @returns {boolean} - TRUE if the browser is IE.
|
|
1906
|
+
*/
|
|
1691
1907
|
isIE() {
|
|
1692
1908
|
if (typeof window === 'undefined') {
|
|
1693
1909
|
return false;
|
|
@@ -1712,9 +1928,24 @@ export default class Component extends Element {
|
|
|
1712
1928
|
// other browser
|
|
1713
1929
|
return false;
|
|
1714
1930
|
}
|
|
1931
|
+
/**
|
|
1932
|
+
* Defines the logic action value through evaluation.
|
|
1933
|
+
* @param {object} action - The action within the Logic system to perform.
|
|
1934
|
+
* @param {object} argsObject - The arguments to pass to the evaluation.
|
|
1935
|
+
* @returns {any} - The result of the evaluation.
|
|
1936
|
+
*/
|
|
1715
1937
|
defineActionValue(action, argsObject) {
|
|
1716
1938
|
return this.evaluate(action.value, argsObject, 'value');
|
|
1717
1939
|
}
|
|
1940
|
+
/**
|
|
1941
|
+
* Apply the actions of Logic for a component once the conditions have been met.
|
|
1942
|
+
* @param {object} newComponent - The new component to apply the actions to.
|
|
1943
|
+
* @param {Array<object>} actions - An array of actions
|
|
1944
|
+
* @param {any} result - The result of the conditional check in order to evaluate the actions.
|
|
1945
|
+
* @param {any} row - The contextual row data for this component.
|
|
1946
|
+
* @param {any} data - The global data object for the submission.
|
|
1947
|
+
* @returns {boolean} - TRUE if the component was altered.
|
|
1948
|
+
*/
|
|
1718
1949
|
applyActions(newComponent, actions, result, row, data) {
|
|
1719
1950
|
data = data || this.rootValue;
|
|
1720
1951
|
row = row || this.data;
|
|
@@ -1794,9 +2025,8 @@ export default class Component extends Element {
|
|
|
1794
2025
|
}
|
|
1795
2026
|
/**
|
|
1796
2027
|
* Add a new input error to this element.
|
|
1797
|
-
*
|
|
1798
|
-
* @
|
|
1799
|
-
* @param dirty
|
|
2028
|
+
* @param {Array<object>|string} messages - An array of messages to add to the element.
|
|
2029
|
+
* @returns {void}
|
|
1800
2030
|
*/
|
|
1801
2031
|
addMessages(messages) {
|
|
1802
2032
|
if (!messages) {
|
|
@@ -1822,6 +2052,15 @@ export default class Component extends Element {
|
|
|
1822
2052
|
}).join(''));
|
|
1823
2053
|
}
|
|
1824
2054
|
}
|
|
2055
|
+
/**
|
|
2056
|
+
* Sets the form input widget error classes.
|
|
2057
|
+
* @param {Array<HTMLElement>} elements - An array of DOM elements to set the error classes on.
|
|
2058
|
+
* @param {boolean} dirty - If the input is dirty.
|
|
2059
|
+
* @param {boolean} hasErrors - If the input has errors.
|
|
2060
|
+
* @param {boolean} hasMessages - If the input has messages.
|
|
2061
|
+
* @param {HTMLElement} element - The wrapper element for all the other elements passed in first argument.
|
|
2062
|
+
* @returns {void}
|
|
2063
|
+
*/
|
|
1825
2064
|
setErrorClasses(elements, dirty, hasErrors, hasMessages, element = this.element) {
|
|
1826
2065
|
this.clearErrorClasses();
|
|
1827
2066
|
elements.forEach((element) => {
|
|
@@ -1848,6 +2087,12 @@ export default class Component extends Element {
|
|
|
1848
2087
|
this.addClass(element, 'has-message');
|
|
1849
2088
|
}
|
|
1850
2089
|
}
|
|
2090
|
+
/**
|
|
2091
|
+
* Adds the classes necessary to mark an element as invalid.
|
|
2092
|
+
* @param {HTMLElement} element - The element you wish to add the invalid classes to.
|
|
2093
|
+
* @param {boolean} invalid - TRUE if the component is invalid, FALSE otherwise.
|
|
2094
|
+
* @returns {void}
|
|
2095
|
+
*/
|
|
1851
2096
|
setElementInvalid(element, invalid) {
|
|
1852
2097
|
if (!element)
|
|
1853
2098
|
return;
|
|
@@ -1859,6 +2104,9 @@ export default class Component extends Element {
|
|
|
1859
2104
|
}
|
|
1860
2105
|
element.setAttribute('aria-invalid', invalid ? 'true' : 'false');
|
|
1861
2106
|
}
|
|
2107
|
+
/**
|
|
2108
|
+
* Clears the components data if it is conditionally hidden AND clearOnHide is set to true for this component.
|
|
2109
|
+
*/
|
|
1862
2110
|
clearOnHide() {
|
|
1863
2111
|
// clearOnHide defaults to true for old forms (without the value set) so only trigger if the value is false.
|
|
1864
2112
|
if (
|
|
@@ -1878,6 +2126,10 @@ export default class Component extends Element {
|
|
|
1878
2126
|
}
|
|
1879
2127
|
}
|
|
1880
2128
|
}
|
|
2129
|
+
/**
|
|
2130
|
+
* Triggers a debounced onChange event for the root component (usually Webform).
|
|
2131
|
+
* @param {...any} args - The arguments to pass to the onChange event.
|
|
2132
|
+
*/
|
|
1881
2133
|
triggerRootChange(...args) {
|
|
1882
2134
|
if (this.options.onChange) {
|
|
1883
2135
|
this.options.onChange(...args);
|
|
@@ -1886,6 +2138,13 @@ export default class Component extends Element {
|
|
|
1886
2138
|
this.root.triggerChange(...args);
|
|
1887
2139
|
}
|
|
1888
2140
|
}
|
|
2141
|
+
/**
|
|
2142
|
+
* Called when the component value has been changed. This will then trigger the root level onChange handler which
|
|
2143
|
+
* propagates the checkData methods for the full component tree.
|
|
2144
|
+
* @param {any} flags - The flags for the change event propagation.
|
|
2145
|
+
* @param {boolean} fromRoot - If the change event is from the root component.
|
|
2146
|
+
* @returns {boolean} - TRUE if the component has changed.
|
|
2147
|
+
*/
|
|
1889
2148
|
onChange(flags, fromRoot) {
|
|
1890
2149
|
flags = flags || {};
|
|
1891
2150
|
if (flags.modified) {
|
|
@@ -2021,7 +2280,7 @@ export default class Component extends Element {
|
|
|
2021
2280
|
return Promise.reject();
|
|
2022
2281
|
}
|
|
2023
2282
|
this.quill = new Quill(element, isIEBrowser ? { ...settings, modules: {} } : settings);
|
|
2024
|
-
/** This block of code adds the [source] capabilities. See https://codepen.io/anon/pen/ZyEjrQ
|
|
2283
|
+
/** This block of code adds the [source] capabilities. See https://codepen.io/anon/pen/ZyEjrQ */
|
|
2025
2284
|
const txtArea = document.createElement('textarea');
|
|
2026
2285
|
txtArea.setAttribute('class', 'quill-source-code');
|
|
2027
2286
|
this.quill.addContainer('ql-custom').appendChild(txtArea);
|
|
@@ -2035,7 +2294,7 @@ export default class Component extends Element {
|
|
|
2035
2294
|
txtArea.style.display = (txtArea.style.display === 'none') ? 'inherit' : 'none';
|
|
2036
2295
|
});
|
|
2037
2296
|
}
|
|
2038
|
-
/** END CODEBLOCK
|
|
2297
|
+
/** END CODEBLOCK */
|
|
2039
2298
|
// Make sure to select cursor when they click on the element.
|
|
2040
2299
|
this.addEventListener(element, 'click', () => this.quill.focus());
|
|
2041
2300
|
// Allows users to skip toolbar items when tabbing though form
|
|
@@ -2082,23 +2341,22 @@ export default class Component extends Element {
|
|
|
2082
2341
|
}
|
|
2083
2342
|
/**
|
|
2084
2343
|
* The empty value for this component.
|
|
2085
|
-
*
|
|
2086
|
-
* @return {null}
|
|
2344
|
+
* @returns {null} - The empty value for this component.
|
|
2087
2345
|
*/
|
|
2088
2346
|
get emptyValue() {
|
|
2089
2347
|
return null;
|
|
2090
2348
|
}
|
|
2091
2349
|
/**
|
|
2092
2350
|
* Returns if this component has a value set.
|
|
2093
|
-
*
|
|
2351
|
+
* @param {any} data - The global data object.
|
|
2352
|
+
* @returns {boolean} - TRUE if a value is set.
|
|
2094
2353
|
*/
|
|
2095
2354
|
hasValue(data) {
|
|
2096
2355
|
return !_.isUndefined(_.get(data || this.data, this.key));
|
|
2097
2356
|
}
|
|
2098
2357
|
/**
|
|
2099
2358
|
* Get the data value at the root level.
|
|
2100
|
-
*
|
|
2101
|
-
* @return {*}
|
|
2359
|
+
* @returns {*} - The root value for the component, typically the Webform data object.
|
|
2102
2360
|
*/
|
|
2103
2361
|
get rootValue() {
|
|
2104
2362
|
return this.root ? this.root.data : this.data;
|
|
@@ -2108,7 +2366,7 @@ export default class Component extends Element {
|
|
|
2108
2366
|
}
|
|
2109
2367
|
/**
|
|
2110
2368
|
* Get the static value of this component.
|
|
2111
|
-
* @
|
|
2369
|
+
* @returns {*} - The value for this component.
|
|
2112
2370
|
*/
|
|
2113
2371
|
get dataValue() {
|
|
2114
2372
|
if (!this.key ||
|
|
@@ -2126,8 +2384,7 @@ export default class Component extends Element {
|
|
|
2126
2384
|
}
|
|
2127
2385
|
/**
|
|
2128
2386
|
* Sets the static value of this component.
|
|
2129
|
-
*
|
|
2130
|
-
* @param value
|
|
2387
|
+
* @param {*} value - The value to set for this component.
|
|
2131
2388
|
*/
|
|
2132
2389
|
set dataValue(value) {
|
|
2133
2390
|
if (!this.allowData ||
|
|
@@ -2147,8 +2404,8 @@ export default class Component extends Element {
|
|
|
2147
2404
|
}
|
|
2148
2405
|
/**
|
|
2149
2406
|
* Splice a value from the dataValue.
|
|
2150
|
-
*
|
|
2151
|
-
* @param
|
|
2407
|
+
* @param {number} index - The index to splice for an array component values.
|
|
2408
|
+
* @param {*} flags - The flags to use when splicing the value.
|
|
2152
2409
|
*/
|
|
2153
2410
|
splice(index, flags = {}) {
|
|
2154
2411
|
if (this.hasValue()) {
|
|
@@ -2216,8 +2473,7 @@ export default class Component extends Element {
|
|
|
2216
2473
|
}
|
|
2217
2474
|
/**
|
|
2218
2475
|
* Get the input value of this component.
|
|
2219
|
-
*
|
|
2220
|
-
* @return {*}
|
|
2476
|
+
* @returns {*} - The value for the component.
|
|
2221
2477
|
*/
|
|
2222
2478
|
getValue() {
|
|
2223
2479
|
if (!this.hasInput || this.viewOnly || !this.refs.input || !this.refs.input.length) {
|
|
@@ -2239,9 +2495,8 @@ export default class Component extends Element {
|
|
|
2239
2495
|
}
|
|
2240
2496
|
/**
|
|
2241
2497
|
* Get the value at a specific index.
|
|
2242
|
-
*
|
|
2243
|
-
* @
|
|
2244
|
-
* @returns {*}
|
|
2498
|
+
* @param {number} index - For an array component or multiple values, this returns the value at a specific index.
|
|
2499
|
+
* @returns {*} - The value at the specified index.
|
|
2245
2500
|
*/
|
|
2246
2501
|
getValueAt(index) {
|
|
2247
2502
|
const input = this.performInputMapping(this.refs.input[index]);
|
|
@@ -2249,11 +2504,9 @@ export default class Component extends Element {
|
|
|
2249
2504
|
}
|
|
2250
2505
|
/**
|
|
2251
2506
|
* Set the value of this component.
|
|
2252
|
-
*
|
|
2253
|
-
* @param value
|
|
2254
|
-
* @
|
|
2255
|
-
*
|
|
2256
|
-
* @return {boolean} - If the value changed.
|
|
2507
|
+
* @param {*} value - The value to set for this component.
|
|
2508
|
+
* @param {*} flags - The flags to use when setting the value.
|
|
2509
|
+
* @returns {boolean} - If the value changed.
|
|
2257
2510
|
*/
|
|
2258
2511
|
setValue(value, flags = {}) {
|
|
2259
2512
|
const changed = this.updateValue(value, flags);
|
|
@@ -2284,9 +2537,9 @@ export default class Component extends Element {
|
|
|
2284
2537
|
}
|
|
2285
2538
|
/**
|
|
2286
2539
|
* Set the value at a specific index.
|
|
2287
|
-
*
|
|
2288
|
-
* @param index
|
|
2289
|
-
* @param value
|
|
2540
|
+
* @param {number} index - The index to set the value at.
|
|
2541
|
+
* @param {*} value - The value to set at the specified index.
|
|
2542
|
+
* @param {*} flags - The flags to use when setting the value.
|
|
2290
2543
|
*/
|
|
2291
2544
|
setValueAt(index, value, flags = {}) {
|
|
2292
2545
|
if (!flags.noDefault && (value === null || value === undefined) && !this.component.multiple) {
|
|
@@ -2333,9 +2586,8 @@ export default class Component extends Element {
|
|
|
2333
2586
|
}
|
|
2334
2587
|
/**
|
|
2335
2588
|
* Normalize values coming into updateValue.
|
|
2336
|
-
*
|
|
2337
|
-
* @
|
|
2338
|
-
* @return {*}
|
|
2589
|
+
* @param {*} value - The value to normalize before setting.
|
|
2590
|
+
* @returns {*} - The normalized value.
|
|
2339
2591
|
*/
|
|
2340
2592
|
normalizeValue(value) {
|
|
2341
2593
|
if (this.component.multiple && !Array.isArray(value)) {
|
|
@@ -2345,8 +2597,9 @@ export default class Component extends Element {
|
|
|
2345
2597
|
}
|
|
2346
2598
|
/**
|
|
2347
2599
|
* Update a value of this component.
|
|
2348
|
-
*
|
|
2349
|
-
* @param flags
|
|
2600
|
+
* @param {*} value - The value to update.
|
|
2601
|
+
* @param {*} flags - The flags to use when updating the value.
|
|
2602
|
+
* @returns {boolean} - If the value changed.
|
|
2350
2603
|
*/
|
|
2351
2604
|
updateComponentValue(value, flags = {}) {
|
|
2352
2605
|
let newValue = (!flags.resetValue && (value === undefined || value === null)) ? this.getValue() : value;
|
|
@@ -2365,9 +2618,8 @@ export default class Component extends Element {
|
|
|
2365
2618
|
}
|
|
2366
2619
|
/**
|
|
2367
2620
|
* Updates the value of this component plus all sub-components.
|
|
2368
|
-
*
|
|
2369
|
-
* @
|
|
2370
|
-
* @return {boolean}
|
|
2621
|
+
* @param {...any} args - The arguments to pass to updateValue.
|
|
2622
|
+
* @returns {boolean} - If the value changed.
|
|
2371
2623
|
*/
|
|
2372
2624
|
updateValue(...args) {
|
|
2373
2625
|
return this.updateComponentValue(...args);
|
|
@@ -2393,10 +2645,9 @@ export default class Component extends Element {
|
|
|
2393
2645
|
}
|
|
2394
2646
|
/**
|
|
2395
2647
|
* Determine if the value of this component has changed.
|
|
2396
|
-
*
|
|
2397
|
-
* @param
|
|
2398
|
-
* @
|
|
2399
|
-
* @return {boolean}
|
|
2648
|
+
* @param {*} newValue - The new value to check.
|
|
2649
|
+
* @param {*} oldValue - The existing value of the component.
|
|
2650
|
+
* @returns {boolean} - TRUE if the value has changed.
|
|
2400
2651
|
*/
|
|
2401
2652
|
hasChanged(newValue, oldValue) {
|
|
2402
2653
|
if (((newValue === undefined) || (newValue === null)) &&
|
|
@@ -2414,8 +2665,9 @@ export default class Component extends Element {
|
|
|
2414
2665
|
}
|
|
2415
2666
|
/**
|
|
2416
2667
|
* Update the value on change.
|
|
2417
|
-
*
|
|
2418
|
-
* @param
|
|
2668
|
+
* @param {*} flags - The flags to use when triggering the on change event.
|
|
2669
|
+
* @param {boolean} changed - If the value has changed.
|
|
2670
|
+
* @returns {boolean} - If the value changed.
|
|
2419
2671
|
*/
|
|
2420
2672
|
updateOnChange(flags = {}, changed = false) {
|
|
2421
2673
|
if (!flags.noUpdateEvent && changed) {
|
|
@@ -2428,13 +2680,6 @@ export default class Component extends Element {
|
|
|
2428
2680
|
}
|
|
2429
2681
|
return false;
|
|
2430
2682
|
}
|
|
2431
|
-
/**
|
|
2432
|
-
* Perform a calculated value operation.
|
|
2433
|
-
*
|
|
2434
|
-
* @param data - The global data object.
|
|
2435
|
-
*
|
|
2436
|
-
* @return {boolean} - If the value changed during calculation.
|
|
2437
|
-
*/
|
|
2438
2683
|
convertNumberOrBoolToString(value) {
|
|
2439
2684
|
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
2440
2685
|
return value.toString();
|
|
@@ -2542,9 +2787,10 @@ export default class Component extends Element {
|
|
|
2542
2787
|
/* eslint-enable max-statements */
|
|
2543
2788
|
/**
|
|
2544
2789
|
* Performs calculations in this component plus any child components.
|
|
2545
|
-
*
|
|
2546
|
-
* @param
|
|
2547
|
-
* @
|
|
2790
|
+
* @param {*} data - The data to perform the calculation with.
|
|
2791
|
+
* @param {*} flags - The flags to use when calculating the value.
|
|
2792
|
+
* @param {*} row - The contextual row data to use when performing the calculation.
|
|
2793
|
+
* @returns {boolean} - TRUE if the value changed.
|
|
2548
2794
|
*/
|
|
2549
2795
|
calculateValue(data, flags, row) {
|
|
2550
2796
|
data = data || this.rootValue;
|
|
@@ -2554,15 +2800,14 @@ export default class Component extends Element {
|
|
|
2554
2800
|
}
|
|
2555
2801
|
/**
|
|
2556
2802
|
* Get this component's label text.
|
|
2557
|
-
*
|
|
2803
|
+
* @returns {string} - The label text for this component.
|
|
2558
2804
|
*/
|
|
2559
2805
|
get label() {
|
|
2560
2806
|
return this.component.label;
|
|
2561
2807
|
}
|
|
2562
2808
|
/**
|
|
2563
2809
|
* Set this component's label text and render it.
|
|
2564
|
-
*
|
|
2565
|
-
* @param value - The new label text.
|
|
2810
|
+
* @param {string} value - The new label text.
|
|
2566
2811
|
*/
|
|
2567
2812
|
set label(value) {
|
|
2568
2813
|
this.component.label = value;
|
|
@@ -2572,17 +2817,18 @@ export default class Component extends Element {
|
|
|
2572
2817
|
}
|
|
2573
2818
|
/**
|
|
2574
2819
|
* Get FormioForm element at the root of this component tree.
|
|
2575
|
-
*
|
|
2820
|
+
* @returns {*} root - The root component to search from.
|
|
2576
2821
|
*/
|
|
2577
2822
|
getRoot() {
|
|
2578
2823
|
return this.root;
|
|
2579
2824
|
}
|
|
2580
2825
|
/**
|
|
2581
2826
|
* Returns the invalid message, or empty string if the component is valid.
|
|
2582
|
-
*
|
|
2583
|
-
* @param
|
|
2584
|
-
* @param
|
|
2585
|
-
* @
|
|
2827
|
+
* @param {*} data - The data to check if the component is valid.
|
|
2828
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
2829
|
+
* @param {boolean} ignoreCondition - If conditions for the component should be ignored when checking validity.
|
|
2830
|
+
* @param {*} row - Contextual row data for this component.
|
|
2831
|
+
* @returns {string} - The message to show when the component is invalid.
|
|
2586
2832
|
*/
|
|
2587
2833
|
invalidMessage(data, dirty, ignoreCondition, row) {
|
|
2588
2834
|
if (!ignoreCondition && !this.checkCondition(row, data)) {
|
|
@@ -2614,10 +2860,9 @@ export default class Component extends Element {
|
|
|
2614
2860
|
}
|
|
2615
2861
|
/**
|
|
2616
2862
|
* Returns if the component is valid or not.
|
|
2617
|
-
*
|
|
2618
|
-
* @param
|
|
2619
|
-
* @
|
|
2620
|
-
* @return {boolean}
|
|
2863
|
+
* @param {*} data - The data to check if the component is valid.
|
|
2864
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
2865
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
2621
2866
|
*/
|
|
2622
2867
|
isValid(data, dirty) {
|
|
2623
2868
|
return !this.invalidMessage(data, dirty);
|
|
@@ -2636,8 +2881,8 @@ export default class Component extends Element {
|
|
|
2636
2881
|
}
|
|
2637
2882
|
/**
|
|
2638
2883
|
* Interpolate errors from the validation methods.
|
|
2639
|
-
* @param {
|
|
2640
|
-
* @returns
|
|
2884
|
+
* @param {Array<any>} errors - An array of errors to interpolate.
|
|
2885
|
+
* @returns {Array<any>} - The interpolated errors.
|
|
2641
2886
|
*/
|
|
2642
2887
|
interpolateErrors(errors) {
|
|
2643
2888
|
const interpolatedErrors = FormioUtils.interpolateErrors(this.component, errors, this.t.bind(this));
|
|
@@ -2649,7 +2894,7 @@ export default class Component extends Element {
|
|
|
2649
2894
|
* @param {*} data - The root submission data.
|
|
2650
2895
|
* @param {*} row - The contextual row data.
|
|
2651
2896
|
* @param {*} flags - The flags to perform validation.
|
|
2652
|
-
* @returns
|
|
2897
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
2653
2898
|
*/
|
|
2654
2899
|
showValidationErrors(errors, data, row, flags) {
|
|
2655
2900
|
if (flags.silentCheck) {
|
|
@@ -2669,9 +2914,9 @@ export default class Component extends Element {
|
|
|
2669
2914
|
* @param {*} data - The root data you wish to use for this component.
|
|
2670
2915
|
* @param {*} row - The contextual row data you wish to use for this component.
|
|
2671
2916
|
* @param {*} flags - The flags to control the behavior of the validation.
|
|
2672
|
-
* @returns
|
|
2917
|
+
* @returns {Array<any>} - An array of errors if the component is invalid.
|
|
2673
2918
|
*/
|
|
2674
|
-
validateComponent(data, row, flags = {}) {
|
|
2919
|
+
validateComponent(data = null, row = null, flags = {}) {
|
|
2675
2920
|
data = data || this.rootValue;
|
|
2676
2921
|
row = row || this.data;
|
|
2677
2922
|
const { async = false } = flags;
|
|
@@ -2702,13 +2947,14 @@ export default class Component extends Element {
|
|
|
2702
2947
|
}
|
|
2703
2948
|
/**
|
|
2704
2949
|
* Checks the validity of this component and sets the error message if it is invalid.
|
|
2705
|
-
*
|
|
2706
|
-
* @param
|
|
2707
|
-
* @param
|
|
2708
|
-
* @param
|
|
2709
|
-
* @
|
|
2710
|
-
|
|
2711
|
-
|
|
2950
|
+
* @param {*} data - The data to check if the component is valid.
|
|
2951
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
2952
|
+
* @param {*} row - The contextual row data for this component.
|
|
2953
|
+
* @param {*} flags - The flags to use when checking the validity.
|
|
2954
|
+
* @param {Array<any>} allErrors - An array of all errors that have occured so that it can be appended when another one occurs here.
|
|
2955
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
2956
|
+
*/
|
|
2957
|
+
checkComponentValidity(data = null, dirty = false, row = null, flags = {}, allErrors = []) {
|
|
2712
2958
|
data = data || this.rootValue;
|
|
2713
2959
|
row = row || this.data;
|
|
2714
2960
|
flags.dirty = dirty || false;
|
|
@@ -2744,32 +2990,30 @@ export default class Component extends Element {
|
|
|
2744
2990
|
}
|
|
2745
2991
|
/**
|
|
2746
2992
|
* Checks the validity of the component.
|
|
2747
|
-
* @param {*} data
|
|
2748
|
-
* @param {
|
|
2749
|
-
* @param {*} row
|
|
2750
|
-
* @param {
|
|
2751
|
-
* @
|
|
2752
|
-
|
|
2753
|
-
|
|
2993
|
+
* @param {*} data - The data to check if the component is valid.
|
|
2994
|
+
* @param {boolean} dirty - If the component is dirty.
|
|
2995
|
+
* @param {*} row - The contextual row data for this component.
|
|
2996
|
+
* @param {boolean} silentCheck - If the check should be silent and not set the error messages.
|
|
2997
|
+
* @param {Array<any>} errors - An array of all errors that have occured so that it can be appended when another one occurs here.
|
|
2998
|
+
* @returns {boolean} - TRUE if the component is valid.
|
|
2999
|
+
*/
|
|
3000
|
+
checkValidity(data = null, dirty = false, row = null, silentCheck = false, errors = []) {
|
|
2754
3001
|
data = data || this.rootValue;
|
|
2755
3002
|
row = row || this.data;
|
|
2756
|
-
console.log('Deprecation warning: Component.checkValidity() will be deprecated in 6.x version of renderer. Use Component.validateComponent instead.');
|
|
2757
3003
|
return this.checkComponentValidity(data, dirty, row, { silentCheck }, errors);
|
|
2758
3004
|
}
|
|
2759
|
-
checkAsyncValidity(data, dirty, row, silentCheck, errors = []) {
|
|
2760
|
-
console.log('Deprecation warning: Component.checkAsyncValidity() will be deprecated in 6.x version of renderer. Use Component.validateComponent instead.');
|
|
3005
|
+
checkAsyncValidity(data = null, dirty = false, row = null, silentCheck = false, errors = []) {
|
|
2761
3006
|
return this.checkComponentValidity(data, dirty, row, { async: true, silentCheck }, errors);
|
|
2762
3007
|
}
|
|
2763
3008
|
/**
|
|
2764
3009
|
* Check the conditions, calculations, and validity of a single component and triggers an update if
|
|
2765
3010
|
* something changed.
|
|
2766
|
-
*
|
|
2767
|
-
* @param
|
|
2768
|
-
* @param
|
|
2769
|
-
*
|
|
2770
|
-
* @return boolean - If component is valid or not.
|
|
3011
|
+
* @param {*} data - The root data of the change event.
|
|
3012
|
+
* @param {*} flags - The flags from this change event.
|
|
3013
|
+
* @param {*} row - The contextual row data for this component.
|
|
3014
|
+
* @returns {void|boolean} - TRUE if no check should be performed on the component.
|
|
2771
3015
|
*/
|
|
2772
|
-
checkData(data, flags, row) {
|
|
3016
|
+
checkData(data = null, flags = null, row = null) {
|
|
2773
3017
|
data = data || this.rootValue;
|
|
2774
3018
|
flags = flags || {};
|
|
2775
3019
|
row = row || this.data;
|
|
@@ -2812,8 +3056,7 @@ export default class Component extends Element {
|
|
|
2812
3056
|
}
|
|
2813
3057
|
/**
|
|
2814
3058
|
* Check if a component is eligible for multiple validation
|
|
2815
|
-
*
|
|
2816
|
-
* @return {boolean}
|
|
3059
|
+
* @returns {boolean} - TRUE if the component is eligible for multiple validation.
|
|
2817
3060
|
*/
|
|
2818
3061
|
validateMultiple() {
|
|
2819
3062
|
return true;
|
|
@@ -2931,8 +3174,7 @@ export default class Component extends Element {
|
|
|
2931
3174
|
/**
|
|
2932
3175
|
* Determines if the value of this component is hidden from the user as if it is coming from the server, but is
|
|
2933
3176
|
* protected.
|
|
2934
|
-
*
|
|
2935
|
-
* @return {boolean|*}
|
|
3177
|
+
* @returns {boolean|*} - TRUE if the value is hidden.
|
|
2936
3178
|
*/
|
|
2937
3179
|
isValueHidden() {
|
|
2938
3180
|
if (this.component.protected && this.root.editing) {
|
|
@@ -2977,6 +3219,8 @@ export default class Component extends Element {
|
|
|
2977
3219
|
}
|
|
2978
3220
|
/**
|
|
2979
3221
|
* Prints out the value of this component as a string value.
|
|
3222
|
+
* @param {*} value - The value to print out.
|
|
3223
|
+
* @returns {string} - The string representation of the value.
|
|
2980
3224
|
*/
|
|
2981
3225
|
asString(value) {
|
|
2982
3226
|
value = value || this.getValue();
|
|
@@ -2984,15 +3228,14 @@ export default class Component extends Element {
|
|
|
2984
3228
|
}
|
|
2985
3229
|
/**
|
|
2986
3230
|
* Return if the component is disabled.
|
|
2987
|
-
* @
|
|
3231
|
+
* @returns {boolean} - TRUE if the component is disabled.
|
|
2988
3232
|
*/
|
|
2989
3233
|
get disabled() {
|
|
2990
3234
|
return this._disabled || this.parentDisabled;
|
|
2991
3235
|
}
|
|
2992
3236
|
/**
|
|
2993
3237
|
* Disable this component.
|
|
2994
|
-
*
|
|
2995
|
-
* @param {boolean} disabled
|
|
3238
|
+
* @param {boolean} disabled - TRUE to disable the component.
|
|
2996
3239
|
*/
|
|
2997
3240
|
set disabled(disabled) {
|
|
2998
3241
|
this._disabled = disabled;
|
|
@@ -3117,6 +3360,7 @@ export default class Component extends Element {
|
|
|
3117
3360
|
}
|
|
3118
3361
|
/**
|
|
3119
3362
|
* Get the element information.
|
|
3363
|
+
* @returns {*} - The components "input" DOM element information.
|
|
3120
3364
|
*/
|
|
3121
3365
|
elementInfo() {
|
|
3122
3366
|
const attributes = {
|
|
@@ -3155,14 +3399,12 @@ export default class Component extends Element {
|
|
|
3155
3399
|
const { left, top } = element.getBoundingClientRect();
|
|
3156
3400
|
window.scrollTo(left + window.scrollX, top + window.scrollY);
|
|
3157
3401
|
}
|
|
3158
|
-
focus(index) {
|
|
3402
|
+
focus(index = (this.refs.input.length - 1)) {
|
|
3159
3403
|
if ('beforeFocus' in this.parent) {
|
|
3160
3404
|
this.parent.beforeFocus(this);
|
|
3161
3405
|
}
|
|
3162
3406
|
if (this.refs.input?.length) {
|
|
3163
|
-
const focusingInput =
|
|
3164
|
-
? this.refs.input[index]
|
|
3165
|
-
: this.refs.input[this.refs.input.length - 1];
|
|
3407
|
+
const focusingInput = this.refs.input[index];
|
|
3166
3408
|
if (this.component.widget?.type === 'calendar') {
|
|
3167
3409
|
const sibling = focusingInput.nextSibling;
|
|
3168
3410
|
if (sibling) {
|
|
@@ -3182,6 +3424,7 @@ export default class Component extends Element {
|
|
|
3182
3424
|
}
|
|
3183
3425
|
/**
|
|
3184
3426
|
* Get `Formio` instance for working with files
|
|
3427
|
+
* @returns {import('@formio/core').Formio} - The Formio instance file service.
|
|
3185
3428
|
*/
|
|
3186
3429
|
get fileService() {
|
|
3187
3430
|
if (this.options.fileService) {
|