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