@formio/js 5.2.3 → 5.2.4-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/formio.builder.css +161 -50
- package/dist/formio.builder.min.css +1 -1
- package/dist/formio.embed.js +1 -1
- package/dist/formio.embed.min.js +1 -1
- package/dist/formio.embed.min.js.LICENSE.txt +1 -1
- package/dist/formio.form.css +158 -49
- package/dist/formio.form.js +152 -108
- package/dist/formio.form.min.css +1 -1
- package/dist/formio.form.min.js +1 -1
- package/dist/formio.form.min.js.LICENSE.txt +1 -1
- package/dist/formio.full.css +161 -50
- package/dist/formio.full.js +401 -227
- package/dist/formio.full.min.css +1 -1
- package/dist/formio.full.min.js +1 -1
- package/dist/formio.full.min.js.LICENSE.txt +1 -1
- package/dist/formio.js +51 -18
- package/dist/formio.min.js +1 -1
- package/dist/formio.min.js.LICENSE.txt +1 -1
- package/dist/formio.utils.js +47 -14
- package/dist/formio.utils.min.js +1 -1
- package/dist/formio.utils.min.js.LICENSE.txt +1 -1
- package/lib/cjs/CDN.js +12 -12
- package/lib/cjs/Element.d.ts +3 -2
- package/lib/cjs/Element.js +27 -21
- package/lib/cjs/Embed.js +74 -40
- package/lib/cjs/EventEmitter.js +1 -1
- package/lib/cjs/Form.d.ts +371 -341
- package/lib/cjs/Form.js +153 -39
- package/lib/cjs/FormBuilder.d.ts +3 -3
- package/lib/cjs/FormBuilder.js +2 -3
- package/lib/cjs/Formio.js +26 -23
- package/lib/cjs/InlineEmbed.js +23 -17
- package/lib/cjs/PDF.d.ts +1 -0
- package/lib/cjs/PDF.js +18 -15
- package/lib/cjs/PDFBuilder.js +51 -36
- package/lib/cjs/Webform.d.ts +8 -366
- package/lib/cjs/Webform.js +176 -235
- package/lib/cjs/WebformBuilder.js +217 -144
- package/lib/cjs/Wizard.js +92 -62
- package/lib/cjs/WizardBuilder.js +27 -19
- package/lib/cjs/addons/FormioAddon.js +1 -1
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +59 -57
- package/lib/cjs/addons/PasswordStrength/PasswordStrengthAddon.js +24 -16
- package/lib/cjs/addons/index.js +3 -3
- package/lib/cjs/components/Components.js +0 -4
- package/lib/cjs/components/_classes/component/Component.form.js +11 -11
- package/lib/cjs/components/_classes/component/Component.js +298 -179
- package/lib/cjs/components/_classes/component/editForm/Component.edit.addons.js +2 -4
- package/lib/cjs/components/_classes/component/editForm/Component.edit.api.js +5 -5
- package/lib/cjs/components/_classes/component/editForm/Component.edit.conditional.js +9 -11
- package/lib/cjs/components/_classes/component/editForm/Component.edit.data.d.ts +37 -0
- package/lib/cjs/components/_classes/component/editForm/Component.edit.data.js +39 -25
- package/lib/cjs/components/_classes/component/editForm/Component.edit.display.js +47 -29
- package/lib/cjs/components/_classes/component/editForm/Component.edit.layout.js +9 -9
- package/lib/cjs/components/_classes/component/editForm/Component.edit.logic.js +5 -7
- package/lib/cjs/components/_classes/component/editForm/Component.edit.validation.js +37 -34
- package/lib/cjs/components/_classes/component/editForm/utils.js +12 -16
- package/lib/cjs/components/_classes/componentModal/ComponentModal.js +6 -6
- package/lib/cjs/components/_classes/field/Field.js +7 -1
- package/lib/cjs/components/_classes/input/Input.js +30 -26
- package/lib/cjs/components/_classes/list/ListComponent.form.js +1 -1
- package/lib/cjs/components/_classes/list/ListComponent.js +27 -18
- package/lib/cjs/components/_classes/list/editForm/ListComponent.edit.data.js +36 -9
- package/lib/cjs/components/_classes/multivalue/Multivalue.js +32 -13
- package/lib/cjs/components/_classes/nested/NestedComponent.form.js +3 -3
- package/lib/cjs/components/_classes/nested/NestedComponent.js +36 -32
- package/lib/cjs/components/_classes/nestedarray/NestedArrayComponent.js +19 -14
- package/lib/cjs/components/_classes/nesteddata/NestedDataComponent.js +19 -17
- package/lib/cjs/components/address/Address.js +52 -45
- package/lib/cjs/components/address/editForm/Address.edit.data.js +2 -2
- package/lib/cjs/components/address/editForm/Address.edit.display.js +2 -2
- package/lib/cjs/components/address/editForm/Address.edit.provider.js +53 -11
- package/lib/cjs/components/alert/Alert.js +21 -15
- package/lib/cjs/components/button/Button.form.js +1 -1
- package/lib/cjs/components/button/Button.js +50 -27
- package/lib/cjs/components/button/editForm/Button.edit.display.js +49 -9
- package/lib/cjs/components/checkbox/Checkbox.d.ts +1 -1
- package/lib/cjs/components/checkbox/Checkbox.form.js +3 -3
- package/lib/cjs/components/checkbox/Checkbox.js +28 -20
- package/lib/cjs/components/checkbox/editForm/Checkbox.edit.data.js +1 -1
- package/lib/cjs/components/checkbox/editForm/Checkbox.edit.display.js +13 -3
- package/lib/cjs/components/checkbox/editForm/Checkbox.edit.validation.js +2 -2
- package/lib/cjs/components/columns/Columns.form.js +1 -1
- package/lib/cjs/components/columns/Columns.js +24 -12
- package/lib/cjs/components/columns/editForm/Columns.edit.display.js +17 -17
- package/lib/cjs/components/container/Container.form.js +2 -2
- package/lib/cjs/components/container/Container.js +6 -4
- package/lib/cjs/components/container/editForm/Container.edit.data.js +3 -3
- package/lib/cjs/components/container/editForm/Container.edit.display.js +4 -4
- package/lib/cjs/components/content/Content.form.js +4 -2
- package/lib/cjs/components/content/Content.js +10 -8
- package/lib/cjs/components/content/editForm/Content.edit.display.js +10 -10
- package/lib/cjs/components/currency/Currency.form.js +3 -3
- package/lib/cjs/components/currency/Currency.js +19 -10
- package/lib/cjs/components/currency/editForm/Currency.edit.data.js +5 -5
- package/lib/cjs/components/currency/editForm/Currency.edit.display.js +8 -8
- package/lib/cjs/components/datagrid/DataGrid.form.js +3 -3
- package/lib/cjs/components/datagrid/DataGrid.js +89 -38
- package/lib/cjs/components/datagrid/editForm/DataGrid.edit.data.js +1 -1
- package/lib/cjs/components/datagrid/editForm/DataGrid.edit.display.js +14 -14
- package/lib/cjs/components/datagrid/editForm/DataGrid.edit.validation.js +3 -3
- package/lib/cjs/components/datamap/DataMap.form.js +2 -2
- package/lib/cjs/components/datamap/DataMap.js +44 -31
- package/lib/cjs/components/datamap/editForm/DataMap.edit.data.js +1 -1
- package/lib/cjs/components/datamap/editForm/DataMap.edit.display.js +8 -8
- package/lib/cjs/components/datetime/DateTime.form.js +5 -5
- package/lib/cjs/components/datetime/DateTime.js +30 -15
- package/lib/cjs/components/datetime/editForm/DateTime.edit.data.js +4 -3
- package/lib/cjs/components/datetime/editForm/DateTime.edit.date.js +10 -10
- package/lib/cjs/components/datetime/editForm/DateTime.edit.display.js +22 -17
- package/lib/cjs/components/datetime/editForm/DateTime.edit.time.js +5 -5
- package/lib/cjs/components/datetime/editForm/DateTime.edit.validation.js +3 -3
- package/lib/cjs/components/day/Day.form.js +5 -5
- package/lib/cjs/components/day/Day.js +146 -56
- package/lib/cjs/components/day/editForm/Day.edit.day.js +13 -9
- package/lib/cjs/components/day/editForm/Day.edit.display.js +7 -7
- package/lib/cjs/components/day/editForm/Day.edit.month.js +12 -8
- package/lib/cjs/components/day/editForm/Day.edit.validation.js +7 -7
- package/lib/cjs/components/day/editForm/Day.edit.year.js +8 -8
- package/lib/cjs/components/editgrid/EditGrid.form.js +2 -2
- package/lib/cjs/components/editgrid/EditGrid.js +137 -89
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.data.js +2 -2
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.display.js +7 -2
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.templates.js +16 -16
- package/lib/cjs/components/editgrid/editForm/EditGrid.edit.validation.js +3 -3
- package/lib/cjs/components/email/Email.js +4 -4
- package/lib/cjs/components/email/editForm/Email.edit.display.js +3 -3
- package/lib/cjs/components/email/editForm/Email.edit.validation.js +6 -6
- package/lib/cjs/components/fieldset/Fieldset.form.js +1 -1
- package/lib/cjs/components/fieldset/Fieldset.js +2 -2
- package/lib/cjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -8
- package/lib/cjs/components/file/File.form.js +4 -4
- package/lib/cjs/components/file/File.js +126 -80
- package/lib/cjs/components/file/editForm/File.edit.display.js +9 -5
- package/lib/cjs/components/file/editForm/File.edit.file.d.ts +37 -16
- package/lib/cjs/components/file/editForm/File.edit.file.js +169 -72
- package/lib/cjs/components/file/editForm/File.edit.validation.js +2 -2
- package/lib/cjs/components/form/Form.form.js +3 -3
- package/lib/cjs/components/form/Form.js +67 -51
- package/lib/cjs/components/form/editForm/Form.edit.data.js +1 -3
- package/lib/cjs/components/form/editForm/Form.edit.display.js +6 -7
- package/lib/cjs/components/form/editForm/Form.edit.form.js +11 -9
- package/lib/cjs/components/hidden/Hidden.form.js +4 -4
- package/lib/cjs/components/hidden/Hidden.js +2 -2
- package/lib/cjs/components/hidden/editForm/Hidden.edit.data.js +3 -3
- package/lib/cjs/components/hidden/editForm/Hidden.edit.display.js +10 -10
- package/lib/cjs/components/html/HTML.js +23 -17
- package/lib/cjs/components/html/editForm/HTML.edit.display.js +17 -17
- package/lib/cjs/components/html/editForm/HTML.edit.logic.js +2 -2
- package/lib/cjs/components/number/Number.form.js +3 -3
- package/lib/cjs/components/number/Number.js +27 -11
- package/lib/cjs/components/number/editForm/Number.edit.data.js +3 -3
- package/lib/cjs/components/number/editForm/Number.edit.display.js +4 -4
- package/lib/cjs/components/number/editForm/Number.edit.validation.js +9 -9
- package/lib/cjs/components/panel/Panel.form.js +1 -1
- package/lib/cjs/components/panel/Panel.js +2 -2
- package/lib/cjs/components/panel/editForm/Panel.edit.conditional.js +5 -7
- package/lib/cjs/components/panel/editForm/Panel.edit.display.js +55 -29
- package/lib/cjs/components/password/Password.form.js +3 -3
- package/lib/cjs/components/password/Password.js +5 -2
- package/lib/cjs/components/password/editForm/Password.edit.data.js +11 -11
- package/lib/cjs/components/password/editForm/Password.edit.display.js +3 -3
- package/lib/cjs/components/password/editForm/Password.edit.validation.js +3 -3
- package/lib/cjs/components/phonenumber/PhoneNumber.form.js +8 -8
- package/lib/cjs/components/phonenumber/PhoneNumber.js +3 -3
- package/lib/cjs/components/phonenumber/editForm/PhoneNumber.edit.validation.js +6 -6
- package/lib/cjs/components/radio/Radio.form.js +3 -3
- package/lib/cjs/components/radio/Radio.js +55 -26
- package/lib/cjs/components/radio/editForm/Radio.edit.data.js +23 -9
- package/lib/cjs/components/radio/editForm/Radio.edit.display.js +6 -6
- package/lib/cjs/components/radio/editForm/Radio.edit.validation.js +2 -2
- package/lib/cjs/components/recaptcha/ReCaptcha.form.js +5 -5
- package/lib/cjs/components/recaptcha/ReCaptcha.js +7 -5
- package/lib/cjs/components/recaptcha/editForm/ReCaptcha.edit.display.js +24 -24
- package/lib/cjs/components/select/Select.form.js +3 -3
- package/lib/cjs/components/select/Select.js +235 -129
- package/lib/cjs/components/select/editForm/Select.edit.data.d.ts +1 -1
- package/lib/cjs/components/select/editForm/Select.edit.data.js +191 -57
- package/lib/cjs/components/select/editForm/Select.edit.display.js +2 -2
- package/lib/cjs/components/select/editForm/Select.edit.validation.js +4 -4
- package/lib/cjs/components/selectboxes/SelectBoxes.form.js +3 -3
- package/lib/cjs/components/selectboxes/SelectBoxes.js +31 -15
- package/lib/cjs/components/selectboxes/editForm/SelectBoxes.edit.validation.js +5 -5
- package/lib/cjs/components/signature/Signature.form.js +3 -3
- package/lib/cjs/components/signature/Signature.js +25 -15
- package/lib/cjs/components/signature/editForm/Signature.edit.display.js +19 -10
- package/lib/cjs/components/survey/Survey.form.js +3 -3
- package/lib/cjs/components/survey/Survey.js +30 -17
- package/lib/cjs/components/survey/editForm/Survey.edit.data.js +23 -11
- package/lib/cjs/components/survey/editForm/Survey.edit.display.js +1 -1
- package/lib/cjs/components/survey/editForm/Survey.edit.validation.js +1 -1
- package/lib/cjs/components/table/Table.form.js +1 -1
- package/lib/cjs/components/table/Table.js +7 -5
- package/lib/cjs/components/table/editForm/Table.edit.display.js +22 -22
- package/lib/cjs/components/tabs/Tabs.form.js +1 -1
- package/lib/cjs/components/tabs/Tabs.js +26 -8
- package/lib/cjs/components/tabs/editForm/Tabs.edit.display.js +21 -17
- package/lib/cjs/components/tags/Tags.form.js +1 -1
- package/lib/cjs/components/tags/Tags.js +28 -12
- package/lib/cjs/components/tags/editForm/Tags.edit.data.js +7 -7
- package/lib/cjs/components/textarea/TextArea.form.js +2 -2
- package/lib/cjs/components/textarea/TextArea.js +63 -45
- package/lib/cjs/components/textarea/editForm/TextArea.edit.display.js +96 -72
- package/lib/cjs/components/textarea/editForm/TextArea.edit.validation.js +3 -3
- package/lib/cjs/components/textfield/TextField.form.js +3 -3
- package/lib/cjs/components/textfield/TextField.js +32 -21
- package/lib/cjs/components/textfield/editForm/TextField.edit.data.js +15 -13
- package/lib/cjs/components/textfield/editForm/TextField.edit.display.js +31 -21
- package/lib/cjs/components/textfield/editForm/TextField.edit.validation.js +6 -6
- package/lib/cjs/components/time/Time.js +17 -10
- package/lib/cjs/components/time/editForm/Time.edit.display.js +2 -2
- package/lib/cjs/components/unknown/Unknown.form.js +5 -5
- package/lib/cjs/components/unknown/Unknown.js +2 -2
- package/lib/cjs/components/unknown/editForm/Unknown.edit.display.js +3 -3
- package/lib/cjs/components/url/Url.form.js +3 -3
- package/lib/cjs/components/url/Url.js +2 -2
- package/lib/cjs/components/url/editForm/Url.edit.display.js +3 -3
- package/lib/cjs/components/url/editForm/Url.edit.validation.js +1 -1
- package/lib/cjs/components/well/Well.form.js +1 -1
- package/lib/cjs/components/well/Well.js +2 -2
- package/lib/cjs/components/well/editForm/Well.edit.display.js +10 -10
- package/lib/cjs/formio.form.d.ts +2 -1
- package/lib/cjs/formio.form.js +38 -12
- package/lib/cjs/i18n.d.ts +4 -0
- package/lib/cjs/i18n.js +7 -3
- package/lib/cjs/package.json +1 -1
- package/lib/cjs/providers/address/AddressProvider.js +8 -5
- package/lib/cjs/providers/address/GoogleAddressProvider.d.ts +3 -3
- package/lib/cjs/providers/address/GoogleAddressProvider.js +24 -13
- package/lib/cjs/providers/processor/fileProcessor.js +3 -1
- package/lib/cjs/providers/storage/azure.js +5 -2
- package/lib/cjs/providers/storage/dropbox.js +4 -5
- package/lib/cjs/providers/storage/googleDrive.js +3 -4
- package/lib/cjs/providers/storage/index.js +1 -1
- package/lib/cjs/providers/storage/indexeddb.js +16 -6
- package/lib/cjs/providers/storage/s3.js +17 -6
- package/lib/cjs/providers/storage/uploadAdapter.js +17 -11
- package/lib/cjs/providers/storage/url.js +13 -11
- package/lib/cjs/providers/storage/xhr.js +17 -9
- package/lib/cjs/templates/index.js +1 -1
- package/lib/cjs/translations/de.d.ts +80 -0
- package/lib/cjs/translations/de.js +81 -0
- package/lib/cjs/translations/en.d.ts +0 -2
- package/lib/cjs/translations/en.js +7 -9
- package/lib/cjs/utils/ChoicesWrapper.js +2 -2
- package/lib/cjs/utils/builder.js +31 -7
- package/lib/cjs/utils/calendarUtils.js +7 -5
- package/lib/cjs/utils/conditionOperators/ConditionOperator.js +1 -1
- package/lib/cjs/utils/conditionOperators/DateGreaterThan.js +12 -4
- package/lib/cjs/utils/conditionOperators/IsEmptyValue.js +3 -1
- package/lib/cjs/utils/conditionOperators/IsEqualTo.js +10 -6
- package/lib/cjs/utils/conditionOperators/index.js +1 -1
- package/lib/cjs/utils/formUtils.js +1 -1
- package/lib/cjs/utils/i18n.js +7 -1
- package/lib/cjs/utils/index.d.ts +2 -1
- package/lib/cjs/utils/index.js +2 -2
- package/lib/cjs/utils/utils.d.ts +10 -1
- package/lib/cjs/utils/utils.js +175 -92
- package/lib/cjs/widgets/CalendarWidget.js +66 -49
- package/lib/cjs/widgets/InputWidget.js +6 -4
- package/lib/cjs/widgets/index.js +1 -1
- package/lib/mjs/CDN.js +12 -12
- package/lib/mjs/Element.d.ts +3 -2
- package/lib/mjs/Element.js +27 -21
- package/lib/mjs/Embed.js +76 -42
- package/lib/mjs/EventEmitter.js +1 -1
- package/lib/mjs/Form.d.ts +371 -341
- package/lib/mjs/Form.js +142 -126
- package/lib/mjs/FormBuilder.d.ts +3 -3
- package/lib/mjs/FormBuilder.js +2 -3
- package/lib/mjs/Formio.js +26 -23
- package/lib/mjs/InlineEmbed.js +23 -17
- package/lib/mjs/PDF.d.ts +1 -0
- package/lib/mjs/PDF.js +18 -15
- package/lib/mjs/PDFBuilder.js +51 -36
- package/lib/mjs/Webform.d.ts +8 -366
- package/lib/mjs/Webform.js +183 -250
- package/lib/mjs/WebformBuilder.js +220 -147
- package/lib/mjs/Wizard.js +93 -63
- package/lib/mjs/WizardBuilder.js +27 -19
- package/lib/mjs/addons/FormioAddon.js +1 -1
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.form.js +59 -57
- package/lib/mjs/addons/PasswordStrength/PasswordStrengthAddon.js +24 -16
- package/lib/mjs/addons/index.js +3 -3
- package/lib/mjs/components/Components.js +0 -4
- package/lib/mjs/components/_classes/component/Component.form.js +11 -11
- package/lib/mjs/components/_classes/component/Component.js +303 -184
- package/lib/mjs/components/_classes/component/editForm/Component.edit.addons.js +2 -4
- package/lib/mjs/components/_classes/component/editForm/Component.edit.api.js +5 -5
- package/lib/mjs/components/_classes/component/editForm/Component.edit.conditional.js +9 -11
- package/lib/mjs/components/_classes/component/editForm/Component.edit.data.d.ts +37 -0
- package/lib/mjs/components/_classes/component/editForm/Component.edit.data.js +39 -25
- package/lib/mjs/components/_classes/component/editForm/Component.edit.display.js +47 -29
- package/lib/mjs/components/_classes/component/editForm/Component.edit.layout.js +9 -9
- package/lib/mjs/components/_classes/component/editForm/Component.edit.logic.js +5 -7
- package/lib/mjs/components/_classes/component/editForm/Component.edit.validation.js +37 -34
- package/lib/mjs/components/_classes/component/editForm/utils.js +12 -16
- package/lib/mjs/components/_classes/componentModal/ComponentModal.js +2 -2
- package/lib/mjs/components/_classes/field/Field.js +8 -2
- package/lib/mjs/components/_classes/input/Input.js +27 -23
- package/lib/mjs/components/_classes/list/ListComponent.form.js +1 -1
- package/lib/mjs/components/_classes/list/ListComponent.js +27 -18
- package/lib/mjs/components/_classes/list/editForm/ListComponent.edit.data.js +36 -9
- package/lib/mjs/components/_classes/multivalue/Multivalue.js +32 -13
- package/lib/mjs/components/_classes/nested/NestedComponent.form.js +3 -3
- package/lib/mjs/components/_classes/nested/NestedComponent.js +32 -28
- package/lib/mjs/components/_classes/nestedarray/NestedArrayComponent.js +20 -15
- package/lib/mjs/components/_classes/nesteddata/NestedDataComponent.js +19 -17
- package/lib/mjs/components/address/Address.js +57 -46
- package/lib/mjs/components/address/editForm/Address.edit.data.js +2 -2
- package/lib/mjs/components/address/editForm/Address.edit.display.js +2 -2
- package/lib/mjs/components/address/editForm/Address.edit.provider.js +53 -11
- package/lib/mjs/components/alert/Alert.js +22 -16
- package/lib/mjs/components/button/Button.form.js +1 -1
- package/lib/mjs/components/button/Button.js +51 -28
- package/lib/mjs/components/button/editForm/Button.edit.display.js +49 -9
- package/lib/mjs/components/checkbox/Checkbox.d.ts +1 -1
- package/lib/mjs/components/checkbox/Checkbox.form.js +3 -3
- package/lib/mjs/components/checkbox/Checkbox.js +29 -21
- package/lib/mjs/components/checkbox/editForm/Checkbox.edit.data.js +1 -1
- package/lib/mjs/components/checkbox/editForm/Checkbox.edit.display.js +13 -3
- package/lib/mjs/components/checkbox/editForm/Checkbox.edit.validation.js +2 -2
- package/lib/mjs/components/columns/Columns.form.js +1 -1
- package/lib/mjs/components/columns/Columns.js +24 -12
- package/lib/mjs/components/columns/editForm/Columns.edit.display.js +17 -17
- package/lib/mjs/components/container/Container.form.js +2 -2
- package/lib/mjs/components/container/Container.js +6 -4
- package/lib/mjs/components/container/editForm/Container.edit.data.js +3 -3
- package/lib/mjs/components/container/editForm/Container.edit.display.js +4 -4
- package/lib/mjs/components/content/Content.form.js +4 -2
- package/lib/mjs/components/content/Content.js +10 -8
- package/lib/mjs/components/content/editForm/Content.edit.display.js +10 -10
- package/lib/mjs/components/currency/Currency.form.js +3 -3
- package/lib/mjs/components/currency/Currency.js +19 -10
- package/lib/mjs/components/currency/editForm/Currency.edit.data.js +5 -5
- package/lib/mjs/components/currency/editForm/Currency.edit.display.js +8 -8
- package/lib/mjs/components/datagrid/DataGrid.form.js +3 -3
- package/lib/mjs/components/datagrid/DataGrid.js +90 -39
- package/lib/mjs/components/datagrid/editForm/DataGrid.edit.data.js +1 -1
- package/lib/mjs/components/datagrid/editForm/DataGrid.edit.display.js +14 -14
- package/lib/mjs/components/datagrid/editForm/DataGrid.edit.validation.js +3 -3
- package/lib/mjs/components/datamap/DataMap.form.js +2 -2
- package/lib/mjs/components/datamap/DataMap.js +44 -31
- package/lib/mjs/components/datamap/editForm/DataMap.edit.data.js +1 -1
- package/lib/mjs/components/datamap/editForm/DataMap.edit.display.js +8 -8
- package/lib/mjs/components/datetime/DateTime.form.js +5 -5
- package/lib/mjs/components/datetime/DateTime.js +31 -16
- package/lib/mjs/components/datetime/editForm/DateTime.edit.data.js +4 -3
- package/lib/mjs/components/datetime/editForm/DateTime.edit.date.js +10 -10
- package/lib/mjs/components/datetime/editForm/DateTime.edit.display.js +22 -17
- package/lib/mjs/components/datetime/editForm/DateTime.edit.time.js +5 -5
- package/lib/mjs/components/datetime/editForm/DateTime.edit.validation.js +3 -3
- package/lib/mjs/components/day/Day.form.js +5 -5
- package/lib/mjs/components/day/Day.js +147 -57
- package/lib/mjs/components/day/editForm/Day.edit.day.js +13 -9
- package/lib/mjs/components/day/editForm/Day.edit.display.js +7 -7
- package/lib/mjs/components/day/editForm/Day.edit.month.js +12 -8
- package/lib/mjs/components/day/editForm/Day.edit.validation.js +7 -7
- package/lib/mjs/components/day/editForm/Day.edit.year.js +8 -8
- package/lib/mjs/components/editgrid/EditGrid.form.js +2 -2
- package/lib/mjs/components/editgrid/EditGrid.js +138 -90
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.data.js +2 -2
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.display.js +7 -2
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.templates.js +16 -16
- package/lib/mjs/components/editgrid/editForm/EditGrid.edit.validation.js +3 -3
- package/lib/mjs/components/email/Email.js +4 -4
- package/lib/mjs/components/email/editForm/Email.edit.display.js +3 -3
- package/lib/mjs/components/email/editForm/Email.edit.validation.js +6 -6
- package/lib/mjs/components/fieldset/Fieldset.form.js +1 -1
- package/lib/mjs/components/fieldset/Fieldset.js +2 -2
- package/lib/mjs/components/fieldset/editForm/Fieldset.edit.display.js +8 -8
- package/lib/mjs/components/file/File.form.js +4 -4
- package/lib/mjs/components/file/File.js +131 -84
- package/lib/mjs/components/file/editForm/File.edit.display.js +9 -5
- package/lib/mjs/components/file/editForm/File.edit.file.d.ts +37 -16
- package/lib/mjs/components/file/editForm/File.edit.file.js +169 -72
- package/lib/mjs/components/file/editForm/File.edit.validation.js +2 -2
- package/lib/mjs/components/form/Form.form.js +3 -3
- package/lib/mjs/components/form/Form.js +67 -51
- package/lib/mjs/components/form/editForm/Form.edit.data.js +1 -3
- package/lib/mjs/components/form/editForm/Form.edit.display.js +6 -7
- package/lib/mjs/components/form/editForm/Form.edit.form.js +10 -8
- package/lib/mjs/components/hidden/Hidden.form.js +4 -4
- package/lib/mjs/components/hidden/Hidden.js +2 -2
- package/lib/mjs/components/hidden/editForm/Hidden.edit.data.js +3 -3
- package/lib/mjs/components/hidden/editForm/Hidden.edit.display.js +10 -10
- package/lib/mjs/components/html/HTML.js +23 -17
- package/lib/mjs/components/html/editForm/HTML.edit.display.js +17 -17
- package/lib/mjs/components/html/editForm/HTML.edit.logic.js +2 -2
- package/lib/mjs/components/number/Number.form.js +3 -3
- package/lib/mjs/components/number/Number.js +28 -12
- package/lib/mjs/components/number/editForm/Number.edit.data.js +3 -3
- package/lib/mjs/components/number/editForm/Number.edit.display.js +4 -4
- package/lib/mjs/components/number/editForm/Number.edit.validation.js +9 -9
- package/lib/mjs/components/panel/Panel.form.js +1 -1
- package/lib/mjs/components/panel/Panel.js +2 -2
- package/lib/mjs/components/panel/editForm/Panel.edit.conditional.js +6 -8
- package/lib/mjs/components/panel/editForm/Panel.edit.display.js +55 -29
- package/lib/mjs/components/password/Password.form.js +3 -3
- package/lib/mjs/components/password/Password.js +5 -2
- package/lib/mjs/components/password/editForm/Password.edit.data.js +11 -11
- package/lib/mjs/components/password/editForm/Password.edit.display.js +3 -3
- package/lib/mjs/components/password/editForm/Password.edit.validation.js +3 -3
- package/lib/mjs/components/phonenumber/PhoneNumber.form.js +8 -8
- package/lib/mjs/components/phonenumber/PhoneNumber.js +3 -3
- package/lib/mjs/components/phonenumber/editForm/PhoneNumber.edit.validation.js +6 -6
- package/lib/mjs/components/radio/Radio.form.js +3 -3
- package/lib/mjs/components/radio/Radio.js +56 -27
- package/lib/mjs/components/radio/editForm/Radio.edit.data.js +23 -9
- package/lib/mjs/components/radio/editForm/Radio.edit.display.js +6 -6
- package/lib/mjs/components/radio/editForm/Radio.edit.validation.js +2 -2
- package/lib/mjs/components/recaptcha/ReCaptcha.form.js +5 -5
- package/lib/mjs/components/recaptcha/ReCaptcha.js +7 -5
- package/lib/mjs/components/recaptcha/editForm/ReCaptcha.edit.display.js +24 -24
- package/lib/mjs/components/select/Select.form.js +3 -3
- package/lib/mjs/components/select/Select.js +240 -134
- package/lib/mjs/components/select/editForm/Select.edit.data.d.ts +1 -1
- package/lib/mjs/components/select/editForm/Select.edit.data.js +191 -57
- package/lib/mjs/components/select/editForm/Select.edit.display.js +2 -2
- package/lib/mjs/components/select/editForm/Select.edit.validation.js +4 -4
- package/lib/mjs/components/selectboxes/SelectBoxes.form.js +3 -3
- package/lib/mjs/components/selectboxes/SelectBoxes.js +32 -16
- package/lib/mjs/components/selectboxes/editForm/SelectBoxes.edit.validation.js +5 -5
- package/lib/mjs/components/signature/Signature.form.js +3 -3
- package/lib/mjs/components/signature/Signature.js +25 -15
- package/lib/mjs/components/signature/editForm/Signature.edit.display.js +19 -10
- package/lib/mjs/components/survey/Survey.form.js +3 -3
- package/lib/mjs/components/survey/Survey.js +30 -17
- package/lib/mjs/components/survey/editForm/Survey.edit.data.js +23 -11
- package/lib/mjs/components/survey/editForm/Survey.edit.display.js +1 -1
- package/lib/mjs/components/survey/editForm/Survey.edit.validation.js +1 -1
- package/lib/mjs/components/table/Table.form.js +1 -1
- package/lib/mjs/components/table/Table.js +7 -5
- package/lib/mjs/components/table/editForm/Table.edit.display.js +22 -22
- package/lib/mjs/components/tabs/Tabs.form.js +1 -1
- package/lib/mjs/components/tabs/Tabs.js +26 -8
- package/lib/mjs/components/tabs/editForm/Tabs.edit.display.js +21 -17
- package/lib/mjs/components/tags/Tags.form.js +1 -1
- package/lib/mjs/components/tags/Tags.js +28 -12
- package/lib/mjs/components/tags/editForm/Tags.edit.data.js +7 -7
- package/lib/mjs/components/textarea/TextArea.form.js +2 -2
- package/lib/mjs/components/textarea/TextArea.js +75 -51
- package/lib/mjs/components/textarea/editForm/TextArea.edit.display.js +96 -72
- package/lib/mjs/components/textarea/editForm/TextArea.edit.validation.js +3 -3
- package/lib/mjs/components/textfield/TextField.form.js +3 -3
- package/lib/mjs/components/textfield/TextField.js +34 -23
- package/lib/mjs/components/textfield/editForm/TextField.edit.data.js +15 -13
- package/lib/mjs/components/textfield/editForm/TextField.edit.display.js +31 -21
- package/lib/mjs/components/textfield/editForm/TextField.edit.validation.js +6 -6
- package/lib/mjs/components/time/Time.js +17 -10
- package/lib/mjs/components/time/editForm/Time.edit.display.js +2 -2
- package/lib/mjs/components/unknown/Unknown.form.js +5 -5
- package/lib/mjs/components/unknown/Unknown.js +2 -2
- package/lib/mjs/components/unknown/editForm/Unknown.edit.display.js +3 -3
- package/lib/mjs/components/url/Url.form.js +3 -3
- package/lib/mjs/components/url/Url.js +2 -2
- package/lib/mjs/components/url/editForm/Url.edit.display.js +3 -3
- package/lib/mjs/components/url/editForm/Url.edit.validation.js +1 -1
- package/lib/mjs/components/well/Well.form.js +1 -1
- package/lib/mjs/components/well/Well.js +2 -2
- package/lib/mjs/components/well/editForm/Well.edit.display.js +10 -10
- package/lib/mjs/formio.form.d.ts +2 -1
- package/lib/mjs/formio.form.js +10 -8
- package/lib/mjs/i18n.d.ts +4 -0
- package/lib/mjs/i18n.js +7 -3
- package/lib/mjs/package.json +1 -1
- package/lib/mjs/providers/address/AddressProvider.js +8 -5
- package/lib/mjs/providers/address/GoogleAddressProvider.d.ts +3 -3
- package/lib/mjs/providers/address/GoogleAddressProvider.js +24 -13
- package/lib/mjs/providers/processor/fileProcessor.js +3 -1
- package/lib/mjs/providers/storage/azure.js +5 -2
- package/lib/mjs/providers/storage/dropbox.js +4 -5
- package/lib/mjs/providers/storage/googleDrive.js +3 -4
- package/lib/mjs/providers/storage/index.js +1 -1
- package/lib/mjs/providers/storage/indexeddb.js +16 -6
- package/lib/mjs/providers/storage/s3.js +19 -8
- package/lib/mjs/providers/storage/uploadAdapter.js +17 -11
- package/lib/mjs/providers/storage/url.js +13 -11
- package/lib/mjs/providers/storage/xhr.js +17 -9
- package/lib/mjs/templates/index.js +1 -1
- package/lib/mjs/translations/de.d.ts +80 -0
- package/lib/mjs/translations/de.js +79 -0
- package/lib/mjs/translations/en.d.ts +0 -2
- package/lib/mjs/translations/en.js +7 -9
- package/lib/mjs/utils/ChoicesWrapper.js +2 -2
- package/lib/mjs/utils/builder.js +31 -7
- package/lib/mjs/utils/calendarUtils.js +7 -5
- package/lib/mjs/utils/conditionOperators/ConditionOperator.js +1 -1
- package/lib/mjs/utils/conditionOperators/DateGreaterThan.js +16 -5
- package/lib/mjs/utils/conditionOperators/IsEmptyValue.js +3 -1
- package/lib/mjs/utils/conditionOperators/IsEqualTo.js +10 -6
- package/lib/mjs/utils/conditionOperators/index.js +1 -1
- package/lib/mjs/utils/formUtils.js +2 -2
- package/lib/mjs/utils/i18n.js +7 -1
- package/lib/mjs/utils/index.d.ts +2 -1
- package/lib/mjs/utils/index.js +3 -3
- package/lib/mjs/utils/utils.d.ts +10 -1
- package/lib/mjs/utils/utils.js +178 -91
- package/lib/mjs/widgets/CalendarWidget.js +67 -50
- package/lib/mjs/widgets/InputWidget.js +6 -4
- package/lib/mjs/widgets/index.js +1 -1
- package/package.json +3 -3
- package/lib/cjs/pdf.image.d.ts +0 -2
- package/lib/cjs/pdf.image.js +0 -94
- package/lib/cjs/utils/jsonlogic/operators.d.ts +0 -1
- package/lib/cjs/utils/jsonlogic/operators.js +0 -265
- package/lib/mjs/pdf.image.d.ts +0 -2
- package/lib/mjs/pdf.image.js +0 -94
- package/lib/mjs/utils/jsonlogic/operators.d.ts +0 -1
- package/lib/mjs/utils/jsonlogic/operators.js +0 -262
|
@@ -3,7 +3,7 @@ import Component from './components/_classes/component/Component';
|
|
|
3
3
|
import tippy from 'tippy.js';
|
|
4
4
|
import Components from './components/Components';
|
|
5
5
|
import { Formio } from './Formio';
|
|
6
|
-
import { fastCloneDeep, bootstrapVersion, getArrayFromComponentPath, getStringFromComponentPath, eachComponent, getComponent, componentInfo } from './utils';
|
|
6
|
+
import { fastCloneDeep, bootstrapVersion, getArrayFromComponentPath, getStringFromComponentPath, eachComponent, getComponent, componentInfo, } from './utils';
|
|
7
7
|
import BuilderUtils from './utils/builder';
|
|
8
8
|
import _ from 'lodash';
|
|
9
9
|
import autoScroll from 'dom-autoscroller';
|
|
@@ -15,7 +15,6 @@ if (typeof window !== 'undefined' && typeof window.global === 'undefined') {
|
|
|
15
15
|
}
|
|
16
16
|
import dragula from 'dragula';
|
|
17
17
|
export default class WebformBuilder extends Component {
|
|
18
|
-
// eslint-disable-next-line max-statements
|
|
19
18
|
constructor() {
|
|
20
19
|
let element, options;
|
|
21
20
|
if (arguments[0] instanceof HTMLElement || arguments[1]) {
|
|
@@ -62,17 +61,17 @@ export default class WebformBuilder extends Component {
|
|
|
62
61
|
}
|
|
63
62
|
}
|
|
64
63
|
this.groupOrder = this.groupOrder
|
|
65
|
-
.filter(group => group && !group.ignore)
|
|
64
|
+
.filter((group) => group && !group.ignore)
|
|
66
65
|
.sort((a, b) => a.weight - b.weight);
|
|
67
|
-
const defaultOpenedGroup = this.groupOrder.find(x => x.key !== 'basic' && x.default);
|
|
66
|
+
const defaultOpenedGroup = this.groupOrder.find((x) => x.key !== 'basic' && x.default);
|
|
68
67
|
if (defaultOpenedGroup) {
|
|
69
|
-
this.groupOrder.forEach(x => {
|
|
68
|
+
this.groupOrder.forEach((x) => {
|
|
70
69
|
if ('default' in x && x.key !== defaultOpenedGroup.key) {
|
|
71
70
|
x.default = false;
|
|
72
71
|
}
|
|
73
72
|
});
|
|
74
73
|
}
|
|
75
|
-
this.groupOrder = this.groupOrder.map(group => group.key);
|
|
74
|
+
this.groupOrder = this.groupOrder.map((group) => group.key);
|
|
76
75
|
for (const type in Components.components) {
|
|
77
76
|
const component = Components.components[type];
|
|
78
77
|
if (component.builderInfo && component.builderInfo.schema) {
|
|
@@ -90,9 +89,7 @@ export default class WebformBuilder extends Component {
|
|
|
90
89
|
for (const key in info.components) {
|
|
91
90
|
const compKey = group === 'resource' ? `component-${key}` : key;
|
|
92
91
|
let comp = info.components[compKey];
|
|
93
|
-
if (comp === true &&
|
|
94
|
-
Components.components[key] &&
|
|
95
|
-
Components.components[key].builderInfo) {
|
|
92
|
+
if (comp === true && Components.components[key] && Components.components[key].builderInfo) {
|
|
96
93
|
comp = Components.components[key].builderInfo;
|
|
97
94
|
}
|
|
98
95
|
if (comp && comp.schema) {
|
|
@@ -115,7 +112,8 @@ export default class WebformBuilder extends Component {
|
|
|
115
112
|
// The main webform shouldn't have this class as it adds extra styles.
|
|
116
113
|
return template;
|
|
117
114
|
}
|
|
118
|
-
if (this.options.disabled && this.options.disabled.includes(self.key) ||
|
|
115
|
+
if ((this.options.disabled && this.options.disabled.includes(self.key)) ||
|
|
116
|
+
self.parent.noDragDrop) {
|
|
119
117
|
return html;
|
|
120
118
|
}
|
|
121
119
|
return this.renderTemplate('builderComponent', {
|
|
@@ -124,20 +122,23 @@ export default class WebformBuilder extends Component {
|
|
|
124
122
|
childComponent: component,
|
|
125
123
|
design: self?.options?.design,
|
|
126
124
|
editJson: self?.options?.editJson,
|
|
127
|
-
editComponent: this.hasEditTabs(component.type)
|
|
125
|
+
editComponent: this.hasEditTabs(component.type),
|
|
128
126
|
});
|
|
129
127
|
};
|
|
130
128
|
this.options.hooks.renderComponents = (html, { components, self }) => {
|
|
131
129
|
// if Datagrid and already has a component, don't make it droppable.
|
|
132
|
-
if (self.type === 'datagrid' && components.length > 0 || self.noDragDrop) {
|
|
130
|
+
if ((self.type === 'datagrid' && components.length > 0) || self.noDragDrop) {
|
|
133
131
|
return html;
|
|
134
132
|
}
|
|
135
133
|
if (!components ||
|
|
136
134
|
(!components.length && !components.nodrop) ||
|
|
137
|
-
(self.type === 'form' &&
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
135
|
+
(self.type === 'form' &&
|
|
136
|
+
components.length <= 1 &&
|
|
137
|
+
(components.length === 0 || components[0].type === 'button'))) {
|
|
138
|
+
html =
|
|
139
|
+
this.renderTemplate('builderPlaceholder', {
|
|
140
|
+
position: 0,
|
|
141
|
+
}) + html;
|
|
141
142
|
}
|
|
142
143
|
return this.renderTemplate('builderComponents', {
|
|
143
144
|
key: self.key,
|
|
@@ -174,7 +175,8 @@ export default class WebformBuilder extends Component {
|
|
|
174
175
|
this.dragula.containers.push(containerElement);
|
|
175
176
|
}
|
|
176
177
|
// If this is an existing datagrid element, don't make it draggable.
|
|
177
|
-
if ((component.type === 'datagrid' || component.type === 'datamap') &&
|
|
178
|
+
if ((component.type === 'datagrid' || component.type === 'datamap') &&
|
|
179
|
+
components.length > 0) {
|
|
178
180
|
return element;
|
|
179
181
|
}
|
|
180
182
|
// Since we added a wrapper, need to return the original element so that we can find the components inside it.
|
|
@@ -196,19 +198,27 @@ export default class WebformBuilder extends Component {
|
|
|
196
198
|
params: {
|
|
197
199
|
type: 'resource',
|
|
198
200
|
limit: 1000000,
|
|
199
|
-
select: '_id,title,name,components'
|
|
200
|
-
}
|
|
201
|
+
select: '_id,title,name,components',
|
|
202
|
+
},
|
|
201
203
|
};
|
|
202
204
|
if (this.options && this.options.resourceTag) {
|
|
203
|
-
query.params.tags = [
|
|
205
|
+
query.params.tags = [
|
|
206
|
+
this.options.resourceTag,
|
|
207
|
+
];
|
|
204
208
|
}
|
|
205
209
|
else if (!this.options || !this.options.hasOwnProperty('resourceTag')) {
|
|
206
|
-
query.params.tags = [
|
|
210
|
+
query.params.tags = [
|
|
211
|
+
'builder',
|
|
212
|
+
];
|
|
207
213
|
}
|
|
208
214
|
const formio = new Formio(Formio.projectUrl);
|
|
209
215
|
const isResourcesDisabled = this.options.builder && this.options.builder.resource === false;
|
|
210
|
-
formio
|
|
211
|
-
|
|
216
|
+
formio
|
|
217
|
+
.loadProject()
|
|
218
|
+
.then((project) => {
|
|
219
|
+
if (project &&
|
|
220
|
+
(_.get(project, 'settings.addConfigToForms', false) ||
|
|
221
|
+
_.get(project, 'addConfigToForms', false))) {
|
|
212
222
|
const config = project.config || {};
|
|
213
223
|
this.options.formConfig = config;
|
|
214
224
|
const pathToFormConfig = 'webform._form.config';
|
|
@@ -217,13 +227,13 @@ export default class WebformBuilder extends Component {
|
|
|
217
227
|
_.set(this, pathToFormConfig, config);
|
|
218
228
|
}
|
|
219
229
|
}
|
|
220
|
-
})
|
|
230
|
+
})
|
|
231
|
+
.catch((err) => {
|
|
221
232
|
console.warn(`Could not load project settings: ${err.message || err}`);
|
|
222
233
|
});
|
|
223
234
|
if (!formio.noProject && !isResourcesDisabled && formio.formsUrl) {
|
|
224
235
|
const resourceOptions = this.options.builder && this.options.builder.resource;
|
|
225
|
-
formio.loadForms(query)
|
|
226
|
-
.then((resources) => {
|
|
236
|
+
formio.loadForms(query).then((resources) => {
|
|
227
237
|
if (resources.length) {
|
|
228
238
|
this.builder.resource = {
|
|
229
239
|
title: resourceOptions ? resourceOptions.title : 'Existing Resource Fields',
|
|
@@ -231,7 +241,7 @@ export default class WebformBuilder extends Component {
|
|
|
231
241
|
weight: resourceOptions ? resourceOptions.weight : 50,
|
|
232
242
|
subgroups: [],
|
|
233
243
|
components: [],
|
|
234
|
-
componentOrder: []
|
|
244
|
+
componentOrder: [],
|
|
235
245
|
};
|
|
236
246
|
this.groups.resource = {
|
|
237
247
|
title: resourceOptions ? resourceOptions.title : 'Existing Resource Fields',
|
|
@@ -239,7 +249,7 @@ export default class WebformBuilder extends Component {
|
|
|
239
249
|
weight: resourceOptions ? resourceOptions.weight : 50,
|
|
240
250
|
subgroups: [],
|
|
241
251
|
components: [],
|
|
242
|
-
componentOrder: []
|
|
252
|
+
componentOrder: [],
|
|
243
253
|
};
|
|
244
254
|
if (!this.groupOrder.includes('resource')) {
|
|
245
255
|
this.groupOrder.push('resource');
|
|
@@ -294,9 +304,9 @@ export default class WebformBuilder extends Component {
|
|
|
294
304
|
label: component.label,
|
|
295
305
|
key: component.key,
|
|
296
306
|
lockKey: true,
|
|
297
|
-
source:
|
|
298
|
-
isNew: true
|
|
299
|
-
}
|
|
307
|
+
source: !this.options.noSource ? resource._id : undefined,
|
|
308
|
+
isNew: true,
|
|
309
|
+
},
|
|
300
310
|
});
|
|
301
311
|
}, true);
|
|
302
312
|
this.groups.resource.subgroups.push(subgroup);
|
|
@@ -308,9 +318,12 @@ export default class WebformBuilder extends Component {
|
|
|
308
318
|
allowHTML: true,
|
|
309
319
|
trigger: 'mouseenter focus',
|
|
310
320
|
placement: 'top',
|
|
311
|
-
delay: [
|
|
321
|
+
delay: [
|
|
322
|
+
200,
|
|
323
|
+
0,
|
|
324
|
+
],
|
|
312
325
|
zIndex: 10000,
|
|
313
|
-
content: title
|
|
326
|
+
content: title,
|
|
314
327
|
});
|
|
315
328
|
}
|
|
316
329
|
attachComponent(element, component) {
|
|
@@ -325,7 +338,7 @@ export default class WebformBuilder extends Component {
|
|
|
325
338
|
moveComponent: 'single',
|
|
326
339
|
copyComponent: 'single',
|
|
327
340
|
pasteComponent: 'single',
|
|
328
|
-
editJson: 'single'
|
|
341
|
+
editJson: 'single',
|
|
329
342
|
});
|
|
330
343
|
if (component.refs.copyComponent) {
|
|
331
344
|
this.attachTooltip(component.refs.copyComponent, this.t('Copy'));
|
|
@@ -349,7 +362,9 @@ export default class WebformBuilder extends Component {
|
|
|
349
362
|
const parent = this.getParentElement(element);
|
|
350
363
|
if (component.refs.editComponent) {
|
|
351
364
|
this.attachTooltip(component.refs.editComponent, this.t('Edit'));
|
|
352
|
-
component.addEventListener(component.refs.editComponent, 'click', () => this.editComponent(component.schema, parent, false, false, component.component, {
|
|
365
|
+
component.addEventListener(component.refs.editComponent, 'click', () => this.editComponent(component.schema, parent, false, false, component.component, {
|
|
366
|
+
inDataGrid: component.isInDataGrid,
|
|
367
|
+
}));
|
|
353
368
|
}
|
|
354
369
|
if (component.refs.editJson) {
|
|
355
370
|
this.attachTooltip(component.refs.editJson, this.t('Edit JSON'));
|
|
@@ -365,7 +380,7 @@ export default class WebformBuilder extends Component {
|
|
|
365
380
|
this.webform = new Webform(this.element, options);
|
|
366
381
|
if (this.element) {
|
|
367
382
|
this.loadRefs(this.element, {
|
|
368
|
-
form: 'single'
|
|
383
|
+
form: 'single',
|
|
369
384
|
});
|
|
370
385
|
if (this.refs.form) {
|
|
371
386
|
this.webform.element = this.refs.form;
|
|
@@ -389,20 +404,20 @@ export default class WebformBuilder extends Component {
|
|
|
389
404
|
},
|
|
390
405
|
advanced: {
|
|
391
406
|
title: 'Advanced',
|
|
392
|
-
weight: 10
|
|
407
|
+
weight: 10,
|
|
393
408
|
},
|
|
394
409
|
layout: {
|
|
395
410
|
title: 'Layout',
|
|
396
|
-
weight: 20
|
|
411
|
+
weight: 20,
|
|
397
412
|
},
|
|
398
413
|
data: {
|
|
399
414
|
title: 'Data',
|
|
400
|
-
weight: 30
|
|
415
|
+
weight: 30,
|
|
401
416
|
},
|
|
402
417
|
premium: {
|
|
403
418
|
title: 'Premium',
|
|
404
|
-
weight: 40
|
|
405
|
-
}
|
|
419
|
+
weight: 40,
|
|
420
|
+
},
|
|
406
421
|
};
|
|
407
422
|
}
|
|
408
423
|
redraw() {
|
|
@@ -439,7 +454,10 @@ export default class WebformBuilder extends Component {
|
|
|
439
454
|
const componentSchema = component.component;
|
|
440
455
|
// If the current component is the namespace, we don't need to find it again.
|
|
441
456
|
if (namespaceKey === component.key) {
|
|
442
|
-
return [
|
|
457
|
+
return [
|
|
458
|
+
...componentSchema.components,
|
|
459
|
+
componentSchema,
|
|
460
|
+
];
|
|
443
461
|
}
|
|
444
462
|
// Get the namespace component so we have the original object.
|
|
445
463
|
const namespaceComponent = getComponent(this.form.components, namespaceKey, true);
|
|
@@ -451,7 +469,16 @@ export default class WebformBuilder extends Component {
|
|
|
451
469
|
return null;
|
|
452
470
|
}
|
|
453
471
|
// Some components are their own namespace.
|
|
454
|
-
if ([
|
|
472
|
+
if ([
|
|
473
|
+
'address',
|
|
474
|
+
'container',
|
|
475
|
+
'datagrid',
|
|
476
|
+
'editgrid',
|
|
477
|
+
'dynamicWizard',
|
|
478
|
+
'tree',
|
|
479
|
+
].includes(component.type) ||
|
|
480
|
+
component.tree ||
|
|
481
|
+
component.arrayTree) {
|
|
455
482
|
return component.key;
|
|
456
483
|
}
|
|
457
484
|
// Anything else, keep going up.
|
|
@@ -471,7 +498,7 @@ export default class WebformBuilder extends Component {
|
|
|
471
498
|
group,
|
|
472
499
|
groupKey: group.key,
|
|
473
500
|
groupId: `group-container-${groupKey}`,
|
|
474
|
-
subgroups: []
|
|
501
|
+
subgroups: [],
|
|
475
502
|
})),
|
|
476
503
|
keyboardActionsEnabled: this.keyboardActionsEnabled,
|
|
477
504
|
})),
|
|
@@ -490,7 +517,7 @@ export default class WebformBuilder extends Component {
|
|
|
490
517
|
sidebar: 'single',
|
|
491
518
|
'sidebar-search': 'single',
|
|
492
519
|
'sidebar-groups': 'single',
|
|
493
|
-
|
|
520
|
+
container: 'multiple',
|
|
494
521
|
'sidebar-anchor': 'multiple',
|
|
495
522
|
'sidebar-group': 'multiple',
|
|
496
523
|
'sidebar-container': 'multiple',
|
|
@@ -516,11 +543,15 @@ export default class WebformBuilder extends Component {
|
|
|
516
543
|
};
|
|
517
544
|
const hideShow = (group, forceShow, toggle = false) => {
|
|
518
545
|
if (forceShow || (toggle && !Array.from(group.classList).includes('show'))) {
|
|
519
|
-
group.classList.add([
|
|
546
|
+
group.classList.add([
|
|
547
|
+
'show',
|
|
548
|
+
]);
|
|
520
549
|
group.style.display = 'inherit';
|
|
521
550
|
}
|
|
522
551
|
else {
|
|
523
|
-
group.classList.remove([
|
|
552
|
+
group.classList.remove([
|
|
553
|
+
'show',
|
|
554
|
+
]);
|
|
524
555
|
group.style.display = 'none';
|
|
525
556
|
}
|
|
526
557
|
};
|
|
@@ -537,7 +568,9 @@ export default class WebformBuilder extends Component {
|
|
|
537
568
|
const openByDefault = getAttribute(group, 'default') === 'true';
|
|
538
569
|
const groupId = group.getAttribute('id').slice('group-'.length);
|
|
539
570
|
const groupParent = getAttribute(group, 'parent').slice('#builder-sidebar-'.length);
|
|
540
|
-
if ((
|
|
571
|
+
if ((openByDefault && groupParent === clickedId) ||
|
|
572
|
+
groupId === clickedParentId ||
|
|
573
|
+
groupIndex === index) {
|
|
541
574
|
hideShow(group, false, true);
|
|
542
575
|
}
|
|
543
576
|
});
|
|
@@ -562,13 +595,15 @@ export default class WebformBuilder extends Component {
|
|
|
562
595
|
}
|
|
563
596
|
const drake = this.dragula;
|
|
564
597
|
if (this.refs.form) {
|
|
565
|
-
autoScroll([
|
|
598
|
+
autoScroll([
|
|
599
|
+
window,
|
|
600
|
+
], {
|
|
566
601
|
margin: 20,
|
|
567
602
|
maxSpeed: 6,
|
|
568
603
|
scrollWhenOutside: true,
|
|
569
604
|
autoScroll: function () {
|
|
570
605
|
return this.down && drake?.dragging;
|
|
571
|
-
}
|
|
606
|
+
},
|
|
572
607
|
});
|
|
573
608
|
return this.webform.attach(this.refs.form);
|
|
574
609
|
}
|
|
@@ -603,30 +638,29 @@ export default class WebformBuilder extends Component {
|
|
|
603
638
|
};
|
|
604
639
|
const filterGroupOrder = (groupOrder, searchValue) => {
|
|
605
640
|
const result = _.cloneDeep(groupOrder);
|
|
606
|
-
return result.filter(key => filterGroupBy(this.groups[key], searchValue));
|
|
641
|
+
return result.filter((key) => filterGroupBy(this.groups[key], searchValue));
|
|
607
642
|
};
|
|
608
643
|
const filterSubgroups = (groups, searchValue) => {
|
|
609
644
|
const result = _.clone(groups);
|
|
610
645
|
return result
|
|
611
|
-
.map(subgroup => filterGroupBy(subgroup, searchValue))
|
|
612
|
-
.filter(subgroup => !_.isNull(subgroup));
|
|
646
|
+
.map((subgroup) => filterGroupBy(subgroup, searchValue))
|
|
647
|
+
.filter((subgroup) => !_.isNull(subgroup));
|
|
613
648
|
};
|
|
614
|
-
const toTemplate = groupKey => {
|
|
649
|
+
const toTemplate = (groupKey) => {
|
|
615
650
|
return {
|
|
616
651
|
group: filterGroupBy(this.groups[groupKey], searchValue),
|
|
617
652
|
groupKey,
|
|
618
653
|
groupId: sidebar.id || sidebarGroups.id,
|
|
619
|
-
subgroups: filterSubgroups(this.groups[groupKey].subgroups, searchValue)
|
|
620
|
-
.map((group) => this.renderTemplate('builderSidebarGroup', {
|
|
654
|
+
subgroups: filterSubgroups(this.groups[groupKey].subgroups, searchValue).map((group) => this.renderTemplate('builderSidebarGroup', {
|
|
621
655
|
group,
|
|
622
656
|
groupKey: group.key,
|
|
623
657
|
groupId: `group-container-${groupKey}`,
|
|
624
|
-
subgroups: []
|
|
658
|
+
subgroups: [],
|
|
625
659
|
})),
|
|
626
660
|
};
|
|
627
661
|
};
|
|
628
662
|
sidebarGroups.innerHTML = filterGroupOrder(this.groupOrder, searchValue)
|
|
629
|
-
.map(groupKey => this.renderTemplate('builderSidebarGroup', toTemplate(groupKey)))
|
|
663
|
+
.map((groupKey) => this.renderTemplate('builderSidebarGroup', toTemplate(groupKey)))
|
|
630
664
|
.join('');
|
|
631
665
|
this.loadRefs(this.element, {
|
|
632
666
|
'sidebar-groups': 'single',
|
|
@@ -644,10 +678,10 @@ export default class WebformBuilder extends Component {
|
|
|
644
678
|
const isResource = groupInfo.key.indexOf('resource-') === 0;
|
|
645
679
|
if (components) {
|
|
646
680
|
groupInfo.componentOrder = Object.keys(components)
|
|
647
|
-
.map(key => components[key])
|
|
648
|
-
.filter(component => component && !component.ignore && !component.ignoreForForm)
|
|
681
|
+
.map((key) => components[key])
|
|
682
|
+
.filter((component) => component && !component.ignore && !component.ignoreForForm)
|
|
649
683
|
.sort((a, b) => a.weight - b.weight)
|
|
650
|
-
.map(component => isResource ? `component-${component.key}` : component.key);
|
|
684
|
+
.map((component) => (isResource ? `component-${component.key}` : component.key));
|
|
651
685
|
}
|
|
652
686
|
}
|
|
653
687
|
updateDragAndDrop() {
|
|
@@ -663,7 +697,9 @@ export default class WebformBuilder extends Component {
|
|
|
663
697
|
if (this.dragula) {
|
|
664
698
|
this.dragula.destroy();
|
|
665
699
|
}
|
|
666
|
-
const containersArray = Array.prototype.slice
|
|
700
|
+
const containersArray = Array.prototype.slice
|
|
701
|
+
.call(this.refs['sidebar-container'])
|
|
702
|
+
.filter((item) => {
|
|
667
703
|
return item.id !== 'group-container-resource';
|
|
668
704
|
});
|
|
669
705
|
if (!dragula) {
|
|
@@ -672,8 +708,8 @@ export default class WebformBuilder extends Component {
|
|
|
672
708
|
this.dragula = dragula(containersArray, {
|
|
673
709
|
moves(el) {
|
|
674
710
|
let moves = true;
|
|
675
|
-
const list = Array.from(el.classList).filter(item => item.indexOf('formio-component-') === 0);
|
|
676
|
-
list.forEach(item => {
|
|
711
|
+
const list = Array.from(el.classList).filter((item) => item.indexOf('formio-component-') === 0);
|
|
712
|
+
list.forEach((item) => {
|
|
677
713
|
const key = item.slice('formio-component-'.length);
|
|
678
714
|
if (options.disabled && options.disabled.includes(key)) {
|
|
679
715
|
moves = false;
|
|
@@ -689,7 +725,7 @@ export default class WebformBuilder extends Component {
|
|
|
689
725
|
},
|
|
690
726
|
accepts(el, target) {
|
|
691
727
|
return !el.contains(target) && !target.classList.contains('no-drop');
|
|
692
|
-
}
|
|
728
|
+
},
|
|
693
729
|
}).on('drop', (element, target, source, sibling) => this.onDrop(element, target, source, sibling));
|
|
694
730
|
}
|
|
695
731
|
detach() {
|
|
@@ -723,7 +759,8 @@ export default class WebformBuilder extends Component {
|
|
|
723
759
|
info = fastCloneDeep(groupComponents[key].schema);
|
|
724
760
|
}
|
|
725
761
|
}
|
|
726
|
-
else if (group === 'searchFields') {
|
|
762
|
+
else if (group === 'searchFields') {
|
|
763
|
+
//Search components go into this group
|
|
727
764
|
const resourceGroups = this.groups.resource.subgroups;
|
|
728
765
|
for (let ix = 0; ix < resourceGroups.length; ix++) {
|
|
729
766
|
const resourceGroup = resourceGroups[ix];
|
|
@@ -751,22 +788,21 @@ export default class WebformBuilder extends Component {
|
|
|
751
788
|
let tabIndex = 0;
|
|
752
789
|
switch (parent.type) {
|
|
753
790
|
case 'table':
|
|
754
|
-
tableRowIndex = _.findIndex(parent.rows, row => row.some(column => column.components.some(comp => comp.key === component.key)));
|
|
755
|
-
tableColumnIndex = _.findIndex(parent.rows[tableRowIndex], (column => column.components.some(comp => comp.key === component.key))
|
|
791
|
+
tableRowIndex = _.findIndex(parent.rows, (row) => row.some((column) => column.components.some((comp) => comp.key === component.key)));
|
|
792
|
+
tableColumnIndex = _.findIndex(parent.rows[tableRowIndex], (column) => column.components.some((comp) => comp.key === component.key));
|
|
756
793
|
path = `rows[${tableRowIndex}][${tableColumnIndex}].components`;
|
|
757
794
|
break;
|
|
758
795
|
case 'columns':
|
|
759
|
-
columnIndex = _.findIndex(parent.columns, column => column.components.some(comp => comp.key === component.key));
|
|
796
|
+
columnIndex = _.findIndex(parent.columns, (column) => column.components.some((comp) => comp.key === component.key));
|
|
760
797
|
path = `columns[${columnIndex}].components`;
|
|
761
798
|
break;
|
|
762
799
|
case 'tabs':
|
|
763
|
-
tabIndex = _.findIndex(parent.components, tab => tab.components.some(comp => comp.key === component.key));
|
|
800
|
+
tabIndex = _.findIndex(parent.components, (tab) => tab.components.some((comp) => comp.key === component.key));
|
|
764
801
|
path = `components[${tabIndex}].components`;
|
|
765
802
|
break;
|
|
766
803
|
}
|
|
767
804
|
return path;
|
|
768
805
|
}
|
|
769
|
-
/* eslint-disable max-statements */
|
|
770
806
|
onDrop(element, target, source, sibling) {
|
|
771
807
|
if (!target) {
|
|
772
808
|
return;
|
|
@@ -801,7 +837,7 @@ export default class WebformBuilder extends Component {
|
|
|
801
837
|
return;
|
|
802
838
|
}
|
|
803
839
|
// Show an error if siblings are disabled for a component and such a component already exists.
|
|
804
|
-
const compKey =
|
|
840
|
+
const compKey = group === 'resource' ? `component-${key}` : key;
|
|
805
841
|
const draggableComponent = this.groups[group]?.components[compKey] || {};
|
|
806
842
|
if (draggableComponent.disableSiblings) {
|
|
807
843
|
let isCompAlreadyExists = false;
|
|
@@ -840,8 +876,10 @@ export default class WebformBuilder extends Component {
|
|
|
840
876
|
if (target.formioContainer) {
|
|
841
877
|
if (sibling) {
|
|
842
878
|
if (!sibling.getAttribute('data-noattach')) {
|
|
843
|
-
index = _.findIndex(target.formioContainer, {
|
|
844
|
-
|
|
879
|
+
index = _.findIndex(target.formioContainer, {
|
|
880
|
+
key: _.get(sibling, 'formioComponent.component.key'),
|
|
881
|
+
});
|
|
882
|
+
index = index === -1 ? 0 : index;
|
|
845
883
|
}
|
|
846
884
|
else {
|
|
847
885
|
index = sibling.getAttribute('data-position');
|
|
@@ -863,11 +901,11 @@ export default class WebformBuilder extends Component {
|
|
|
863
901
|
parent.addChildComponent(info, element, target, source, sibling);
|
|
864
902
|
}
|
|
865
903
|
const componentInDataGrid = parent.type === 'datagrid';
|
|
866
|
-
if (isNew
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
904
|
+
if (isNew &&
|
|
905
|
+
!this.options.noNewEdit &&
|
|
906
|
+
!info.noNewEdit &&
|
|
907
|
+
this.hasEditTabs(info.type) &&
|
|
908
|
+
!(this.options.design && info.type === 'reviewpage')) {
|
|
871
909
|
this.editComponent(info, target, isNew, null, null, { inDataGrid: componentInDataGrid });
|
|
872
910
|
}
|
|
873
911
|
// Only rebuild the parts needing to be rebuilt.
|
|
@@ -930,12 +968,12 @@ export default class WebformBuilder extends Component {
|
|
|
930
968
|
block: false,
|
|
931
969
|
action: 'submit',
|
|
932
970
|
disableOnInvalid: true,
|
|
933
|
-
theme: 'primary'
|
|
971
|
+
theme: 'primary',
|
|
934
972
|
});
|
|
935
973
|
}
|
|
936
974
|
if (this.webform) {
|
|
937
975
|
const shouldRebuild = !this.webform.form.components ||
|
|
938
|
-
|
|
976
|
+
form.components.length !== this.webform.form.components.length;
|
|
939
977
|
return this.webform.setForm(form, { keepAsReference: true }).then(() => {
|
|
940
978
|
if (this.refs.form) {
|
|
941
979
|
this.builderHeight = this.refs.form.offsetHeight;
|
|
@@ -952,7 +990,7 @@ export default class WebformBuilder extends Component {
|
|
|
952
990
|
//populate isEnabled for captcha form settings
|
|
953
991
|
let isCaptchaEnabled = false;
|
|
954
992
|
if (this.form.components) {
|
|
955
|
-
eachComponent(form.components, component => {
|
|
993
|
+
eachComponent(form.components, (component) => {
|
|
956
994
|
if (isCaptchaEnabled) {
|
|
957
995
|
return;
|
|
958
996
|
}
|
|
@@ -979,7 +1017,8 @@ export default class WebformBuilder extends Component {
|
|
|
979
1017
|
(Array.isArray(component.rows) && component.rows.length) ||
|
|
980
1018
|
(Array.isArray(component.columns) && component.columns.length));
|
|
981
1019
|
if (this.options.alwaysConfirmComponentRemoval || removingComponentsGroup) {
|
|
982
|
-
const message = removingComponentsGroup
|
|
1020
|
+
const message = removingComponentsGroup
|
|
1021
|
+
? 'Removing this component will also remove all of its children. Are you sure you want to do this?'
|
|
983
1022
|
: 'Are you sure you want to remove this component?';
|
|
984
1023
|
remove = window.confirm(this.t(message));
|
|
985
1024
|
}
|
|
@@ -998,7 +1037,7 @@ export default class WebformBuilder extends Component {
|
|
|
998
1037
|
if (component.input && componentInstance && parent.formioComponent) {
|
|
999
1038
|
const parentDefaultValue = _.get(parent.formioComponent, 'component.defaultValue', null);
|
|
1000
1039
|
if (Array.isArray(parentDefaultValue)) {
|
|
1001
|
-
parentDefaultValue.forEach(v => _.unset(v, componentInstance.key));
|
|
1040
|
+
parentDefaultValue.forEach((v) => _.unset(v, componentInstance.key));
|
|
1002
1041
|
}
|
|
1003
1042
|
else if (typeof parentDefaultValue === 'object') {
|
|
1004
1043
|
_.unset(parentDefaultValue, componentInstance.key);
|
|
@@ -1023,23 +1062,29 @@ export default class WebformBuilder extends Component {
|
|
|
1023
1062
|
}
|
|
1024
1063
|
}
|
|
1025
1064
|
updateComponent(component, changed) {
|
|
1026
|
-
const sanitizeConfig = _.get(this.webform, 'form.settings.sanitizeConfig') ||
|
|
1065
|
+
const sanitizeConfig = _.get(this.webform, 'form.settings.sanitizeConfig') ||
|
|
1066
|
+
_.get(this.webform, 'form.globalSettings.sanitizeConfig');
|
|
1027
1067
|
// Update the preview.
|
|
1028
1068
|
if (this.preview) {
|
|
1029
1069
|
this.preview.form = {
|
|
1030
|
-
components: [
|
|
1070
|
+
components: [
|
|
1071
|
+
_.omit({ ...component }, [
|
|
1031
1072
|
'hidden',
|
|
1032
1073
|
'conditional',
|
|
1033
1074
|
'calculateValue',
|
|
1034
1075
|
'logic',
|
|
1035
1076
|
'autofocus',
|
|
1036
1077
|
'customConditional',
|
|
1037
|
-
])
|
|
1078
|
+
]),
|
|
1079
|
+
],
|
|
1038
1080
|
config: this.options.formConfig || {},
|
|
1039
1081
|
sanitizeConfig,
|
|
1040
1082
|
};
|
|
1041
|
-
const fieldsToRemoveDoubleQuotes = [
|
|
1042
|
-
|
|
1083
|
+
const fieldsToRemoveDoubleQuotes = [
|
|
1084
|
+
'label',
|
|
1085
|
+
'tooltip',
|
|
1086
|
+
];
|
|
1087
|
+
this.preview.form.components.forEach((component) => this.replaceDoubleQuotes(component, fieldsToRemoveDoubleQuotes));
|
|
1043
1088
|
const previewElement = this.componentEdit.querySelector(`[${this._referenceAttributeName}="preview"]`);
|
|
1044
1089
|
if (previewElement) {
|
|
1045
1090
|
this.setContent(previewElement, this.preview.render(), null, sanitizeConfig);
|
|
@@ -1049,8 +1094,11 @@ export default class WebformBuilder extends Component {
|
|
|
1049
1094
|
// Change the "default value" field to be reflective of this component.
|
|
1050
1095
|
const defaultValueComponent = getComponent(this.editForm.components, 'defaultValue', true);
|
|
1051
1096
|
if (defaultValueComponent && component.type !== 'hidden') {
|
|
1052
|
-
const defaultChanged = changed &&
|
|
1053
|
-
|
|
1097
|
+
const defaultChanged = changed &&
|
|
1098
|
+
((changed.component && changed.component.key === 'defaultValue') ||
|
|
1099
|
+
(changed.instance &&
|
|
1100
|
+
defaultValueComponent.hasComponent &&
|
|
1101
|
+
defaultValueComponent.hasComponent(changed.instance)));
|
|
1054
1102
|
if (!defaultChanged) {
|
|
1055
1103
|
_.assign(defaultValueComponent.component, _.omit({ ...component }, [
|
|
1056
1104
|
'key',
|
|
@@ -1079,11 +1127,11 @@ export default class WebformBuilder extends Component {
|
|
|
1079
1127
|
if (!this.originalDefaultValue) {
|
|
1080
1128
|
this.originalDefaultValue = fastCloneDeep(defaultValueComponent.component);
|
|
1081
1129
|
}
|
|
1082
|
-
eachComponent(defaultValueComponent.component.components, (comp => {
|
|
1130
|
+
eachComponent(defaultValueComponent.component.components, (comp) => {
|
|
1083
1131
|
if (comp.validate?.required) {
|
|
1084
1132
|
comp.validate.required = false;
|
|
1085
1133
|
}
|
|
1086
|
-
})
|
|
1134
|
+
});
|
|
1087
1135
|
}
|
|
1088
1136
|
const parentComponent = defaultValueComponent.parent;
|
|
1089
1137
|
let tabIndex = -1;
|
|
@@ -1138,9 +1186,15 @@ export default class WebformBuilder extends Component {
|
|
|
1138
1186
|
const isLayout = componentInfo(comp).layout;
|
|
1139
1187
|
if (!isLayout) {
|
|
1140
1188
|
if (keys.has(paths.dataPath)) {
|
|
1141
|
-
const onlyRadioCheckboxes = repeatablePaths[paths.dataPath]?.onlyRadioCheckboxes === false
|
|
1189
|
+
const onlyRadioCheckboxes = repeatablePaths[paths.dataPath]?.onlyRadioCheckboxes === false
|
|
1190
|
+
? false
|
|
1191
|
+
: isRadioCheckbox;
|
|
1142
1192
|
repeatablePaths[paths.dataPath] = {
|
|
1143
|
-
comps: [
|
|
1193
|
+
comps: [
|
|
1194
|
+
...(repeatablePaths[paths.dataPath]?.comps || []),
|
|
1195
|
+
keys.get(paths.dataPath),
|
|
1196
|
+
comp,
|
|
1197
|
+
],
|
|
1144
1198
|
onlyRadioCheckboxes,
|
|
1145
1199
|
};
|
|
1146
1200
|
}
|
|
@@ -1185,7 +1239,9 @@ export default class WebformBuilder extends Component {
|
|
|
1185
1239
|
const parentContainer = parent ? parent.formioContainer : this.container;
|
|
1186
1240
|
const parentComponent = parent ? parent.formioComponent : this;
|
|
1187
1241
|
this.dialog.close();
|
|
1188
|
-
const path = parentContainer
|
|
1242
|
+
const path = parentContainer
|
|
1243
|
+
? this.getComponentsPath(component, parentComponent.component)
|
|
1244
|
+
: '';
|
|
1189
1245
|
if (!original) {
|
|
1190
1246
|
original = parent.formioContainer.find((comp) => comp.id === component.id);
|
|
1191
1247
|
}
|
|
@@ -1197,7 +1253,10 @@ export default class WebformBuilder extends Component {
|
|
|
1197
1253
|
submissionData.components = this.originalDefaultValue.components;
|
|
1198
1254
|
this.originalDefaultValue = null;
|
|
1199
1255
|
}
|
|
1200
|
-
const fieldsToRemoveDoubleQuotes = [
|
|
1256
|
+
const fieldsToRemoveDoubleQuotes = [
|
|
1257
|
+
'label',
|
|
1258
|
+
'tooltip',
|
|
1259
|
+
];
|
|
1201
1260
|
this.replaceDoubleQuotes(submissionData, fieldsToRemoveDoubleQuotes);
|
|
1202
1261
|
this.hook('beforeSaveComponentSettings', submissionData);
|
|
1203
1262
|
let comp = null;
|
|
@@ -1221,7 +1280,7 @@ export default class WebformBuilder extends Component {
|
|
|
1221
1280
|
const rebuild = parentComponent.rebuild() || Promise.resolve();
|
|
1222
1281
|
return rebuild.then(() => {
|
|
1223
1282
|
parentComponent.resetValue();
|
|
1224
|
-
const schema = parentContainer ? parentContainer[index] :
|
|
1283
|
+
const schema = parentContainer ? parentContainer[index] : comp ? comp.schema : [];
|
|
1225
1284
|
this.emitSaveComponentEvent(schema, originalComp, parentComponent.schema, path, index, isNew, originalComponentSchema);
|
|
1226
1285
|
this.emit('change', this.form);
|
|
1227
1286
|
this.highlightInvalidComponents();
|
|
@@ -1266,7 +1325,7 @@ export default class WebformBuilder extends Component {
|
|
|
1266
1325
|
this.editForm.addEventListener(saveButton, 'click', (event) => {
|
|
1267
1326
|
event.preventDefault();
|
|
1268
1327
|
const errors = this.editForm.validate(this.editForm.data, {
|
|
1269
|
-
dirty: true
|
|
1328
|
+
dirty: true,
|
|
1270
1329
|
});
|
|
1271
1330
|
if (errors.length) {
|
|
1272
1331
|
this.editForm.setPristine(false);
|
|
@@ -1325,7 +1384,13 @@ export default class WebformBuilder extends Component {
|
|
|
1325
1384
|
editFormOptions.flags = flags;
|
|
1326
1385
|
this.hook('editComponentParentInstance', editFormOptions, parent);
|
|
1327
1386
|
this.editForm = new Webform({
|
|
1328
|
-
..._.omit(this.options, [
|
|
1387
|
+
..._.omit(this.options, [
|
|
1388
|
+
'hooks',
|
|
1389
|
+
'builder',
|
|
1390
|
+
'events',
|
|
1391
|
+
'attachMode',
|
|
1392
|
+
'skipInit',
|
|
1393
|
+
]),
|
|
1329
1394
|
language: this.options.language,
|
|
1330
1395
|
...editFormOptions,
|
|
1331
1396
|
evalContext: {
|
|
@@ -1334,60 +1399,66 @@ export default class WebformBuilder extends Component {
|
|
|
1334
1399
|
},
|
|
1335
1400
|
});
|
|
1336
1401
|
this.hook('editFormProperties', parent);
|
|
1337
|
-
this.editForm.form =
|
|
1338
|
-
|
|
1339
|
-
{
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1402
|
+
this.editForm.form =
|
|
1403
|
+
isJsonEdit && !isCustom
|
|
1404
|
+
? {
|
|
1405
|
+
components: [
|
|
1406
|
+
{
|
|
1407
|
+
type: 'textarea',
|
|
1408
|
+
as: 'json',
|
|
1409
|
+
editor: 'ace',
|
|
1410
|
+
weight: 10,
|
|
1411
|
+
input: true,
|
|
1412
|
+
key: 'componentJson',
|
|
1413
|
+
label: 'Component JSON',
|
|
1414
|
+
tooltip: 'Edit the JSON for this component.',
|
|
1415
|
+
},
|
|
1416
|
+
{
|
|
1417
|
+
type: 'checkbox',
|
|
1418
|
+
key: 'showFullSchema',
|
|
1419
|
+
label: 'Full Schema',
|
|
1420
|
+
},
|
|
1421
|
+
],
|
|
1353
1422
|
}
|
|
1354
|
-
|
|
1355
|
-
} : ComponentClass.editForm(_.cloneDeep(overrides));
|
|
1423
|
+
: ComponentClass.editForm(_.cloneDeep(overrides));
|
|
1356
1424
|
const instanceOptions = {
|
|
1357
1425
|
inFormBuilder: true,
|
|
1358
1426
|
};
|
|
1359
1427
|
this.hook('instanceOptionsPreview', instanceOptions);
|
|
1360
1428
|
const instance = new ComponentClass(componentCopy, instanceOptions);
|
|
1361
1429
|
const schema = this.hook('builderComponentSchema', component, instance);
|
|
1362
|
-
this.editForm.submission = isJsonEdit
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1430
|
+
this.editForm.submission = isJsonEdit
|
|
1431
|
+
? {
|
|
1432
|
+
data: {
|
|
1433
|
+
componentJson: schema,
|
|
1434
|
+
showFullSchema: this.options.showFullJsonSchema,
|
|
1435
|
+
},
|
|
1436
|
+
}
|
|
1437
|
+
: {
|
|
1438
|
+
data: instance.component,
|
|
1439
|
+
};
|
|
1370
1440
|
if (this.preview) {
|
|
1371
1441
|
this.preview.destroy();
|
|
1372
1442
|
}
|
|
1373
|
-
if (!ComponentClass.builderInfo.hasOwnProperty('preview') ||
|
|
1443
|
+
if (!ComponentClass.builderInfo.hasOwnProperty('preview') ||
|
|
1444
|
+
ComponentClass.builderInfo.preview) {
|
|
1374
1445
|
this.preview = new Webform(_.omit({ ...this.options, preview: true }, [
|
|
1375
1446
|
'hooks',
|
|
1376
1447
|
'builder',
|
|
1377
1448
|
'events',
|
|
1378
1449
|
'attachMode',
|
|
1379
|
-
'calculateValue'
|
|
1450
|
+
'calculateValue',
|
|
1380
1451
|
]));
|
|
1381
1452
|
this.hook('previewFormSettitngs', schema, isJsonEdit);
|
|
1382
1453
|
}
|
|
1383
1454
|
this.showPreview = ComponentClass.builderInfo.showPreview ?? true;
|
|
1384
|
-
this.componentEdit = this.ce('div', {
|
|
1455
|
+
this.componentEdit = this.ce('div', { class: 'component-edit-container' });
|
|
1385
1456
|
this.setContent(this.componentEdit, this.renderTemplate('builderEditForm', {
|
|
1386
1457
|
componentInfo: ComponentClass.builderInfo,
|
|
1387
1458
|
editForm: this.editForm.render(),
|
|
1388
1459
|
preview: this.preview ? this.preview.render() : false,
|
|
1389
1460
|
showPreview: this.showPreview,
|
|
1390
|
-
helplinks: this.helplinks
|
|
1461
|
+
helplinks: this.helplinks,
|
|
1391
1462
|
}));
|
|
1392
1463
|
this.dialog = this.createModal(this.componentEdit, _.get(this.options, 'dialogAttr', {}));
|
|
1393
1464
|
// This is the attach step.
|
|
@@ -1401,27 +1472,33 @@ export default class WebformBuilder extends Component {
|
|
|
1401
1472
|
this.editForm.submission = {
|
|
1402
1473
|
data: {
|
|
1403
1474
|
componentJson: value ? instance.component : component,
|
|
1404
|
-
showFullSchema: value
|
|
1475
|
+
showFullSchema: value,
|
|
1405
1476
|
},
|
|
1406
1477
|
};
|
|
1407
1478
|
return;
|
|
1408
1479
|
}
|
|
1409
1480
|
// See if this is a manually modified key. Treat custom component keys as manually modified
|
|
1410
|
-
if ((event.changed.component &&
|
|
1481
|
+
if ((event.changed.component && event.changed.component.key === 'key') || isJsonEdit) {
|
|
1411
1482
|
componentCopy.keyModified = true;
|
|
1412
1483
|
}
|
|
1413
1484
|
let isComponentLabelChanged = false;
|
|
1414
1485
|
if (event.changed.instance) {
|
|
1415
|
-
isComponentLabelChanged = [
|
|
1486
|
+
isComponentLabelChanged = [
|
|
1487
|
+
'label',
|
|
1488
|
+
'title',
|
|
1489
|
+
].includes(event.changed.instance.path);
|
|
1416
1490
|
}
|
|
1417
1491
|
else if (event.changed.component) {
|
|
1418
|
-
isComponentLabelChanged = [
|
|
1492
|
+
isComponentLabelChanged = [
|
|
1493
|
+
'label',
|
|
1494
|
+
'title',
|
|
1495
|
+
].includes(event.changed.component.key);
|
|
1419
1496
|
}
|
|
1420
1497
|
if (isComponentLabelChanged) {
|
|
1421
1498
|
// Ensure this component has a key.
|
|
1422
1499
|
if (isNew) {
|
|
1423
1500
|
if (!event.data.keyModified) {
|
|
1424
|
-
this.editForm.everyComponent(component => {
|
|
1501
|
+
this.editForm.everyComponent((component) => {
|
|
1425
1502
|
if (component.key === 'key' && component.parent.component.key === 'tabs') {
|
|
1426
1503
|
component.setValue(this.updateComponentKey(event.data));
|
|
1427
1504
|
return false;
|
|
@@ -1431,7 +1508,7 @@ export default class WebformBuilder extends Component {
|
|
|
1431
1508
|
if (this.form) {
|
|
1432
1509
|
let formComponents = this.findNamespaceRoot(parent.formioComponent);
|
|
1433
1510
|
// excluding component which key uniqueness is to be checked to prevent the comparing of the same keys
|
|
1434
|
-
formComponents = formComponents.filter(comp => editFormOptions.editComponent.id !== comp.id);
|
|
1511
|
+
formComponents = formComponents.filter((comp) => editFormOptions.editComponent.id !== comp.id);
|
|
1435
1512
|
// Set a unique key for this component.
|
|
1436
1513
|
BuilderUtils.uniquify(formComponents, event.data);
|
|
1437
1514
|
}
|
|
@@ -1440,7 +1517,9 @@ export default class WebformBuilder extends Component {
|
|
|
1440
1517
|
// If the edit form has any nested form inside, we get a partial data (nested form's data) in the
|
|
1441
1518
|
// event.data property
|
|
1442
1519
|
let editFormData;
|
|
1443
|
-
if (event.changed.instance &&
|
|
1520
|
+
if (event.changed.instance &&
|
|
1521
|
+
event.changed.instance.root &&
|
|
1522
|
+
event.changed.instance.root.id !== this.editForm.id) {
|
|
1444
1523
|
editFormData = this.editForm.data;
|
|
1445
1524
|
}
|
|
1446
1525
|
// Update the component.
|
|
@@ -1467,10 +1546,7 @@ export default class WebformBuilder extends Component {
|
|
|
1467
1546
|
this.emit('editComponent', component);
|
|
1468
1547
|
}
|
|
1469
1548
|
updateComponentKey(data) {
|
|
1470
|
-
return _.camelCase(data.title ||
|
|
1471
|
-
data.label ||
|
|
1472
|
-
data.placeholder ||
|
|
1473
|
-
data.type).replace(/^[0-9]*/, '');
|
|
1549
|
+
return _.camelCase(data.title || data.label || data.placeholder || data.type).replace(/^[0-9]*/, '');
|
|
1474
1550
|
}
|
|
1475
1551
|
moveComponent(component) {
|
|
1476
1552
|
if (this.selectedComponent) {
|
|
@@ -1519,7 +1595,7 @@ export default class WebformBuilder extends Component {
|
|
|
1519
1595
|
}
|
|
1520
1596
|
}
|
|
1521
1597
|
const len = source.formioComponent.components.length;
|
|
1522
|
-
index =
|
|
1598
|
+
index = index === -1 ? 0 : index + step;
|
|
1523
1599
|
if (index === -1) {
|
|
1524
1600
|
source.formioContainer.push(info);
|
|
1525
1601
|
source.appendChild(element);
|
|
@@ -1611,7 +1687,7 @@ export default class WebformBuilder extends Component {
|
|
|
1611
1687
|
parent.formioComponent.saveChildComponent(schema, false);
|
|
1612
1688
|
}
|
|
1613
1689
|
parent.formioComponent.rebuild();
|
|
1614
|
-
this.emitSaveComponentEvent(schema, schema, parent.formioComponent.component, path,
|
|
1690
|
+
this.emitSaveComponentEvent(schema, schema, parent.formioComponent.component, path, index + 1, true, schema);
|
|
1615
1691
|
}
|
|
1616
1692
|
this.emit('change', this.form);
|
|
1617
1693
|
}
|
|
@@ -1672,10 +1748,7 @@ export default class WebformBuilder extends Component {
|
|
|
1672
1748
|
}
|
|
1673
1749
|
}
|
|
1674
1750
|
generateKey(info) {
|
|
1675
|
-
return info.key || _.camelCase(info.title ||
|
|
1676
|
-
info.label ||
|
|
1677
|
-
info.placeholder ||
|
|
1678
|
-
info.type);
|
|
1751
|
+
return info.key || _.camelCase(info.title || info.label || info.placeholder || info.type);
|
|
1679
1752
|
}
|
|
1680
1753
|
hasEditTabs(type) {
|
|
1681
1754
|
// If the component type does not exist then it has no edit tabs
|