@formio/js 5.0.0-dev.5633.53931b9 → 5.0.0-dev.5633.fde3bc9
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 +47 -2
- package/dist/formio.builder.css +8 -8
- package/dist/formio.builder.min.css +1 -1
- package/dist/formio.embed.js +1 -1
- package/dist/formio.embed.min.js +1 -1
- package/dist/formio.embed.min.js.LICENSE.txt +1 -1
- package/dist/formio.form.css +8 -8
- package/dist/formio.form.js +615 -1196
- package/dist/formio.form.min.css +1 -1
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +3 -5
- package/dist/formio.full.css +8 -8
- package/dist/formio.full.js +659 -920
- package/dist/formio.full.min.css +1 -1
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +3 -5
- package/dist/formio.js +18 -18
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +1 -1
- package/dist/formio.utils.js +1829 -492
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +10 -4
- package/embed.d.ts +1 -0
- package/form.d.ts +1 -0
- package/lib/cjs/CDN.d.ts +1 -0
- package/lib/cjs/CDN.js +6 -3
- package/lib/cjs/Element.d.ts +86 -96
- package/lib/cjs/Element.js +68 -78
- package/lib/cjs/Embed.d.ts +1 -1
- package/lib/cjs/Embed.js +52 -12
- package/lib/cjs/Form.d.ts +365 -36
- package/lib/cjs/Form.js +50 -64
- package/lib/cjs/FormBuilder.d.ts +187 -2
- package/lib/cjs/FormBuilder.js +30 -8
- package/lib/cjs/InlineEmbed.d.ts +7 -0
- package/lib/cjs/InlineEmbed.js +116 -0
- package/lib/cjs/PDF.d.ts +11 -13
- package/lib/cjs/PDF.js +6 -8
- package/lib/cjs/Webform.d.ts +180 -139
- package/lib/cjs/Webform.js +308 -295
- 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 +43 -20
- package/lib/cjs/WizardBuilder.d.ts +1 -1
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.d.ts +8 -5
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.js +6 -3
- package/lib/cjs/components/Components.d.ts +4 -4
- package/lib/cjs/components/Components.js +3 -3
- package/lib/cjs/components/_classes/component/Component.d.ts +502 -269
- package/lib/cjs/components/_classes/component/Component.form.d.ts +6 -3
- package/lib/cjs/components/_classes/component/Component.form.js +5 -0
- package/lib/cjs/components/_classes/component/Component.js +435 -191
- 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/component/fixtures/comp6.d.ts +77 -0
- package/lib/cjs/components/_classes/component/fixtures/comp6.js +59 -0
- package/lib/cjs/components/_classes/component/fixtures/index.d.ts +2 -1
- package/lib/cjs/components/_classes/component/fixtures/index.js +3 -1
- package/lib/cjs/components/_classes/field/Field.d.ts +11 -2
- package/lib/cjs/components/_classes/field/Field.js +13 -1
- package/lib/cjs/components/_classes/input/Input.d.ts +4 -3
- package/lib/cjs/components/_classes/input/Input.js +8 -6
- 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/datagrid/fixtures/comp-with-checkboxes.d.ts +29 -0
- package/lib/cjs/components/datagrid/fixtures/comp-with-checkboxes.js +36 -0
- package/lib/cjs/components/datagrid/fixtures/index.d.ts +2 -1
- package/lib/cjs/components/datagrid/fixtures/index.js +3 -1
- package/lib/cjs/components/datamap/DataMap.d.ts +1 -0
- package/lib/cjs/components/datamap/DataMap.form.d.ts +6 -3
- package/lib/cjs/components/datamap/DataMap.form.js +5 -0
- package/lib/cjs/components/datetime/DateTime.d.ts +0 -14
- package/lib/cjs/components/datetime/DateTime.form.d.ts +6 -3
- package/lib/cjs/components/datetime/DateTime.form.js +5 -0
- package/lib/cjs/components/datetime/editForm/DateTime.edit.date.js +2 -2
- package/lib/cjs/components/day/Day.d.ts +23 -49
- package/lib/cjs/components/day/Day.form.d.ts +6 -3
- package/lib/cjs/components/day/Day.form.js +5 -0
- package/lib/cjs/components/day/Day.js +16 -21
- package/lib/cjs/components/day/fixtures/comp7.d.ts +109 -0
- package/lib/cjs/components/day/fixtures/comp7.js +109 -0
- package/lib/cjs/components/day/fixtures/index.d.ts +2 -1
- package/lib/cjs/components/day/fixtures/index.js +3 -1
- package/lib/cjs/components/editgrid/EditGrid.d.ts +7 -3
- package/lib/cjs/components/editgrid/EditGrid.form.d.ts +6 -3
- package/lib/cjs/components/editgrid/EditGrid.form.js +5 -0
- package/lib/cjs/components/editgrid/EditGrid.js +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/file/File.js +1 -2
- 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 +6 -6
- package/lib/cjs/components/recaptcha/ReCaptcha.d.ts +1 -1
- package/lib/cjs/components/recaptcha/ReCaptcha.form.d.ts +6 -3
- package/lib/cjs/components/recaptcha/ReCaptcha.form.js +5 -0
- package/lib/cjs/components/select/Select.d.ts +16 -39
- package/lib/cjs/components/select/Select.form.d.ts +6 -3
- package/lib/cjs/components/select/Select.form.js +5 -0
- package/lib/cjs/components/select/Select.js +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 +0 -14
- package/lib/cjs/components/signature/Signature.form.d.ts +6 -3
- package/lib/cjs/components/signature/Signature.form.js +5 -0
- package/lib/cjs/components/survey/Survey.d.ts +3 -15
- package/lib/cjs/components/survey/Survey.form.d.ts +6 -3
- package/lib/cjs/components/survey/Survey.form.js +5 -0
- package/lib/cjs/components/table/Table.d.ts +2 -1
- package/lib/cjs/components/table/Table.form.d.ts +6 -3
- package/lib/cjs/components/table/Table.form.js +5 -0
- package/lib/cjs/components/tabs/Tabs.d.ts +4 -4
- package/lib/cjs/components/tabs/Tabs.form.d.ts +6 -3
- package/lib/cjs/components/tabs/Tabs.form.js +5 -0
- package/lib/cjs/components/tabs/Tabs.js +1 -2
- package/lib/cjs/components/tags/Tags.d.ts +0 -14
- package/lib/cjs/components/tags/Tags.form.d.ts +6 -3
- package/lib/cjs/components/tags/Tags.form.js +5 -0
- package/lib/cjs/components/textarea/TextArea.d.ts +4 -9
- package/lib/cjs/components/textarea/TextArea.form.d.ts +6 -3
- package/lib/cjs/components/textarea/TextArea.form.js +5 -0
- package/lib/cjs/components/textarea/TextArea.js +2 -2
- package/lib/cjs/components/textfield/TextField.d.ts +14 -30
- package/lib/cjs/components/textfield/TextField.form.d.ts +6 -3
- package/lib/cjs/components/textfield/TextField.form.js +5 -0
- package/lib/cjs/components/textfield/TextField.js +16 -17
- package/lib/cjs/components/time/Time.form.d.ts +6 -3
- package/lib/cjs/components/time/Time.form.js +5 -0
- package/lib/cjs/components/unknown/Unknown.form.d.ts +5 -34
- package/lib/cjs/components/unknown/Unknown.form.js +4 -0
- package/lib/cjs/components/url/Url.form.d.ts +6 -3
- package/lib/cjs/components/url/Url.form.js +5 -0
- package/lib/cjs/components/well/Well.form.d.ts +6 -3
- package/lib/cjs/components/well/Well.form.js +5 -0
- package/lib/cjs/formio.embed.d.ts +1 -2
- package/lib/cjs/formio.embed.js +2 -100
- package/lib/cjs/formio.form.d.ts +11 -4
- package/lib/cjs/formio.form.js +13 -5
- package/lib/cjs/providers/Providers.d.ts +36 -5
- package/lib/cjs/providers/Providers.js +29 -0
- package/lib/cjs/providers/address/AddressProvider.d.ts +131 -12
- package/lib/cjs/providers/address/AddressProvider.js +88 -2
- package/lib/cjs/providers/address/AzureAddressProvider.d.ts +48 -1
- package/lib/cjs/providers/address/AzureAddressProvider.js +37 -0
- package/lib/cjs/providers/address/CustomAddressProvider.d.ts +27 -4
- package/lib/cjs/providers/address/CustomAddressProvider.js +34 -0
- package/lib/cjs/providers/address/GoogleAddressProvider.d.ts +130 -6
- package/lib/cjs/providers/address/GoogleAddressProvider.js +73 -1
- package/lib/cjs/providers/address/NominatimAddressProvider.d.ts +32 -7
- package/lib/cjs/providers/address/NominatimAddressProvider.js +33 -0
- package/lib/cjs/providers/address/index.d.ts +3 -1
- package/lib/cjs/providers/processor/fileProcessor.d.ts +7 -1
- package/lib/cjs/providers/processor/fileProcessor.js +6 -0
- package/lib/cjs/providers/storage/azure.d.ts +6 -13
- package/lib/cjs/providers/storage/azure.js +5 -0
- package/lib/cjs/providers/storage/base64.d.ts +5 -6
- package/lib/cjs/providers/storage/base64.js +4 -0
- package/lib/cjs/providers/storage/dropbox.d.ts +6 -4
- package/lib/cjs/providers/storage/dropbox.js +5 -0
- package/lib/cjs/providers/storage/googleDrive.d.ts +7 -5
- package/lib/cjs/providers/storage/googleDrive.js +6 -0
- package/lib/cjs/providers/storage/indexeddb.d.ts +5 -7
- package/lib/cjs/providers/storage/indexeddb.js +4 -0
- package/lib/cjs/providers/storage/s3.d.ts +6 -20
- package/lib/cjs/providers/storage/s3.js +5 -0
- package/lib/cjs/providers/storage/url.d.ts +6 -7
- package/lib/cjs/providers/storage/url.js +10 -0
- package/lib/cjs/providers/storage/util.d.ts +24 -1
- package/lib/cjs/providers/storage/util.js +18 -0
- package/lib/cjs/templates/Templates.d.ts +1 -0
- package/lib/cjs/translations/en.d.ts +2 -0
- package/lib/cjs/translations/en.js +3 -1
- package/lib/cjs/utils/ChoicesWrapper.d.ts +1 -1
- package/lib/cjs/utils/ChoicesWrapper.js +13 -2
- package/lib/cjs/utils/Evaluator.d.ts +6 -3
- package/lib/cjs/utils/Evaluator.js +11 -20
- package/lib/cjs/utils/builder.d.ts +9 -7
- package/lib/cjs/utils/builder.js +10 -5
- package/lib/cjs/utils/calendarUtils.d.ts +7 -13
- package/lib/cjs/utils/calendarUtils.js +10 -17
- package/lib/cjs/utils/formUtils.d.ts +43 -171
- package/lib/cjs/utils/formUtils.js +38 -569
- package/lib/cjs/utils/utils.d.ts +367 -221
- package/lib/cjs/utils/utils.js +335 -228
- package/lib/cjs/widgets/CalendarWidget.d.ts +9 -10
- package/lib/cjs/widgets/CalendarWidget.js +9 -11
- package/lib/mjs/CDN.d.ts +1 -0
- package/lib/mjs/CDN.js +6 -3
- package/lib/mjs/Element.d.ts +86 -96
- package/lib/mjs/Element.js +68 -78
- package/lib/mjs/Embed.d.ts +1 -1
- package/lib/mjs/Embed.js +52 -12
- package/lib/mjs/Form.d.ts +365 -36
- package/lib/mjs/Form.js +140 -57
- package/lib/mjs/FormBuilder.d.ts +187 -2
- package/lib/mjs/FormBuilder.js +32 -8
- package/lib/mjs/InlineEmbed.d.ts +7 -0
- package/lib/mjs/InlineEmbed.js +112 -0
- package/lib/mjs/PDF.d.ts +11 -13
- package/lib/mjs/PDF.js +6 -8
- package/lib/mjs/Webform.d.ts +180 -139
- package/lib/mjs/Webform.js +320 -307
- 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 +42 -19
- package/lib/mjs/WizardBuilder.d.ts +1 -1
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.d.ts +8 -5
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.js +6 -3
- package/lib/mjs/components/Components.d.ts +4 -4
- package/lib/mjs/components/Components.js +3 -3
- package/lib/mjs/components/_classes/component/Component.d.ts +502 -269
- package/lib/mjs/components/_classes/component/Component.form.d.ts +6 -3
- package/lib/mjs/components/_classes/component/Component.form.js +5 -0
- package/lib/mjs/components/_classes/component/Component.js +435 -191
- 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/component/fixtures/comp6.d.ts +77 -0
- package/lib/mjs/components/_classes/component/fixtures/comp6.js +57 -0
- package/lib/mjs/components/_classes/component/fixtures/index.d.ts +2 -1
- package/lib/mjs/components/_classes/component/fixtures/index.js +2 -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 +8 -6
- 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/datagrid/fixtures/comp-with-checkboxes.d.ts +29 -0
- package/lib/mjs/components/datagrid/fixtures/comp-with-checkboxes.js +34 -0
- package/lib/mjs/components/datagrid/fixtures/index.d.ts +2 -1
- package/lib/mjs/components/datagrid/fixtures/index.js +2 -1
- package/lib/mjs/components/datamap/DataMap.d.ts +1 -0
- package/lib/mjs/components/datamap/DataMap.form.d.ts +6 -3
- package/lib/mjs/components/datamap/DataMap.form.js +5 -0
- package/lib/mjs/components/datetime/DateTime.d.ts +0 -14
- package/lib/mjs/components/datetime/DateTime.form.d.ts +6 -3
- package/lib/mjs/components/datetime/DateTime.form.js +5 -0
- package/lib/mjs/components/datetime/editForm/DateTime.edit.date.js +1 -1
- package/lib/mjs/components/day/Day.d.ts +23 -49
- package/lib/mjs/components/day/Day.form.d.ts +6 -3
- package/lib/mjs/components/day/Day.form.js +5 -0
- package/lib/mjs/components/day/Day.js +16 -21
- package/lib/mjs/components/day/fixtures/comp7.d.ts +109 -0
- package/lib/mjs/components/day/fixtures/comp7.js +107 -0
- package/lib/mjs/components/day/fixtures/index.d.ts +2 -1
- package/lib/mjs/components/day/fixtures/index.js +2 -1
- package/lib/mjs/components/editgrid/EditGrid.d.ts +7 -3
- package/lib/mjs/components/editgrid/EditGrid.form.d.ts +6 -3
- package/lib/mjs/components/editgrid/EditGrid.form.js +5 -0
- package/lib/mjs/components/editgrid/EditGrid.js +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/file/File.js +1 -2
- 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 +6 -6
- package/lib/mjs/components/recaptcha/ReCaptcha.d.ts +1 -1
- package/lib/mjs/components/recaptcha/ReCaptcha.form.d.ts +6 -3
- package/lib/mjs/components/recaptcha/ReCaptcha.form.js +5 -0
- package/lib/mjs/components/select/Select.d.ts +16 -39
- package/lib/mjs/components/select/Select.form.d.ts +6 -3
- package/lib/mjs/components/select/Select.form.js +5 -0
- package/lib/mjs/components/select/Select.js +14 -17
- package/lib/mjs/components/selectboxes/SelectBoxes.d.ts +2 -17
- package/lib/mjs/components/selectboxes/SelectBoxes.form.d.ts +6 -3
- package/lib/mjs/components/selectboxes/SelectBoxes.form.js +5 -0
- package/lib/mjs/components/selectboxes/SelectBoxes.js +7 -9
- package/lib/mjs/components/signature/Signature.d.ts +0 -14
- package/lib/mjs/components/signature/Signature.form.d.ts +6 -3
- package/lib/mjs/components/signature/Signature.form.js +5 -0
- package/lib/mjs/components/survey/Survey.d.ts +3 -15
- package/lib/mjs/components/survey/Survey.form.d.ts +6 -3
- package/lib/mjs/components/survey/Survey.form.js +5 -0
- package/lib/mjs/components/table/Table.d.ts +2 -1
- package/lib/mjs/components/table/Table.form.d.ts +6 -3
- package/lib/mjs/components/table/Table.form.js +5 -0
- package/lib/mjs/components/tabs/Tabs.d.ts +4 -4
- package/lib/mjs/components/tabs/Tabs.form.d.ts +6 -3
- package/lib/mjs/components/tabs/Tabs.form.js +5 -0
- package/lib/mjs/components/tabs/Tabs.js +1 -2
- package/lib/mjs/components/tags/Tags.d.ts +0 -14
- package/lib/mjs/components/tags/Tags.form.d.ts +6 -3
- package/lib/mjs/components/tags/Tags.form.js +5 -0
- package/lib/mjs/components/textarea/TextArea.d.ts +4 -9
- package/lib/mjs/components/textarea/TextArea.form.d.ts +6 -3
- package/lib/mjs/components/textarea/TextArea.form.js +5 -0
- package/lib/mjs/components/textarea/TextArea.js +2 -2
- package/lib/mjs/components/textfield/TextField.d.ts +14 -30
- package/lib/mjs/components/textfield/TextField.form.d.ts +6 -3
- package/lib/mjs/components/textfield/TextField.form.js +5 -0
- package/lib/mjs/components/textfield/TextField.js +16 -17
- package/lib/mjs/components/time/Time.form.d.ts +6 -3
- package/lib/mjs/components/time/Time.form.js +5 -0
- package/lib/mjs/components/unknown/Unknown.form.d.ts +5 -34
- package/lib/mjs/components/unknown/Unknown.form.js +4 -0
- package/lib/mjs/components/url/Url.form.d.ts +6 -3
- package/lib/mjs/components/url/Url.form.js +5 -0
- package/lib/mjs/components/well/Well.form.d.ts +6 -3
- package/lib/mjs/components/well/Well.form.js +5 -0
- package/lib/mjs/formio.embed.d.ts +1 -2
- package/lib/mjs/formio.embed.js +2 -99
- package/lib/mjs/formio.form.d.ts +11 -4
- package/lib/mjs/formio.form.js +10 -3
- package/lib/mjs/providers/Providers.d.ts +36 -5
- package/lib/mjs/providers/Providers.js +29 -0
- package/lib/mjs/providers/address/AddressProvider.d.ts +131 -12
- package/lib/mjs/providers/address/AddressProvider.js +88 -2
- package/lib/mjs/providers/address/AzureAddressProvider.d.ts +48 -1
- package/lib/mjs/providers/address/AzureAddressProvider.js +37 -0
- package/lib/mjs/providers/address/CustomAddressProvider.d.ts +27 -4
- package/lib/mjs/providers/address/CustomAddressProvider.js +34 -0
- package/lib/mjs/providers/address/GoogleAddressProvider.d.ts +130 -6
- package/lib/mjs/providers/address/GoogleAddressProvider.js +73 -1
- package/lib/mjs/providers/address/NominatimAddressProvider.d.ts +32 -7
- package/lib/mjs/providers/address/NominatimAddressProvider.js +33 -0
- package/lib/mjs/providers/address/index.d.ts +3 -1
- package/lib/mjs/providers/processor/fileProcessor.d.ts +7 -1
- package/lib/mjs/providers/processor/fileProcessor.js +6 -0
- package/lib/mjs/providers/storage/azure.d.ts +6 -13
- package/lib/mjs/providers/storage/azure.js +5 -0
- package/lib/mjs/providers/storage/base64.d.ts +5 -6
- package/lib/mjs/providers/storage/base64.js +4 -0
- package/lib/mjs/providers/storage/dropbox.d.ts +6 -4
- package/lib/mjs/providers/storage/dropbox.js +5 -0
- package/lib/mjs/providers/storage/googleDrive.d.ts +7 -5
- package/lib/mjs/providers/storage/googleDrive.js +6 -0
- package/lib/mjs/providers/storage/indexeddb.d.ts +5 -7
- package/lib/mjs/providers/storage/indexeddb.js +4 -0
- package/lib/mjs/providers/storage/s3.d.ts +6 -20
- package/lib/mjs/providers/storage/s3.js +5 -0
- package/lib/mjs/providers/storage/url.d.ts +6 -7
- package/lib/mjs/providers/storage/url.js +10 -0
- package/lib/mjs/providers/storage/util.d.ts +24 -1
- package/lib/mjs/providers/storage/util.js +18 -0
- package/lib/mjs/templates/Templates.d.ts +1 -0
- package/lib/mjs/translations/en.d.ts +2 -0
- package/lib/mjs/translations/en.js +3 -1
- package/lib/mjs/utils/ChoicesWrapper.d.ts +1 -1
- package/lib/mjs/utils/ChoicesWrapper.js +13 -2
- package/lib/mjs/utils/Evaluator.d.ts +6 -3
- package/lib/mjs/utils/Evaluator.js +9 -20
- package/lib/mjs/utils/builder.d.ts +9 -7
- package/lib/mjs/utils/builder.js +10 -5
- package/lib/mjs/utils/calendarUtils.d.ts +7 -13
- package/lib/mjs/utils/calendarUtils.js +10 -17
- package/lib/mjs/utils/formUtils.d.ts +43 -171
- package/lib/mjs/utils/formUtils.js +6 -554
- package/lib/mjs/utils/utils.d.ts +367 -221
- package/lib/mjs/utils/utils.js +329 -222
- 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
package/lib/cjs/Webform.js
CHANGED
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const lodash_1 = __importDefault(require("lodash"));
|
|
7
7
|
const moment_1 = __importDefault(require("moment"));
|
|
8
8
|
const compare_versions_1 = require("compare-versions");
|
|
9
|
-
const core_1 = require("@formio/core");
|
|
10
9
|
const EventEmitter_1 = __importDefault(require("./EventEmitter"));
|
|
11
10
|
const i18n_1 = __importDefault(require("./i18n"));
|
|
12
11
|
const Formio_1 = require("./Formio");
|
|
@@ -18,22 +17,32 @@ const formUtils_1 = require("./utils/formUtils");
|
|
|
18
17
|
Formio_1.Formio.forms = {};
|
|
19
18
|
// Allow people to register components.
|
|
20
19
|
Formio_1.Formio.registerComponent = Components_1.default.setComponent;
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param {any} icons - The icons to use.
|
|
23
|
+
* @returns {any} - The icon set.
|
|
24
|
+
*/
|
|
21
25
|
function getIconSet(icons) {
|
|
22
|
-
if (icons ===
|
|
23
|
-
return
|
|
26
|
+
if (icons === "fontawesome") {
|
|
27
|
+
return "fa";
|
|
24
28
|
}
|
|
25
|
-
return icons ||
|
|
29
|
+
return icons || "";
|
|
26
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @param {any} options - The options to get.
|
|
34
|
+
* @returns {any} - The options.
|
|
35
|
+
*/
|
|
27
36
|
function getOptions(options) {
|
|
28
37
|
options = lodash_1.default.defaults(options, {
|
|
29
38
|
submitOnEnter: false,
|
|
30
|
-
iconset: getIconSet(
|
|
39
|
+
iconset: getIconSet(options && options.icons ? options.icons : Formio_1.Formio.icons),
|
|
31
40
|
i18next: null,
|
|
32
41
|
saveDraft: false,
|
|
33
42
|
alwaysDirty: false,
|
|
34
43
|
saveDraftThrottle: 5000,
|
|
35
|
-
display:
|
|
36
|
-
cdnUrl: Formio_1.Formio.cdn.baseUrl
|
|
44
|
+
display: "form",
|
|
45
|
+
cdnUrl: Formio_1.Formio.cdn.baseUrl,
|
|
37
46
|
});
|
|
38
47
|
if (!options.events) {
|
|
39
48
|
options.events = new EventEmitter_1.default();
|
|
@@ -53,36 +62,36 @@ function getOptions(options) {
|
|
|
53
62
|
* @typedef {{[key: string]: JSON}} JSONObject
|
|
54
63
|
*/
|
|
55
64
|
/**
|
|
56
|
-
* @typedef {
|
|
57
|
-
* @property {
|
|
58
|
-
* @property {
|
|
59
|
-
* @property {
|
|
60
|
-
* @property {
|
|
61
|
-
* @property {
|
|
62
|
-
* @property {
|
|
63
|
-
* @property {
|
|
64
|
-
* @property {
|
|
65
|
-
* @property {
|
|
66
|
-
* @property {
|
|
65
|
+
* @typedef {object} FormioHooks
|
|
66
|
+
* @property {Function} [beforeSubmit] - A function that is called before the form is submitted.
|
|
67
|
+
* @property {Function} [beforeCancel] - A function that is called before the form is canceled.
|
|
68
|
+
* @property {Function} [beforeNext] - A function that is called before moving to the next page in a multi-page form.
|
|
69
|
+
* @property {Function} [beforePrev] - A function that is called before moving to the previous page in a multi-page form.
|
|
70
|
+
* @property {Function} [attachComponent] - A function that is called when a component is attached to the form.
|
|
71
|
+
* @property {Function} [setDataValue] - A function that is called when setting the value of a data component.
|
|
72
|
+
* @property {Function} [addComponents] - A function that is called when adding multiple components to the form.
|
|
73
|
+
* @property {Function} [addComponent] - A function that is called when adding a single component to the form.
|
|
74
|
+
* @property {Function} [customValidation] - A function that is called for custom validation of the form.
|
|
75
|
+
* @property {Function} [attachWebform] - A function that is called when attaching a webform to the form.
|
|
67
76
|
*/
|
|
68
77
|
/**
|
|
69
|
-
* @typedef {
|
|
70
|
-
* @property {string[]} [addAttr]
|
|
71
|
-
* @property {string[]} [addTags]
|
|
72
|
-
* @property {string[]} [allowedAttrs]
|
|
73
|
-
* @property {string[]} [allowedTags]
|
|
74
|
-
* @property {string[]} [allowedUriRegex]
|
|
75
|
-
* @property {string[]} [addUriSafeAttr]
|
|
78
|
+
* @typedef {object} SanitizeConfig
|
|
79
|
+
* @property {string[]} [addAttr] - The attributes to add.
|
|
80
|
+
* @property {string[]} [addTags] - The tags to add.
|
|
81
|
+
* @property {string[]} [allowedAttrs] - The allowed attributes.
|
|
82
|
+
* @property {string[]} [allowedTags] - The allowed tags.
|
|
83
|
+
* @property {string[]} [allowedUriRegex] - The allowed URI regex.
|
|
84
|
+
* @property {string[]} [addUriSafeAttr] - The URI safe attributes.
|
|
76
85
|
*/
|
|
77
86
|
/**
|
|
78
|
-
* @typedef {
|
|
79
|
-
* @property {boolean} [showPrevious]
|
|
80
|
-
* @property {boolean} [showNext]
|
|
81
|
-
* @property {boolean} [showCancel]
|
|
82
|
-
* @property {boolean} [showSubmit]
|
|
87
|
+
* @typedef {object} ButtonSettings
|
|
88
|
+
* @property {boolean} [showPrevious] - Show the "Previous" button.
|
|
89
|
+
* @property {boolean} [showNext] - Show the "Next" button.
|
|
90
|
+
* @property {boolean} [showCancel] - Show the "Cancel" button.
|
|
91
|
+
* @property {boolean} [showSubmit] - Show the "Submit" button.
|
|
83
92
|
*/
|
|
84
93
|
/**
|
|
85
|
-
* @typedef {
|
|
94
|
+
* @typedef {object} FormOptions
|
|
86
95
|
* @property {boolean} [saveDraft] - Enable the save draft feature.
|
|
87
96
|
* @property {number} [saveDraftThrottle] - The throttle for the save draft feature.
|
|
88
97
|
* @property {boolean} [readOnly] - Set this form to readOnly.
|
|
@@ -100,7 +109,7 @@ function getOptions(options) {
|
|
|
100
109
|
* @property {string} [componentErrorClass] - The error class for components.
|
|
101
110
|
* @property {any} [templates] - The templates for this form.
|
|
102
111
|
* @property {string} [iconset] - The iconset for this form.
|
|
103
|
-
* @property {Component[]} [components] - The components for this form.
|
|
112
|
+
* @property {import('@formio/core').Component[]} [components] - The components for this form.
|
|
104
113
|
* @property {{[key: string]: boolean}} [disabled] - Disabled components for this form.
|
|
105
114
|
* @property {boolean} [showHiddenFields] - Show hidden fields.
|
|
106
115
|
* @property {{[key: string]: boolean}} [hide] - Hidden components for this form.
|
|
@@ -117,30 +126,28 @@ function getOptions(options) {
|
|
|
117
126
|
* @property {boolean} [sanitize] - Sanitize the form.
|
|
118
127
|
* @property {SanitizeConfig} [sanitizeConfig] - The sanitize configuration for this form.
|
|
119
128
|
* @property {ButtonSettings} [buttonSettings] - The button settings for this form.
|
|
120
|
-
* @property {
|
|
129
|
+
* @property {object} [breadcrumbSettings] - The breadcrumb settings for this form.
|
|
121
130
|
* @property {boolean} [allowPrevious] - Allow the previous button (for Wizard forms).
|
|
122
131
|
* @property {string[]} [wizardButtonOrder] - The order of the buttons (for Wizard forms).
|
|
123
132
|
* @property {boolean} [showCheckboxBackground] - Show the checkbox background.
|
|
133
|
+
* @property {boolean} [inputsOnly] - Only show inputs in the form and no labels.
|
|
134
|
+
* @property {boolean} [building] - If we are in the process of building the form.
|
|
124
135
|
* @property {number} [zoom] - The zoom for PDF forms.
|
|
125
136
|
*/
|
|
126
|
-
/**
|
|
127
|
-
* Renders a Form.io form within the webpage.
|
|
128
|
-
*/
|
|
129
137
|
class Webform extends NestedDataComponent_1.default {
|
|
130
138
|
/**
|
|
131
139
|
* Creates a new Form instance.
|
|
132
|
-
*
|
|
133
|
-
* @param {
|
|
134
|
-
* @param {FormOptions} [options] - The options to create a new form instance.
|
|
140
|
+
* @param {HTMLElement | object | import('Form').FormOptions} [elementOrOptions] - The DOM element to render this form within or the options to create this form instance.
|
|
141
|
+
* @param {import('Form').FormOptions} [options] - The options to create a new form instance.
|
|
135
142
|
*/
|
|
136
|
-
constructor(elementOrOptions, options) {
|
|
143
|
+
constructor(elementOrOptions, options = undefined) {
|
|
137
144
|
let element, formOptions;
|
|
138
145
|
if (elementOrOptions instanceof HTMLElement || options) {
|
|
139
146
|
element = elementOrOptions;
|
|
140
|
-
formOptions = options;
|
|
147
|
+
formOptions = options || {};
|
|
141
148
|
}
|
|
142
149
|
else {
|
|
143
|
-
formOptions = elementOrOptions;
|
|
150
|
+
formOptions = elementOrOptions || {};
|
|
144
151
|
}
|
|
145
152
|
super(null, getOptions(formOptions));
|
|
146
153
|
this.executeShortcuts = (event) => {
|
|
@@ -150,15 +157,15 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
150
157
|
}
|
|
151
158
|
const ctrl = event.ctrlKey || event.metaKey;
|
|
152
159
|
const keyCode = event.keyCode;
|
|
153
|
-
let char =
|
|
160
|
+
let char = "";
|
|
154
161
|
if (65 <= keyCode && keyCode <= 90) {
|
|
155
162
|
char = String.fromCharCode(keyCode);
|
|
156
163
|
}
|
|
157
164
|
else if (keyCode === 13) {
|
|
158
|
-
char =
|
|
165
|
+
char = "Enter";
|
|
159
166
|
}
|
|
160
167
|
else if (keyCode === 27) {
|
|
161
|
-
char =
|
|
168
|
+
char = "Esc";
|
|
162
169
|
}
|
|
163
170
|
lodash_1.default.each(this.shortcuts, (shortcut) => {
|
|
164
171
|
if (shortcut.ctrl && !ctrl) {
|
|
@@ -181,12 +188,12 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
181
188
|
* The type of this element.
|
|
182
189
|
* @type {string}
|
|
183
190
|
*/
|
|
184
|
-
this.type =
|
|
185
|
-
this._src =
|
|
191
|
+
this.type = "form";
|
|
192
|
+
this._src = "";
|
|
186
193
|
this._loading = false;
|
|
187
194
|
this._form = {};
|
|
188
195
|
this.draftEnabled = false;
|
|
189
|
-
this.savingDraft =
|
|
196
|
+
this.savingDraft = false;
|
|
190
197
|
if (this.options.saveDraftThrottle) {
|
|
191
198
|
this.triggerSaveDraft = lodash_1.default.throttle(this.saveDraft.bind(this), this.options.saveDraftThrottle);
|
|
192
199
|
}
|
|
@@ -200,13 +207,11 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
200
207
|
this.nosubmit = false;
|
|
201
208
|
/**
|
|
202
209
|
* Determines if the form has tried to be submitted, error or not.
|
|
203
|
-
*
|
|
204
210
|
* @type {boolean}
|
|
205
211
|
*/
|
|
206
212
|
this.submitted = false;
|
|
207
213
|
/**
|
|
208
214
|
* Determines if the form is being submitted at the moment.
|
|
209
|
-
*
|
|
210
215
|
* @type {boolean}
|
|
211
216
|
*/
|
|
212
217
|
this.submitting = false;
|
|
@@ -238,7 +243,6 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
238
243
|
/**
|
|
239
244
|
* Promise that executes when the form is ready and rendered.
|
|
240
245
|
* @type {Promise}
|
|
241
|
-
*
|
|
242
246
|
* @example
|
|
243
247
|
* import Webform from '@formio/js/Webform';
|
|
244
248
|
* let form = new Webform(document.getElementById('formio'));
|
|
@@ -250,21 +254,18 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
250
254
|
this.formReady = new Promise((resolve, reject) => {
|
|
251
255
|
/**
|
|
252
256
|
* Called when the formReady state of this form has been resolved.
|
|
253
|
-
*
|
|
254
|
-
* @type {function}
|
|
257
|
+
* @type {Function}
|
|
255
258
|
*/
|
|
256
259
|
this.formReadyResolve = resolve;
|
|
257
260
|
/**
|
|
258
261
|
* Called when this form could not load and is rejected.
|
|
259
|
-
*
|
|
260
|
-
* @type {function}
|
|
262
|
+
* @type {Function}
|
|
261
263
|
*/
|
|
262
264
|
this.formReadyReject = reject;
|
|
263
265
|
});
|
|
264
266
|
/**
|
|
265
267
|
* Promise that executes when the submission is ready and rendered.
|
|
266
268
|
* @type {Promise}
|
|
267
|
-
*
|
|
268
269
|
* @example
|
|
269
270
|
* import Webform from '@formio/js/Webform';
|
|
270
271
|
* let form = new Webform(document.getElementById('formio'));
|
|
@@ -276,14 +277,12 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
276
277
|
this.submissionReady = new Promise((resolve, reject) => {
|
|
277
278
|
/**
|
|
278
279
|
* Called when the formReady state of this form has been resolved.
|
|
279
|
-
*
|
|
280
|
-
* @type {function}
|
|
280
|
+
* @type {Function}
|
|
281
281
|
*/
|
|
282
282
|
this.submissionReadyResolve = resolve;
|
|
283
283
|
/**
|
|
284
284
|
* Called when this form could not load and is rejected.
|
|
285
|
-
*
|
|
286
|
-
* @type {function}
|
|
285
|
+
* @type {Function}
|
|
287
286
|
*/
|
|
288
287
|
this.submissionReadyReject = reject;
|
|
289
288
|
});
|
|
@@ -292,20 +291,19 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
292
291
|
this.language = this.i18next.language;
|
|
293
292
|
// See if we need to restore the draft from a user.
|
|
294
293
|
if (this.options.saveDraft) {
|
|
295
|
-
this.
|
|
296
|
-
|
|
294
|
+
if (this.options.skipDraftRestore) {
|
|
295
|
+
this.draftEnabled = true;
|
|
296
|
+
this.savingDraft = false;
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
this.formReady.then(() => {
|
|
297
300
|
const user = Formio_1.Formio.getUser();
|
|
298
301
|
// Only restore a draft if the submission isn't explicitly set.
|
|
299
302
|
if (user && !this.submissionSet) {
|
|
300
303
|
this.restoreDraft(user._id);
|
|
301
304
|
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
// Enable drafts
|
|
305
|
-
this.draftEnabled = true;
|
|
306
|
-
this.savingDraft = false;
|
|
307
|
-
}
|
|
308
|
-
});
|
|
305
|
+
});
|
|
306
|
+
}
|
|
309
307
|
}
|
|
310
308
|
this.component.clearOnHide = false;
|
|
311
309
|
// Ensure the root is set to this component.
|
|
@@ -324,9 +322,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
324
322
|
}
|
|
325
323
|
/**
|
|
326
324
|
* Sets the language for this form.
|
|
327
|
-
*
|
|
328
|
-
* @param lang
|
|
329
|
-
* @return {Promise}
|
|
325
|
+
* @param {string} lang - The language to use (e.g. 'en', 'sp', etc.)
|
|
330
326
|
*/
|
|
331
327
|
set language(lang) {
|
|
332
328
|
if (!this.i18next) {
|
|
@@ -341,7 +337,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
341
337
|
return;
|
|
342
338
|
}
|
|
343
339
|
this.rebuild();
|
|
344
|
-
this.emit(
|
|
340
|
+
this.emit("languageChanged");
|
|
345
341
|
});
|
|
346
342
|
}
|
|
347
343
|
get componentComponents() {
|
|
@@ -352,31 +348,25 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
352
348
|
}
|
|
353
349
|
/**
|
|
354
350
|
* Add a language for translations
|
|
355
|
-
*
|
|
356
|
-
* @param
|
|
357
|
-
* @param
|
|
358
|
-
* @param active
|
|
359
|
-
* @return {*}
|
|
351
|
+
* @param {string} code - The language code for the language being added.
|
|
352
|
+
* @param {object} lang - The language translations.
|
|
353
|
+
* @param {boolean} [active] - If this language should be set as the active language.
|
|
360
354
|
*/
|
|
361
355
|
addLanguage(code, lang, active = false) {
|
|
362
356
|
if (this.i18next) {
|
|
363
357
|
var translations = lodash_1.default.assign((0, utils_1.fastCloneDeep)(i18n_1.default.resources.en.translation), lang);
|
|
364
|
-
this.i18next.addResourceBundle(code,
|
|
358
|
+
this.i18next.addResourceBundle(code, "translation", translations, true, true);
|
|
365
359
|
if (active) {
|
|
366
360
|
this.language = code;
|
|
367
361
|
}
|
|
368
362
|
}
|
|
369
363
|
}
|
|
370
364
|
keyboardCatchableElement(element) {
|
|
371
|
-
if (element.nodeName ===
|
|
365
|
+
if (element.nodeName === "TEXTAREA") {
|
|
372
366
|
return false;
|
|
373
367
|
}
|
|
374
|
-
if (element.nodeName ===
|
|
375
|
-
return [
|
|
376
|
-
'text',
|
|
377
|
-
'email',
|
|
378
|
-
'password'
|
|
379
|
-
].indexOf(element.type) === -1;
|
|
368
|
+
if (element.nodeName === "INPUT") {
|
|
369
|
+
return ["text", "email", "password"].indexOf(element.type) === -1;
|
|
380
370
|
}
|
|
381
371
|
return true;
|
|
382
372
|
}
|
|
@@ -385,21 +375,21 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
385
375
|
return;
|
|
386
376
|
}
|
|
387
377
|
shortcut = lodash_1.default.capitalize(shortcut);
|
|
388
|
-
if (shortcut ===
|
|
378
|
+
if (shortcut === "Enter" || shortcut === "Esc") {
|
|
389
379
|
// Restrict Enter and Esc only for buttons
|
|
390
|
-
if (element.tagName !==
|
|
380
|
+
if (element.tagName !== "BUTTON") {
|
|
391
381
|
return;
|
|
392
382
|
}
|
|
393
383
|
this.shortcuts.push({
|
|
394
384
|
shortcut,
|
|
395
|
-
element
|
|
385
|
+
element,
|
|
396
386
|
});
|
|
397
387
|
}
|
|
398
388
|
else {
|
|
399
389
|
this.shortcuts.push({
|
|
400
390
|
ctrl: true,
|
|
401
391
|
shortcut,
|
|
402
|
-
element
|
|
392
|
+
element,
|
|
403
393
|
});
|
|
404
394
|
}
|
|
405
395
|
}
|
|
@@ -409,24 +399,27 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
409
399
|
}
|
|
410
400
|
lodash_1.default.remove(this.shortcuts, {
|
|
411
401
|
shortcut,
|
|
412
|
-
element
|
|
402
|
+
element,
|
|
413
403
|
});
|
|
414
404
|
}
|
|
415
405
|
/**
|
|
416
406
|
* Get the embed source of the form.
|
|
417
|
-
*
|
|
418
|
-
* @returns {string}
|
|
407
|
+
* @returns {string} - The source of the form.
|
|
419
408
|
*/
|
|
420
409
|
get src() {
|
|
421
410
|
return this._src;
|
|
422
411
|
}
|
|
423
412
|
/**
|
|
424
413
|
* Loads the submission if applicable.
|
|
414
|
+
* @returns {Promise} - The promise that is triggered when the submission is loaded.
|
|
425
415
|
*/
|
|
426
416
|
loadSubmission() {
|
|
427
417
|
this.loadingSubmission = true;
|
|
428
418
|
if (this.formio.submissionId) {
|
|
429
|
-
this.onSubmission = this.formio
|
|
419
|
+
this.onSubmission = this.formio
|
|
420
|
+
.loadSubmission()
|
|
421
|
+
.then((submission) => this.setSubmission(submission), (err) => this.submissionReadyReject(err))
|
|
422
|
+
.catch((err) => this.submissionReadyReject(err));
|
|
430
423
|
}
|
|
431
424
|
else {
|
|
432
425
|
this.submissionReadyResolve();
|
|
@@ -435,18 +428,21 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
435
428
|
}
|
|
436
429
|
/**
|
|
437
430
|
* Set the src of the form renderer.
|
|
438
|
-
*
|
|
439
|
-
* @param
|
|
440
|
-
* @
|
|
431
|
+
* @param {string} value - The source value to set.
|
|
432
|
+
* @param {any} options - The options to set.
|
|
433
|
+
* @returns {Promise} - The promise that is triggered when the form is set.
|
|
441
434
|
*/
|
|
442
435
|
setSrc(value, options) {
|
|
443
436
|
if (this.setUrl(value, options)) {
|
|
444
437
|
this.nosubmit = false;
|
|
445
|
-
return this.formio
|
|
438
|
+
return this.formio
|
|
439
|
+
.loadForm({ params: { live: 1 } })
|
|
440
|
+
.then((form) => {
|
|
446
441
|
const setForm = this.setForm(form);
|
|
447
442
|
this.loadSubmission();
|
|
448
443
|
return setForm;
|
|
449
|
-
})
|
|
444
|
+
})
|
|
445
|
+
.catch((err) => {
|
|
450
446
|
console.warn(err);
|
|
451
447
|
this.formReadyReject(err);
|
|
452
448
|
});
|
|
@@ -455,9 +451,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
455
451
|
}
|
|
456
452
|
/**
|
|
457
453
|
* Set the Form source, which is typically the Form.io embed URL.
|
|
458
|
-
*
|
|
459
454
|
* @param {string} value - The value of the form embed url.
|
|
460
|
-
*
|
|
461
455
|
* @example
|
|
462
456
|
* import Webform from '@formio/js/Webform';
|
|
463
457
|
* let form = new Webform(document.getElementById('formio'));
|
|
@@ -471,28 +465,25 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
471
465
|
}
|
|
472
466
|
/**
|
|
473
467
|
* Get the embed source of the form.
|
|
474
|
-
*
|
|
475
|
-
* @returns {string}
|
|
468
|
+
* @returns {string} - returns the source of the form.
|
|
476
469
|
*/
|
|
477
470
|
get url() {
|
|
478
471
|
return this._src;
|
|
479
472
|
}
|
|
480
473
|
/**
|
|
481
474
|
* Sets the url of the form renderer.
|
|
482
|
-
*
|
|
483
|
-
* @param
|
|
484
|
-
* @
|
|
475
|
+
* @param {string} value - The value to set the url to.
|
|
476
|
+
* @param {any} options - The options to set.
|
|
477
|
+
* @returns {boolean} - TRUE means the url was set, FALSE otherwise.
|
|
485
478
|
*/
|
|
486
479
|
setUrl(value, options) {
|
|
487
|
-
if (!value ||
|
|
488
|
-
(typeof value !== 'string') ||
|
|
489
|
-
(value === this._src)) {
|
|
480
|
+
if (!value || typeof value !== "string" || value === this._src) {
|
|
490
481
|
return false;
|
|
491
482
|
}
|
|
492
483
|
this._src = value;
|
|
493
484
|
this.nosubmit = true;
|
|
494
485
|
this.formio = this.options.formio = new Formio_1.Formio(value, options);
|
|
495
|
-
if (this.type ===
|
|
486
|
+
if (this.type === "form") {
|
|
496
487
|
// Set the options source so this can be passed to other components.
|
|
497
488
|
this.options.src = value;
|
|
498
489
|
}
|
|
@@ -500,7 +491,6 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
500
491
|
}
|
|
501
492
|
/**
|
|
502
493
|
* Set the form source but don't initialize the form and submission from the url.
|
|
503
|
-
*
|
|
504
494
|
* @param {string} value - The value of the form embed url.
|
|
505
495
|
*/
|
|
506
496
|
set url(value) {
|
|
@@ -508,7 +498,6 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
508
498
|
}
|
|
509
499
|
/**
|
|
510
500
|
* Called when both the form and submission have been loaded.
|
|
511
|
-
*
|
|
512
501
|
* @returns {Promise} - The promise to trigger when both form and submission have loaded.
|
|
513
502
|
*/
|
|
514
503
|
get ready() {
|
|
@@ -520,7 +509,6 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
520
509
|
}
|
|
521
510
|
/**
|
|
522
511
|
* Returns if this form is loading.
|
|
523
|
-
*
|
|
524
512
|
* @returns {boolean} - TRUE means the form is loading, FALSE otherwise.
|
|
525
513
|
*/
|
|
526
514
|
get loading() {
|
|
@@ -528,18 +516,17 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
528
516
|
}
|
|
529
517
|
/**
|
|
530
518
|
* Set the loading state for this form, and also show the loader spinner.
|
|
531
|
-
*
|
|
532
519
|
* @param {boolean} loading - If this form should be "loading" or not.
|
|
533
520
|
*/
|
|
534
521
|
set loading(loading) {
|
|
535
522
|
if (this._loading !== loading) {
|
|
536
523
|
this._loading = loading;
|
|
537
524
|
if (!this.loader && loading) {
|
|
538
|
-
this.loader = this.ce(
|
|
539
|
-
class:
|
|
525
|
+
this.loader = this.ce("div", {
|
|
526
|
+
class: "loader-wrapper",
|
|
540
527
|
});
|
|
541
|
-
const spinner = this.ce(
|
|
542
|
-
class:
|
|
528
|
+
const spinner = this.ce("div", {
|
|
529
|
+
class: "loader text-center",
|
|
543
530
|
});
|
|
544
531
|
this.loader.appendChild(spinner);
|
|
545
532
|
}
|
|
@@ -562,7 +549,6 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
562
549
|
}
|
|
563
550
|
/**
|
|
564
551
|
* Sets the JSON schema for the form to be rendered.
|
|
565
|
-
*
|
|
566
552
|
* @example
|
|
567
553
|
* import Webform from '@formio/js/Webform';
|
|
568
554
|
* let form = new Webform(document.getElementById('formio'));
|
|
@@ -590,12 +576,11 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
590
576
|
* }
|
|
591
577
|
* ]
|
|
592
578
|
* });
|
|
593
|
-
*
|
|
594
|
-
* @param {
|
|
595
|
-
* @
|
|
596
|
-
* @returns {*}
|
|
579
|
+
* @param {object} form - The JSON schema of the form @see https://examples.form.io/example for an example JSON schema.
|
|
580
|
+
* @param {any} flags - Any flags to apply when setting the form.
|
|
581
|
+
* @returns {Promise} - The promise that is triggered when the form is set.
|
|
597
582
|
*/
|
|
598
|
-
setForm(form, flags) {
|
|
583
|
+
setForm(form, flags = {}) {
|
|
599
584
|
var _a, _b, _c;
|
|
600
585
|
const isFormAlreadySet = this._form && ((_a = this._form.components) === null || _a === void 0 ? void 0 : _a.length);
|
|
601
586
|
try {
|
|
@@ -626,17 +611,19 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
626
611
|
}
|
|
627
612
|
// Use the sanitize config from the form settings or the global sanitize config if it is not provided in the options
|
|
628
613
|
if (!this.options.sanitizeConfig && !this.builderMode) {
|
|
629
|
-
this.options.sanitizeConfig =
|
|
614
|
+
this.options.sanitizeConfig =
|
|
615
|
+
lodash_1.default.get(form, "settings.sanitizeConfig") ||
|
|
616
|
+
lodash_1.default.get(form, "globalSettings.sanitizeConfig");
|
|
630
617
|
}
|
|
631
|
-
if (
|
|
618
|
+
if ("schema" in form && (0, compare_versions_1.compareVersions)(form.schema, "1.x") > 0) {
|
|
632
619
|
this.ready.then(() => {
|
|
633
|
-
this.setAlert(
|
|
620
|
+
this.setAlert("alert alert-danger", "Form schema is for a newer version, please upgrade your renderer. Some functionality may not work.");
|
|
634
621
|
});
|
|
635
622
|
}
|
|
636
623
|
// See if they pass a module, and evaluate it if so.
|
|
637
624
|
if (form && form.module) {
|
|
638
625
|
let formModule = null;
|
|
639
|
-
if (typeof form.module ===
|
|
626
|
+
if (typeof form.module === "string") {
|
|
640
627
|
try {
|
|
641
628
|
formModule = this.evaluate(`return ${form.module}`);
|
|
642
629
|
}
|
|
@@ -658,7 +645,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
658
645
|
this.initialized = false;
|
|
659
646
|
const rebuild = this.rebuild() || Promise.resolve();
|
|
660
647
|
return rebuild.then(() => {
|
|
661
|
-
this.emit(
|
|
648
|
+
this.emit("formLoad", form);
|
|
662
649
|
this.triggerCaptcha();
|
|
663
650
|
// Make sure to trigger onChange after a render event occurs to speed up form rendering.
|
|
664
651
|
setTimeout(() => {
|
|
@@ -670,37 +657,33 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
670
657
|
}
|
|
671
658
|
/**
|
|
672
659
|
* Gets the form object.
|
|
673
|
-
*
|
|
674
|
-
* @returns {Object} - The form JSON schema.
|
|
660
|
+
* @returns {object} - The form JSON schema.
|
|
675
661
|
*/
|
|
676
662
|
get form() {
|
|
677
663
|
if (!this._form) {
|
|
678
664
|
this._form = {
|
|
679
|
-
components: []
|
|
665
|
+
components: [],
|
|
680
666
|
};
|
|
681
667
|
}
|
|
682
668
|
return this._form;
|
|
683
669
|
}
|
|
684
670
|
/**
|
|
685
671
|
* Sets the form value.
|
|
686
|
-
*
|
|
687
672
|
* @alias setForm
|
|
688
|
-
* @param {
|
|
673
|
+
* @param {object} form - The form schema object.
|
|
689
674
|
*/
|
|
690
675
|
set form(form) {
|
|
691
676
|
this.setForm(form);
|
|
692
677
|
}
|
|
693
678
|
/**
|
|
694
679
|
* Returns the submission object that was set within this form.
|
|
695
|
-
*
|
|
696
|
-
* @returns {Object}
|
|
680
|
+
* @returns {object} - The submission object.
|
|
697
681
|
*/
|
|
698
682
|
get submission() {
|
|
699
683
|
return this.getValue();
|
|
700
684
|
}
|
|
701
685
|
/**
|
|
702
686
|
* Sets the submission of a form.
|
|
703
|
-
*
|
|
704
687
|
* @example
|
|
705
688
|
* import Webform from '@formio/js/Webform';
|
|
706
689
|
* let form = new Webform(document.getElementById('formio'));
|
|
@@ -710,8 +693,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
710
693
|
* lastName: 'Smith',
|
|
711
694
|
* email: 'joe@example.com'
|
|
712
695
|
* }};
|
|
713
|
-
*
|
|
714
|
-
* @param {Object} submission - The Form.io submission object.
|
|
696
|
+
* @param {object} submission - The Form.io submission object.
|
|
715
697
|
*/
|
|
716
698
|
set submission(submission) {
|
|
717
699
|
this.setSubmission(submission);
|
|
@@ -730,104 +712,108 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
730
712
|
}
|
|
731
713
|
/**
|
|
732
714
|
* Sets a submission and returns the promise when it is ready.
|
|
733
|
-
* @param submission
|
|
734
|
-
* @param flags
|
|
735
|
-
* @
|
|
715
|
+
* @param {any} submission - The submission to set.
|
|
716
|
+
* @param {any} flags - Any flags to apply when setting the submission.
|
|
717
|
+
* @returns {Promise} - The promise that is triggered when the submission is set.
|
|
736
718
|
*/
|
|
737
719
|
setSubmission(submission, flags = {}) {
|
|
738
|
-
flags = Object.assign(Object.assign({}, flags), { fromSubmission: lodash_1.default.has(flags,
|
|
739
|
-
return this.onSubmission = this.formReady
|
|
720
|
+
flags = Object.assign(Object.assign({}, flags), { fromSubmission: lodash_1.default.has(flags, "fromSubmission") ? flags.fromSubmission : true });
|
|
721
|
+
return (this.onSubmission = this.formReady
|
|
722
|
+
.then((resolveFlags) => {
|
|
740
723
|
if (resolveFlags) {
|
|
741
724
|
flags = Object.assign(Object.assign({}, flags), resolveFlags);
|
|
742
725
|
}
|
|
743
726
|
this.onSetSubmission(submission, flags);
|
|
744
727
|
return this.submissionReadyResolve(submission);
|
|
745
|
-
}, (err) => this.submissionReadyReject(err))
|
|
728
|
+
}, (err) => this.submissionReadyReject(err))
|
|
729
|
+
.catch((err) => this.submissionReadyReject(err)));
|
|
746
730
|
}
|
|
747
731
|
handleDraftError(errName, errDetails, restoreDraft) {
|
|
748
|
-
const errorMessage = lodash_1.default.trim(`${this.t(errName)} ${errDetails ||
|
|
732
|
+
const errorMessage = lodash_1.default.trim(`${this.t(errName)} ${errDetails || ""}`);
|
|
749
733
|
console.warn(errorMessage);
|
|
750
|
-
this.emit(restoreDraft ?
|
|
734
|
+
this.emit(restoreDraft ? "restoreDraftError" : "saveDraftError", errDetails || errorMessage);
|
|
751
735
|
}
|
|
752
|
-
/**
|
|
753
|
-
* Saves a submission draft.
|
|
754
|
-
*/
|
|
755
736
|
saveDraft() {
|
|
756
737
|
if (!this.draftEnabled) {
|
|
757
738
|
return;
|
|
758
739
|
}
|
|
759
740
|
if (!this.formio) {
|
|
760
|
-
this.handleDraftError(
|
|
741
|
+
this.handleDraftError("saveDraftInstanceError");
|
|
761
742
|
return;
|
|
762
743
|
}
|
|
763
744
|
if (!Formio_1.Formio.getUser()) {
|
|
764
|
-
this.handleDraftError(
|
|
745
|
+
this.handleDraftError("saveDraftAuthError");
|
|
765
746
|
return;
|
|
766
747
|
}
|
|
767
748
|
const draft = (0, utils_1.fastCloneDeep)(this.submission);
|
|
768
|
-
draft.state =
|
|
749
|
+
draft.state = "draft";
|
|
769
750
|
if (!this.savingDraft && !this.submitting) {
|
|
770
|
-
this.emit(
|
|
751
|
+
this.emit("saveDraftBegin");
|
|
771
752
|
this.savingDraft = true;
|
|
772
|
-
this.formio
|
|
753
|
+
this.formio
|
|
754
|
+
.saveSubmission(draft)
|
|
755
|
+
.then((sub) => {
|
|
773
756
|
// Set id to submission to avoid creating new draft submission
|
|
774
757
|
this.submission._id = sub._id;
|
|
775
758
|
this.savingDraft = false;
|
|
776
|
-
this.emit(
|
|
759
|
+
this.emit("saveDraft", sub);
|
|
777
760
|
})
|
|
778
|
-
.catch(err => {
|
|
761
|
+
.catch((err) => {
|
|
779
762
|
this.savingDraft = false;
|
|
780
|
-
this.handleDraftError(
|
|
763
|
+
this.handleDraftError("saveDraftError", err);
|
|
781
764
|
});
|
|
782
765
|
}
|
|
783
766
|
}
|
|
784
767
|
/**
|
|
785
768
|
* Restores a draft submission based on the user who is authenticated.
|
|
786
|
-
*
|
|
787
|
-
* @param {userId} - The user id where we need to restore the draft from.
|
|
769
|
+
* @param {string} userId - The user id where we need to restore the draft from.
|
|
788
770
|
*/
|
|
789
771
|
restoreDraft(userId) {
|
|
790
772
|
const formio = this.formio || this.options.formio;
|
|
791
773
|
if (!formio) {
|
|
792
|
-
this.handleDraftError(
|
|
774
|
+
this.handleDraftError("restoreDraftInstanceError", null, true);
|
|
793
775
|
return;
|
|
794
776
|
}
|
|
795
777
|
this.savingDraft = true;
|
|
796
|
-
formio
|
|
778
|
+
formio
|
|
779
|
+
.loadSubmissions({
|
|
797
780
|
params: {
|
|
798
781
|
state: 'draft',
|
|
799
782
|
owner: userId,
|
|
800
783
|
sort: '-created'
|
|
801
|
-
}
|
|
802
|
-
})
|
|
784
|
+
},
|
|
785
|
+
})
|
|
786
|
+
.then((submissions) => {
|
|
803
787
|
if (submissions.length > 0 && !this.options.skipDraftRestore) {
|
|
804
788
|
const draft = (0, utils_1.fastCloneDeep)(submissions[0]);
|
|
805
789
|
return this.setSubmission(draft).then(() => {
|
|
806
790
|
this.draftEnabled = true;
|
|
807
791
|
this.savingDraft = false;
|
|
808
|
-
this.emit(
|
|
792
|
+
this.emit("restoreDraft", draft);
|
|
809
793
|
});
|
|
810
794
|
}
|
|
811
795
|
// Enable drafts so that we can keep track of changes.
|
|
812
796
|
this.draftEnabled = true;
|
|
813
797
|
this.savingDraft = false;
|
|
814
|
-
this.emit(
|
|
798
|
+
this.emit("restoreDraft", null);
|
|
815
799
|
})
|
|
816
|
-
.catch(err => {
|
|
800
|
+
.catch((err) => {
|
|
817
801
|
this.draftEnabled = true;
|
|
818
802
|
this.savingDraft = false;
|
|
819
|
-
this.handleDraftError(
|
|
803
|
+
this.handleDraftError("restoreDraftError", err, true);
|
|
820
804
|
});
|
|
821
805
|
}
|
|
822
806
|
get schema() {
|
|
823
|
-
const schema = (0, utils_1.fastCloneDeep)(lodash_1.default.omit(this._form, [
|
|
807
|
+
const schema = (0, utils_1.fastCloneDeep)(lodash_1.default.omit(this._form, ["components"]));
|
|
824
808
|
schema.components = [];
|
|
825
809
|
this.eachComponent((component) => schema.components.push(component.schema));
|
|
826
810
|
return schema;
|
|
827
811
|
}
|
|
828
812
|
mergeData(_this, _that) {
|
|
829
813
|
lodash_1.default.mergeWith(_this, _that, (thisValue, thatValue) => {
|
|
830
|
-
if (Array.isArray(thisValue) &&
|
|
814
|
+
if (Array.isArray(thisValue) &&
|
|
815
|
+
Array.isArray(thatValue) &&
|
|
816
|
+
thisValue.length !== thatValue.length) {
|
|
831
817
|
return thatValue;
|
|
832
818
|
}
|
|
833
819
|
});
|
|
@@ -840,9 +826,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
840
826
|
};
|
|
841
827
|
}
|
|
842
828
|
// Metadata needs to be available before setValue
|
|
843
|
-
this._submission.metadata = submission.metadata
|
|
844
|
-
? lodash_1.default.cloneDeep(submission.metadata)
|
|
845
|
-
: {};
|
|
829
|
+
this._submission.metadata = submission.metadata ? lodash_1.default.cloneDeep(submission.metadata) : {};
|
|
846
830
|
this.editing = !!submission._id;
|
|
847
831
|
// Set the timezone in the options if available.
|
|
848
832
|
if (!this.options.submissionTimezone &&
|
|
@@ -871,6 +855,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
871
855
|
}
|
|
872
856
|
/**
|
|
873
857
|
* Build the form.
|
|
858
|
+
* @returns {Promise} - The promise that is triggered when the form is built.
|
|
874
859
|
*/
|
|
875
860
|
init() {
|
|
876
861
|
if (this.options.submission) {
|
|
@@ -892,28 +877,31 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
892
877
|
else {
|
|
893
878
|
this.component = this.form;
|
|
894
879
|
}
|
|
895
|
-
this.component.type =
|
|
880
|
+
this.component.type = "form";
|
|
896
881
|
this.component.input = false;
|
|
897
882
|
this.addComponents();
|
|
898
|
-
this.on(
|
|
899
|
-
this.submit(false, options).catch(e => {
|
|
883
|
+
this.on("submitButton", (options) => {
|
|
884
|
+
this.submit(false, options).catch((e) => {
|
|
900
885
|
options.instance.loading = false;
|
|
901
886
|
return e !== false && e !== undefined && console.log(e);
|
|
902
887
|
});
|
|
903
888
|
}, true);
|
|
904
|
-
this.on(
|
|
905
|
-
this.on(
|
|
906
|
-
this.on(
|
|
907
|
-
this.on(
|
|
908
|
-
this.on(
|
|
889
|
+
this.on("checkValidity", (data) => this.validate(data, { dirty: true, process: "change" }), true);
|
|
890
|
+
this.on("requestUrl", (args) => this.submitUrl(args.url, args.headers), true);
|
|
891
|
+
this.on("resetForm", () => this.resetValue(), true);
|
|
892
|
+
this.on("deleteSubmission", () => this.deleteSubmission(), true);
|
|
893
|
+
this.on("refreshData", () => this.updateValue(), true);
|
|
909
894
|
this.executeFormController();
|
|
910
895
|
return this.formReady;
|
|
911
896
|
}
|
|
912
897
|
executeFormController() {
|
|
913
898
|
// If no controller value or
|
|
914
899
|
// hidden and set to clearOnHide (Don't calculate a value for a hidden field set to clear when hidden)
|
|
915
|
-
if (!this.form ||
|
|
916
|
-
|
|
900
|
+
if (!this.form ||
|
|
901
|
+
!this.form.controller ||
|
|
902
|
+
((!this.visible || this.component.hidden) &&
|
|
903
|
+
this.component.clearOnHide &&
|
|
904
|
+
!this.rootPristine)) {
|
|
917
905
|
return false;
|
|
918
906
|
}
|
|
919
907
|
this.formReady.then(() => {
|
|
@@ -923,20 +911,23 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
923
911
|
});
|
|
924
912
|
});
|
|
925
913
|
}
|
|
914
|
+
/**
|
|
915
|
+
*
|
|
916
|
+
*/
|
|
926
917
|
teardown() {
|
|
927
|
-
this.emit(
|
|
918
|
+
this.emit("formDelete", this.id);
|
|
928
919
|
delete Formio_1.Formio.forms[this.id];
|
|
929
920
|
delete this.executeShortcuts;
|
|
930
921
|
delete this.triggerSaveDraft;
|
|
931
922
|
super.teardown();
|
|
932
923
|
}
|
|
933
924
|
destroy(all = false) {
|
|
934
|
-
this.off(
|
|
935
|
-
this.off(
|
|
936
|
-
this.off(
|
|
937
|
-
this.off(
|
|
938
|
-
this.off(
|
|
939
|
-
this.off(
|
|
925
|
+
this.off("submitButton");
|
|
926
|
+
this.off("checkValidity");
|
|
927
|
+
this.off("requestUrl");
|
|
928
|
+
this.off("resetForm");
|
|
929
|
+
this.off("deleteSubmission");
|
|
930
|
+
this.off("refreshData");
|
|
940
931
|
return super.destroy(all);
|
|
941
932
|
}
|
|
942
933
|
build(element) {
|
|
@@ -949,17 +940,17 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
949
940
|
return this.ready;
|
|
950
941
|
}
|
|
951
942
|
getClassName() {
|
|
952
|
-
let classes =
|
|
943
|
+
let classes = "formio-form";
|
|
953
944
|
if (this.options.readOnly) {
|
|
954
|
-
classes +=
|
|
945
|
+
classes += " formio-read-only";
|
|
955
946
|
}
|
|
956
947
|
return classes;
|
|
957
948
|
}
|
|
958
949
|
render() {
|
|
959
|
-
return super.render(this.renderTemplate(
|
|
950
|
+
return super.render(this.renderTemplate("webform", {
|
|
960
951
|
classes: this.getClassName(),
|
|
961
952
|
children: this.renderComponents(),
|
|
962
|
-
}), this.builderMode ?
|
|
953
|
+
}), this.builderMode ? "builder" : "form", true);
|
|
963
954
|
}
|
|
964
955
|
redraw() {
|
|
965
956
|
// Don't bother if we have not built yet.
|
|
@@ -972,13 +963,13 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
972
963
|
}
|
|
973
964
|
attach(element) {
|
|
974
965
|
this.setElement(element);
|
|
975
|
-
this.loadRefs(element, { webform:
|
|
966
|
+
this.loadRefs(element, { webform: "single" });
|
|
976
967
|
const childPromise = this.attachComponents(this.refs.webform);
|
|
977
|
-
this.addEventListener(document,
|
|
968
|
+
this.addEventListener(document, "keydown", this.executeShortcuts);
|
|
978
969
|
this.currentForm = this;
|
|
979
|
-
this.hook(
|
|
970
|
+
this.hook("attachWebform", element, this);
|
|
980
971
|
return childPromise.then(() => {
|
|
981
|
-
this.emit(
|
|
972
|
+
this.emit("render", this.element);
|
|
982
973
|
return this.setValue(this._submission, {
|
|
983
974
|
noUpdateEvent: true,
|
|
984
975
|
});
|
|
@@ -995,24 +986,23 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
995
986
|
return result;
|
|
996
987
|
}
|
|
997
988
|
resetValue() {
|
|
998
|
-
lodash_1.default.each(this.getComponents(), (comp) =>
|
|
989
|
+
lodash_1.default.each(this.getComponents(), (comp) => comp.resetValue());
|
|
999
990
|
this.setPristine(true);
|
|
1000
991
|
this.onChange({ resetValue: true });
|
|
1001
992
|
}
|
|
1002
993
|
/**
|
|
1003
994
|
* Sets a new alert to display in the error dialog of the form.
|
|
1004
|
-
*
|
|
1005
995
|
* @param {string} type - The type of alert to display. "danger", "success", "warning", etc.
|
|
1006
996
|
* @param {string} message - The message to show in the alert.
|
|
1007
|
-
* @param {
|
|
997
|
+
* @param {object} options - The options for the alert.
|
|
1008
998
|
*/
|
|
1009
999
|
setAlert(type, message, options) {
|
|
1010
1000
|
if (!type && this.submitted) {
|
|
1011
1001
|
if (this.alert) {
|
|
1012
1002
|
if (this.refs.errorRef && this.refs.errorRef.length) {
|
|
1013
|
-
this.refs.errorRef.forEach(el => {
|
|
1014
|
-
this.removeEventListener(el,
|
|
1015
|
-
this.removeEventListener(el,
|
|
1003
|
+
this.refs.errorRef.forEach((el) => {
|
|
1004
|
+
this.removeEventListener(el, "click");
|
|
1005
|
+
this.removeEventListener(el, "keypress");
|
|
1016
1006
|
});
|
|
1017
1007
|
}
|
|
1018
1008
|
this.removeChild(this.alert);
|
|
@@ -1022,16 +1012,16 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1022
1012
|
}
|
|
1023
1013
|
if (this.options.noAlerts) {
|
|
1024
1014
|
if (!message) {
|
|
1025
|
-
this.emit(
|
|
1015
|
+
this.emit("error", false);
|
|
1026
1016
|
}
|
|
1027
1017
|
return;
|
|
1028
1018
|
}
|
|
1029
1019
|
if (this.alert) {
|
|
1030
1020
|
try {
|
|
1031
1021
|
if (this.refs.errorRef && this.refs.errorRef.length) {
|
|
1032
|
-
this.refs.errorRef.forEach(el => {
|
|
1033
|
-
this.removeEventListener(el,
|
|
1034
|
-
this.removeEventListener(el,
|
|
1022
|
+
this.refs.errorRef.forEach((el) => {
|
|
1023
|
+
this.removeEventListener(el, "click");
|
|
1024
|
+
this.removeEventListener(el, "keypress");
|
|
1035
1025
|
});
|
|
1036
1026
|
}
|
|
1037
1027
|
this.removeChild(this.alert);
|
|
@@ -1049,21 +1039,21 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1049
1039
|
const templateOptions = {
|
|
1050
1040
|
message: message instanceof HTMLElement ? message.outerHTML : message,
|
|
1051
1041
|
attrs: attrs,
|
|
1052
|
-
type
|
|
1042
|
+
type,
|
|
1053
1043
|
};
|
|
1054
|
-
this.alert = (0, utils_1.convertStringToHTMLElement)(this.renderTemplate(
|
|
1044
|
+
this.alert = (0, utils_1.convertStringToHTMLElement)(this.renderTemplate("alert", templateOptions), `#${attrs.id}`);
|
|
1055
1045
|
}
|
|
1056
1046
|
if (!this.alert) {
|
|
1057
1047
|
return;
|
|
1058
1048
|
}
|
|
1059
|
-
this.loadRefs(this.alert, { errorRef:
|
|
1049
|
+
this.loadRefs(this.alert, { errorRef: "multiple" });
|
|
1060
1050
|
if (this.refs.errorRef && this.refs.errorRef.length) {
|
|
1061
|
-
this.refs.errorRef.forEach(el => {
|
|
1062
|
-
this.addEventListener(el,
|
|
1051
|
+
this.refs.errorRef.forEach((el) => {
|
|
1052
|
+
this.addEventListener(el, "click", (e) => {
|
|
1063
1053
|
const key = e.currentTarget.dataset.componentKey;
|
|
1064
1054
|
this.focusOnComponent(key);
|
|
1065
1055
|
});
|
|
1066
|
-
this.addEventListener(el,
|
|
1056
|
+
this.addEventListener(el, "keydown", (e) => {
|
|
1067
1057
|
if (e.keyCode === 13) {
|
|
1068
1058
|
e.preventDefault();
|
|
1069
1059
|
const key = e.currentTarget.dataset.componentKey;
|
|
@@ -1076,9 +1066,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1076
1066
|
}
|
|
1077
1067
|
/**
|
|
1078
1068
|
* Focus on selected component.
|
|
1079
|
-
*
|
|
1080
1069
|
* @param {string} key - The key of selected component.
|
|
1081
|
-
* @returns {*}
|
|
1082
1070
|
*/
|
|
1083
1071
|
focusOnComponent(key) {
|
|
1084
1072
|
if (key) {
|
|
@@ -1090,11 +1078,16 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1090
1078
|
}
|
|
1091
1079
|
/**
|
|
1092
1080
|
* Show the errors of this form within the alert dialog.
|
|
1093
|
-
*
|
|
1094
|
-
* @param {Object} error - An optional additional error to display along with the component errors.
|
|
1081
|
+
* @param {object} error - An optional additional error to display along with the component errors.
|
|
1095
1082
|
* @returns {*}
|
|
1096
1083
|
*/
|
|
1097
1084
|
/* eslint-disable no-unused-vars */
|
|
1085
|
+
/**
|
|
1086
|
+
*
|
|
1087
|
+
* @param {Array} errors - An array of errors to display.
|
|
1088
|
+
* @param {boolean} triggerEvent - Whether or not to trigger the error event.
|
|
1089
|
+
* @returns {void|Array} - The errors that were set.
|
|
1090
|
+
*/
|
|
1098
1091
|
showErrors(errors, triggerEvent) {
|
|
1099
1092
|
this.loading = false;
|
|
1100
1093
|
if (!Array.isArray(errors)) {
|
|
@@ -1131,43 +1124,47 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1131
1124
|
});
|
|
1132
1125
|
const displayedErrors = [];
|
|
1133
1126
|
if (errors.length) {
|
|
1134
|
-
errors = lodash_1.default.uniqBy(errors, error => error.message);
|
|
1127
|
+
errors = lodash_1.default.uniqBy(errors, (error) => error.message);
|
|
1135
1128
|
const createListItem = (message, index) => {
|
|
1136
1129
|
var _a, _b, _c;
|
|
1137
1130
|
const err = errors[index];
|
|
1138
1131
|
const messageFromIndex = !lodash_1.default.isUndefined(index) && errors && errors[index];
|
|
1139
|
-
const keyOrPath = (
|
|
1140
|
-
|
|
1141
|
-
|
|
1132
|
+
const keyOrPath = (messageFromIndex === null || messageFromIndex === void 0 ? void 0 : messageFromIndex.formattedKeyOrPath) ||
|
|
1133
|
+
(messageFromIndex === null || messageFromIndex === void 0 ? void 0 : messageFromIndex.path) ||
|
|
1134
|
+
((_a = messageFromIndex === null || messageFromIndex === void 0 ? void 0 : messageFromIndex.context) === null || _a === void 0 ? void 0 : _a.path) ||
|
|
1135
|
+
(((_b = err.context) === null || _b === void 0 ? void 0 : _b.component) && ((_c = err.context) === null || _c === void 0 ? void 0 : _c.component.key)) ||
|
|
1136
|
+
(err.component && err.component.key) ||
|
|
1137
|
+
(err.fromServer && err.path);
|
|
1138
|
+
const formattedKeyOrPath = keyOrPath ? (0, utils_1.getStringFromComponentPath)(keyOrPath) : "";
|
|
1139
|
+
if (typeof err !== "string" && !err.formattedKeyOrPath) {
|
|
1142
1140
|
err.formattedKeyOrPath = formattedKeyOrPath;
|
|
1143
1141
|
}
|
|
1144
1142
|
return {
|
|
1145
1143
|
message: (0, utils_1.unescapeHTML)(message),
|
|
1146
|
-
keyOrPath: formattedKeyOrPath
|
|
1144
|
+
keyOrPath: formattedKeyOrPath,
|
|
1147
1145
|
};
|
|
1148
1146
|
};
|
|
1149
1147
|
errors.forEach(({ message, context, fromServer, component }, index) => {
|
|
1150
1148
|
const text = !(component === null || component === void 0 ? void 0 : component.label) || (context === null || context === void 0 ? void 0 : context.hasLabel) || fromServer
|
|
1151
|
-
? this.t(
|
|
1152
|
-
: this.t(
|
|
1149
|
+
? this.t("alertMessage", { message: this.t(message) })
|
|
1150
|
+
: this.t("alertMessageWithLabel", {
|
|
1153
1151
|
label: this.t(component === null || component === void 0 ? void 0 : component.label),
|
|
1154
1152
|
message: this.t(message),
|
|
1155
1153
|
});
|
|
1156
1154
|
displayedErrors.push(createListItem(text, index));
|
|
1157
1155
|
});
|
|
1158
1156
|
}
|
|
1159
|
-
const errorsList = this.renderTemplate(
|
|
1160
|
-
this.root.setAlert(
|
|
1157
|
+
const errorsList = this.renderTemplate("errorsList", { errors: displayedErrors });
|
|
1158
|
+
this.root.setAlert("danger", errorsList);
|
|
1161
1159
|
if (triggerEvent) {
|
|
1162
|
-
this.emit(
|
|
1160
|
+
this.emit("error", errors);
|
|
1163
1161
|
}
|
|
1164
1162
|
return errors;
|
|
1165
1163
|
}
|
|
1166
1164
|
/* eslint-enable no-unused-vars */
|
|
1167
1165
|
/**
|
|
1168
1166
|
* Called when the submission has completed, or if the submission needs to be sent to an external library.
|
|
1169
|
-
*
|
|
1170
|
-
* @param {Object} submission - The submission object.
|
|
1167
|
+
* @param {object} submission - The submission object.
|
|
1171
1168
|
* @param {boolean} saved - Whether or not this submission was saved to the server.
|
|
1172
1169
|
* @returns {object} - The submission object.
|
|
1173
1170
|
*/
|
|
@@ -1179,25 +1176,25 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1179
1176
|
// We want to return the submitted submission and setValue will mutate the submission so cloneDeep it here.
|
|
1180
1177
|
this.setValue((0, utils_1.fastCloneDeep)(submission), {
|
|
1181
1178
|
noValidate: true,
|
|
1182
|
-
noCheck: true
|
|
1179
|
+
noCheck: true,
|
|
1183
1180
|
});
|
|
1184
|
-
this.setAlert(
|
|
1181
|
+
this.setAlert("success", `<p>${this.t("complete")}</p>`);
|
|
1185
1182
|
// Cancel triggered saveDraft to prevent overriding the submitted state
|
|
1186
1183
|
if (this.draftEnabled && ((_a = this.triggerSaveDraft) === null || _a === void 0 ? void 0 : _a.cancel)) {
|
|
1187
1184
|
this.triggerSaveDraft.cancel();
|
|
1188
1185
|
}
|
|
1189
|
-
this.emit(
|
|
1186
|
+
this.emit("submit", submission, saved);
|
|
1190
1187
|
if (saved) {
|
|
1191
|
-
this.emit(
|
|
1188
|
+
this.emit("submitDone", submission);
|
|
1192
1189
|
}
|
|
1193
1190
|
return submission;
|
|
1194
1191
|
}
|
|
1195
1192
|
normalizeError(error) {
|
|
1196
1193
|
if (error) {
|
|
1197
|
-
if (typeof error ===
|
|
1194
|
+
if (typeof error === "object" && "details" in error) {
|
|
1198
1195
|
error = error.details;
|
|
1199
1196
|
}
|
|
1200
|
-
if (typeof error ===
|
|
1197
|
+
if (typeof error === "string") {
|
|
1201
1198
|
error = { message: error };
|
|
1202
1199
|
}
|
|
1203
1200
|
}
|
|
@@ -1205,17 +1202,17 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1205
1202
|
}
|
|
1206
1203
|
/**
|
|
1207
1204
|
* Called when an error occurs during the submission.
|
|
1208
|
-
*
|
|
1209
|
-
* @
|
|
1205
|
+
* @param {object} error - The error that occured.
|
|
1206
|
+
* @returns {Array} errors - All errors.
|
|
1210
1207
|
*/
|
|
1211
1208
|
onSubmissionError(error) {
|
|
1212
1209
|
error = this.normalizeError(error);
|
|
1213
1210
|
this.submitting = false;
|
|
1214
1211
|
this.setPristine(false);
|
|
1215
|
-
this.emit(
|
|
1212
|
+
this.emit("submitError", error || this.errors);
|
|
1216
1213
|
// Allow for silent cancellations (no error message, no submit button error state)
|
|
1217
1214
|
if (error && error.silent) {
|
|
1218
|
-
this.emit(
|
|
1215
|
+
this.emit("change", { isValid: true }, { silent: true });
|
|
1219
1216
|
return false;
|
|
1220
1217
|
}
|
|
1221
1218
|
const errors = this.showErrors(error, true);
|
|
@@ -1226,9 +1223,10 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1226
1223
|
}
|
|
1227
1224
|
/**
|
|
1228
1225
|
* Trigger the change event for this form.
|
|
1229
|
-
*
|
|
1230
|
-
* @param changed
|
|
1231
|
-
* @param
|
|
1226
|
+
* @param {any} flags - The flags to set on this change event.
|
|
1227
|
+
* @param {any} changed - The changed object which reflects the changes in the form.
|
|
1228
|
+
* @param {boolean} modified - Whether or not the form has been modified.
|
|
1229
|
+
* @param {any} changes - The changes that have occured in the form.
|
|
1232
1230
|
*/
|
|
1233
1231
|
onChange(flags, changed, modified, changes) {
|
|
1234
1232
|
flags = flags || {};
|
|
@@ -1241,13 +1239,17 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1241
1239
|
this.pristine = false;
|
|
1242
1240
|
}
|
|
1243
1241
|
this.checkData(value.data, flags);
|
|
1244
|
-
const shouldValidate = !flags.noValidate ||
|
|
1245
|
-
|
|
1242
|
+
const shouldValidate = !flags.noValidate ||
|
|
1243
|
+
flags.fromIFrame ||
|
|
1244
|
+
(flags.fromSubmission && this.rootPristine && this.pristine && flags.changed);
|
|
1245
|
+
const errors = shouldValidate
|
|
1246
|
+
? this.validate(value.data, Object.assign(Object.assign({}, flags), { process: "change" }))
|
|
1247
|
+
: [];
|
|
1246
1248
|
value.isValid = errors.length === 0;
|
|
1247
1249
|
this.loading = false;
|
|
1248
1250
|
if (this.submitted) {
|
|
1249
1251
|
// show server errors while they are not cleaned/fixed
|
|
1250
|
-
const nonComponentServerErrors = lodash_1.default.filter(this.serverErrors || [], err => !err.component && !err.path);
|
|
1252
|
+
const nonComponentServerErrors = lodash_1.default.filter(this.serverErrors || [], (err) => !err.component && !err.path);
|
|
1251
1253
|
this.showErrors(nonComponentServerErrors.length ? nonComponentServerErrors : errors);
|
|
1252
1254
|
}
|
|
1253
1255
|
// See if we need to save the draft of the form.
|
|
@@ -1255,38 +1257,39 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1255
1257
|
this.triggerSaveDraft();
|
|
1256
1258
|
}
|
|
1257
1259
|
if (!flags || !flags.noEmit) {
|
|
1258
|
-
this.emit(
|
|
1260
|
+
this.emit("change", value, flags, modified);
|
|
1259
1261
|
isChangeEventEmitted = true;
|
|
1260
1262
|
}
|
|
1261
1263
|
// The form is initialized after the first change event occurs.
|
|
1262
1264
|
if (isChangeEventEmitted && !this.initialized) {
|
|
1263
|
-
this.emit(
|
|
1265
|
+
this.emit("initialized");
|
|
1264
1266
|
this.initialized = true;
|
|
1265
1267
|
}
|
|
1266
1268
|
}
|
|
1267
1269
|
/**
|
|
1268
1270
|
* Send a delete request to the server.
|
|
1271
|
+
* @returns {Promise} - The promise that is triggered when the delete is complete.
|
|
1269
1272
|
*/
|
|
1270
1273
|
deleteSubmission() {
|
|
1271
|
-
return this.formio.deleteSubmission()
|
|
1272
|
-
.
|
|
1273
|
-
this.emit('submissionDeleted', this.submission);
|
|
1274
|
+
return this.formio.deleteSubmission().then(() => {
|
|
1275
|
+
this.emit("submissionDeleted", this.submission);
|
|
1274
1276
|
this.resetValue();
|
|
1275
1277
|
});
|
|
1276
1278
|
}
|
|
1277
1279
|
/**
|
|
1278
1280
|
* Cancels the submission.
|
|
1279
|
-
*
|
|
1281
|
+
* @param {boolean} noconfirm - Whether or not to confirm the cancellation.
|
|
1280
1282
|
* @alias reset
|
|
1283
|
+
* @returns {boolean} - TRUE means the submission was cancelled, FALSE otherwise.
|
|
1281
1284
|
*/
|
|
1282
1285
|
cancel(noconfirm) {
|
|
1283
|
-
const shouldReset = this.hook(
|
|
1284
|
-
if (shouldReset && (noconfirm || confirm(this.t(
|
|
1286
|
+
const shouldReset = this.hook("beforeCancel", true);
|
|
1287
|
+
if (shouldReset && (noconfirm || confirm(this.t("confirmCancel")))) {
|
|
1285
1288
|
this.resetValue();
|
|
1286
1289
|
return true;
|
|
1287
1290
|
}
|
|
1288
1291
|
else {
|
|
1289
|
-
this.emit(
|
|
1292
|
+
this.emit("cancelSubmit");
|
|
1290
1293
|
return false;
|
|
1291
1294
|
}
|
|
1292
1295
|
}
|
|
@@ -1294,14 +1297,14 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1294
1297
|
// Add in metadata about client submitting the form
|
|
1295
1298
|
submission.metadata = submission.metadata || {};
|
|
1296
1299
|
lodash_1.default.defaults(submission.metadata, {
|
|
1297
|
-
timezone: lodash_1.default.get(this,
|
|
1298
|
-
offset: parseInt(lodash_1.default.get(this,
|
|
1300
|
+
timezone: lodash_1.default.get(this, "_submission.metadata.timezone", (0, utils_1.currentTimezone)()),
|
|
1301
|
+
offset: parseInt(lodash_1.default.get(this, "_submission.metadata.offset", (0, moment_1.default)().utcOffset()), 10),
|
|
1299
1302
|
origin: document.location.origin,
|
|
1300
1303
|
referrer: document.referrer,
|
|
1301
1304
|
browserName: navigator.appName,
|
|
1302
1305
|
userAgent: navigator.userAgent,
|
|
1303
1306
|
pathName: window.location.pathname,
|
|
1304
|
-
onLine: navigator.onLine
|
|
1307
|
+
onLine: navigator.onLine,
|
|
1305
1308
|
});
|
|
1306
1309
|
}
|
|
1307
1310
|
submitForm(options = {}) {
|
|
@@ -1311,30 +1314,31 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1311
1314
|
if (this.options.readOnly) {
|
|
1312
1315
|
return resolve({
|
|
1313
1316
|
submission: this.submission,
|
|
1314
|
-
saved: false
|
|
1317
|
+
saved: false,
|
|
1315
1318
|
});
|
|
1316
1319
|
}
|
|
1317
1320
|
const submission = (0, utils_1.fastCloneDeep)(this.submission || {});
|
|
1318
1321
|
this.setMetadata(submission);
|
|
1319
|
-
submission.state = options.state || submission.state ||
|
|
1320
|
-
const isDraft =
|
|
1321
|
-
this.hook(
|
|
1322
|
+
submission.state = options.state || submission.state || "submitted";
|
|
1323
|
+
const isDraft = submission.state === "draft";
|
|
1324
|
+
this.hook("beforeSubmit", Object.assign(Object.assign({}, submission), { component: options.component }), (err, data) => {
|
|
1322
1325
|
var _a;
|
|
1323
1326
|
if (err) {
|
|
1324
1327
|
return reject(err);
|
|
1325
1328
|
}
|
|
1326
|
-
submission._vnote = data && data._vnote ? data._vnote :
|
|
1329
|
+
submission._vnote = data && data._vnote ? data._vnote : "";
|
|
1327
1330
|
try {
|
|
1328
1331
|
if (!isDraft && !options.noValidate) {
|
|
1329
1332
|
if (!submission.data) {
|
|
1330
|
-
return reject(
|
|
1333
|
+
return reject("Invalid Submission");
|
|
1331
1334
|
}
|
|
1332
1335
|
const errors = this.validate(submission.data, {
|
|
1333
1336
|
dirty: true,
|
|
1334
1337
|
silentCheck: false,
|
|
1335
|
-
process:
|
|
1338
|
+
process: "submit",
|
|
1336
1339
|
});
|
|
1337
|
-
if (errors.length ||
|
|
1340
|
+
if (errors.length ||
|
|
1341
|
+
((_a = options.beforeSubmitResults) === null || _a === void 0 ? void 0 : _a.some((result) => result.status === "rejected"))) {
|
|
1338
1342
|
return reject(errors);
|
|
1339
1343
|
}
|
|
1340
1344
|
}
|
|
@@ -1343,20 +1347,20 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1343
1347
|
console.error(err);
|
|
1344
1348
|
}
|
|
1345
1349
|
this.everyComponent((comp) => {
|
|
1346
|
-
if (submission._vnote && comp.type ===
|
|
1350
|
+
if (submission._vnote && comp.type === "form" && comp.component.reference) {
|
|
1347
1351
|
lodash_1.default.get(submission.data, comp.path, {})._vnote = submission._vnote;
|
|
1348
1352
|
}
|
|
1349
1353
|
const { persistent } = comp.component;
|
|
1350
|
-
if (persistent ===
|
|
1354
|
+
if (persistent === "client-only") {
|
|
1351
1355
|
lodash_1.default.unset(submission.data, comp.path);
|
|
1352
1356
|
}
|
|
1353
1357
|
});
|
|
1354
|
-
this.hook(
|
|
1358
|
+
this.hook("customValidation", Object.assign(Object.assign({}, submission), { component: options.component }), (err) => {
|
|
1355
1359
|
if (err) {
|
|
1356
1360
|
// If string is returned, cast to object.
|
|
1357
|
-
if (typeof err ===
|
|
1361
|
+
if (typeof err === "string") {
|
|
1358
1362
|
err = {
|
|
1359
|
-
message: err
|
|
1363
|
+
message: err,
|
|
1360
1364
|
};
|
|
1361
1365
|
}
|
|
1362
1366
|
// Ensure err is an array.
|
|
@@ -1366,7 +1370,10 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1366
1370
|
this.loading = true;
|
|
1367
1371
|
// Use the form action to submit the form if available.
|
|
1368
1372
|
if (this._form && this._form.action) {
|
|
1369
|
-
const method =
|
|
1373
|
+
const method = submission.data._id &&
|
|
1374
|
+
this._form.action.includes(submission.data._id)
|
|
1375
|
+
? "PUT"
|
|
1376
|
+
: "POST";
|
|
1370
1377
|
return Formio_1.Formio.makeStaticRequest(this._form.action, method, submission, this.formio ? this.formio.options : {})
|
|
1371
1378
|
.then((result) => resolve({
|
|
1372
1379
|
submission: result,
|
|
@@ -1385,7 +1392,9 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1385
1392
|
});
|
|
1386
1393
|
}
|
|
1387
1394
|
// If this is an actionUrl, then make sure to save the action and not the submission.
|
|
1388
|
-
const submitMethod = submitFormio.actionUrl
|
|
1395
|
+
const submitMethod = submitFormio.actionUrl
|
|
1396
|
+
? "saveAction"
|
|
1397
|
+
: "saveSubmission";
|
|
1389
1398
|
submitFormio[submitMethod](submission)
|
|
1390
1399
|
.then((result) => resolve({
|
|
1391
1400
|
submission: result,
|
|
@@ -1401,13 +1410,15 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1401
1410
|
}
|
|
1402
1411
|
setServerErrors(error) {
|
|
1403
1412
|
if (error.details) {
|
|
1404
|
-
this.serverErrors = error.details
|
|
1413
|
+
this.serverErrors = error.details
|
|
1414
|
+
.filter((err) => (err.level ? err.level === "error" : err))
|
|
1415
|
+
.map((err) => {
|
|
1405
1416
|
err.fromServer = true;
|
|
1406
1417
|
return err;
|
|
1407
1418
|
});
|
|
1408
1419
|
}
|
|
1409
|
-
else if (typeof error ===
|
|
1410
|
-
this.serverErrors = [{ fromServer: true, level:
|
|
1420
|
+
else if (typeof error === "string") {
|
|
1421
|
+
this.serverErrors = [{ fromServer: true, level: "error", message: error }];
|
|
1411
1422
|
}
|
|
1412
1423
|
}
|
|
1413
1424
|
executeSubmit(options) {
|
|
@@ -1439,7 +1450,6 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1439
1450
|
}
|
|
1440
1451
|
/**
|
|
1441
1452
|
* Submits the form.
|
|
1442
|
-
*
|
|
1443
1453
|
* @example
|
|
1444
1454
|
* import Webform from '@formio/js/Webform';
|
|
1445
1455
|
* let form = new Webform(document.getElementById('formio'));
|
|
@@ -1452,12 +1462,11 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1452
1462
|
* form.submit().then((submission) => {
|
|
1453
1463
|
* console.log(submission);
|
|
1454
1464
|
* });
|
|
1455
|
-
*
|
|
1456
1465
|
* @param {boolean} before - If this submission occured from the before handlers.
|
|
1457
|
-
*
|
|
1466
|
+
* @param {any} options - The options to use when submitting this form.
|
|
1458
1467
|
* @returns {Promise} - A promise when the form is done submitting.
|
|
1459
1468
|
*/
|
|
1460
|
-
submit(before, options = {}) {
|
|
1469
|
+
submit(before = false, options = {}) {
|
|
1461
1470
|
this.submissionInProcess = true;
|
|
1462
1471
|
if (!before) {
|
|
1463
1472
|
return this.beforeSubmit(options).then(() => this.executeSubmit(options));
|
|
@@ -1468,37 +1477,41 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1468
1477
|
}
|
|
1469
1478
|
submitUrl(URL, headers) {
|
|
1470
1479
|
if (!URL) {
|
|
1471
|
-
return console.warn(
|
|
1480
|
+
return console.warn("Missing URL argument");
|
|
1472
1481
|
}
|
|
1473
1482
|
const submission = this.submission || {};
|
|
1474
1483
|
const API_URL = URL;
|
|
1475
1484
|
const settings = {
|
|
1476
|
-
method:
|
|
1477
|
-
headers: {}
|
|
1485
|
+
method: "POST",
|
|
1486
|
+
headers: {},
|
|
1478
1487
|
};
|
|
1479
1488
|
if (headers && headers.length > 0) {
|
|
1480
1489
|
headers.map((e) => {
|
|
1481
|
-
if (e.header !==
|
|
1490
|
+
if (e.header !== "" && e.value !== "") {
|
|
1482
1491
|
settings.headers[e.header] = this.interpolate(e.value, submission);
|
|
1483
1492
|
}
|
|
1484
1493
|
});
|
|
1485
1494
|
}
|
|
1486
1495
|
if (API_URL && settings) {
|
|
1487
|
-
Formio_1.Formio.makeStaticRequest(API_URL, settings.method, submission, {
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
this.
|
|
1496
|
+
Formio_1.Formio.makeStaticRequest(API_URL, settings.method, submission, {
|
|
1497
|
+
headers: settings.headers,
|
|
1498
|
+
})
|
|
1499
|
+
.then(() => {
|
|
1500
|
+
this.emit("requestDone");
|
|
1501
|
+
this.setAlert("success", "<p> Success </p>");
|
|
1502
|
+
})
|
|
1503
|
+
.catch((e) => {
|
|
1504
|
+
const message = `${e.statusText ? e.statusText : ""} ${e.status ? e.status : e}`;
|
|
1505
|
+
this.emit("error", message);
|
|
1493
1506
|
console.error(message);
|
|
1494
|
-
this.setAlert(
|
|
1507
|
+
this.setAlert("danger", `<p> ${message} </p>`);
|
|
1495
1508
|
return Promise.reject(this.onSubmissionError(e));
|
|
1496
1509
|
});
|
|
1497
1510
|
}
|
|
1498
1511
|
else {
|
|
1499
|
-
this.emit(
|
|
1500
|
-
this.setAlert(
|
|
1501
|
-
return console.warn(
|
|
1512
|
+
this.emit("error", "You should add a URL to this button.");
|
|
1513
|
+
this.setAlert("warning", "You should add a URL to this button.");
|
|
1514
|
+
return console.warn("You should add a URL to this button.");
|
|
1502
1515
|
}
|
|
1503
1516
|
}
|
|
1504
1517
|
triggerCaptcha() {
|
|
@@ -1517,7 +1530,7 @@ class Webform extends NestedDataComponent_1.default {
|
|
|
1517
1530
|
}
|
|
1518
1531
|
set nosubmit(value) {
|
|
1519
1532
|
this._nosubmit = !!value;
|
|
1520
|
-
this.emit(
|
|
1533
|
+
this.emit("nosubmit", this._nosubmit);
|
|
1521
1534
|
}
|
|
1522
1535
|
get nosubmit() {
|
|
1523
1536
|
return this._nosubmit || false;
|