@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
|
@@ -2,7 +2,7 @@ import _ from 'lodash';
|
|
|
2
2
|
import { Formio } from '../../Formio';
|
|
3
3
|
import ListComponent from '../_classes/list/ListComponent';
|
|
4
4
|
import Form from '../../Form';
|
|
5
|
-
import { getRandomComponentId, boolValue, isPromise, componentValueTypes, getComponentSavedTypes, isSelectResourceWithObjectValue, removeHTML } from '../../utils';
|
|
5
|
+
import { getRandomComponentId, boolValue, isPromise, componentValueTypes, getComponentSavedTypes, isSelectResourceWithObjectValue, removeHTML, } from '../../utils';
|
|
6
6
|
import Choices from '../../utils/ChoicesWrapper';
|
|
7
7
|
export default class SelectComponent extends ListComponent {
|
|
8
8
|
static schema(...extend) {
|
|
@@ -12,11 +12,13 @@ export default class SelectComponent extends ListComponent {
|
|
|
12
12
|
key: 'select',
|
|
13
13
|
idPath: 'id',
|
|
14
14
|
data: {
|
|
15
|
-
values: [
|
|
15
|
+
values: [
|
|
16
|
+
{ label: '', value: '' },
|
|
17
|
+
],
|
|
16
18
|
json: '',
|
|
17
19
|
url: '',
|
|
18
20
|
resource: '',
|
|
19
|
-
custom: ''
|
|
21
|
+
custom: '',
|
|
20
22
|
},
|
|
21
23
|
clearOnRefresh: false,
|
|
22
24
|
limit: 100,
|
|
@@ -37,7 +39,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
37
39
|
threshold: 0.3,
|
|
38
40
|
},
|
|
39
41
|
indexeddb: {
|
|
40
|
-
filter: {}
|
|
42
|
+
filter: {},
|
|
41
43
|
},
|
|
42
44
|
customOptions: {},
|
|
43
45
|
useExactSearch: false,
|
|
@@ -50,7 +52,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
50
52
|
icon: 'th-list',
|
|
51
53
|
weight: 70,
|
|
52
54
|
documentation: '/userguide/form-building/form-components#select',
|
|
53
|
-
schema: SelectComponent.schema()
|
|
55
|
+
schema: SelectComponent.schema(),
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
58
|
static get serverConditionSettings() {
|
|
@@ -76,7 +78,12 @@ export default class SelectComponent extends ListComponent {
|
|
|
76
78
|
return valueComp;
|
|
77
79
|
},
|
|
78
80
|
dataTypeOperators: {
|
|
79
|
-
number: [
|
|
81
|
+
number: [
|
|
82
|
+
'lessThan',
|
|
83
|
+
'greaterThan',
|
|
84
|
+
'lessThanOrEqual',
|
|
85
|
+
'greaterThanOrEqual',
|
|
86
|
+
],
|
|
80
87
|
},
|
|
81
88
|
dataTypeValueComponents: {
|
|
82
89
|
number: {
|
|
@@ -96,15 +103,28 @@ export default class SelectComponent extends ListComponent {
|
|
|
96
103
|
return types;
|
|
97
104
|
}
|
|
98
105
|
if (reference) {
|
|
99
|
-
return [
|
|
106
|
+
return [
|
|
107
|
+
object,
|
|
108
|
+
];
|
|
100
109
|
}
|
|
101
110
|
if (dataType === 'object') {
|
|
102
|
-
return [
|
|
111
|
+
return [
|
|
112
|
+
object,
|
|
113
|
+
array,
|
|
114
|
+
];
|
|
103
115
|
}
|
|
104
116
|
if (componentValueTypes[dataType]) {
|
|
105
|
-
return [
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
return [
|
|
118
|
+
componentValueTypes[dataType],
|
|
119
|
+
];
|
|
120
|
+
}
|
|
121
|
+
return [
|
|
122
|
+
boolean,
|
|
123
|
+
string,
|
|
124
|
+
number,
|
|
125
|
+
object,
|
|
126
|
+
array,
|
|
127
|
+
];
|
|
108
128
|
}
|
|
109
129
|
init() {
|
|
110
130
|
super.init();
|
|
@@ -226,10 +246,10 @@ export default class SelectComponent extends ListComponent {
|
|
|
226
246
|
return this.component.dataSrc === 'resource' && this.valueProperty === 'data';
|
|
227
247
|
}
|
|
228
248
|
selectValueAndLabel(data) {
|
|
229
|
-
const value = this.getOptionValue(
|
|
249
|
+
const value = this.getOptionValue(this.isEntireObjectDisplay() && !this.itemValue(data) ? data : this.itemValue(data));
|
|
230
250
|
return {
|
|
231
251
|
value,
|
|
232
|
-
label: this.itemTemplate(
|
|
252
|
+
label: this.itemTemplate(this.isEntireObjectDisplay() && !_.isObject(data.data) ? { data: data } : data, value),
|
|
233
253
|
};
|
|
234
254
|
}
|
|
235
255
|
itemTemplate(data, value) {
|
|
@@ -243,13 +263,13 @@ export default class SelectComponent extends ListComponent {
|
|
|
243
263
|
// Perform a fast interpretation if we should not use the template.
|
|
244
264
|
if (data && !this.component.template) {
|
|
245
265
|
const itemLabel = data.label || data;
|
|
246
|
-
const value =
|
|
266
|
+
const value = typeof itemLabel === 'string' ? this.t(itemLabel, { _userInput: true }) : itemLabel;
|
|
247
267
|
return this.sanitize(value, this.shouldSanitizeValue);
|
|
248
268
|
}
|
|
249
269
|
// Inside DataTable component won't have dataValue set
|
|
250
270
|
const shouldUseSelectData = (this.component.multiple && _.isArray(this.dataValue)
|
|
251
271
|
? this.dataValue.find((val) => this.normalizeSingleValue(value) === val)
|
|
252
|
-
:
|
|
272
|
+
: this.dataValue === this.normalizeSingleValue(value)) || this.inDataTable;
|
|
253
273
|
if (shouldUseSelectData) {
|
|
254
274
|
const selectData = this.selectData;
|
|
255
275
|
if (selectData) {
|
|
@@ -281,9 +301,10 @@ export default class SelectComponent extends ListComponent {
|
|
|
281
301
|
if (data.data) {
|
|
282
302
|
// checking additional fields in the template for the selected Entire Object option
|
|
283
303
|
const hasNestedFields = /item\.data\.\w*/g.test(this.component.template);
|
|
284
|
-
data.data =
|
|
285
|
-
|
|
286
|
-
|
|
304
|
+
data.data =
|
|
305
|
+
this.isEntireObjectDisplay() && _.isObject(data.data) && !hasNestedFields
|
|
306
|
+
? JSON.stringify(data.data)
|
|
307
|
+
: data.data;
|
|
287
308
|
}
|
|
288
309
|
return super.itemTemplate(data, value);
|
|
289
310
|
}
|
|
@@ -303,7 +324,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
303
324
|
const option = {
|
|
304
325
|
value: this.getOptionValue(value),
|
|
305
326
|
label,
|
|
306
|
-
...idPath
|
|
327
|
+
...idPath,
|
|
307
328
|
};
|
|
308
329
|
const skipOption = this.component.uniqueOptions
|
|
309
330
|
? !!this.selectOptions.find((selectOption) => _.isEqual(selectOption.value, option.value))
|
|
@@ -314,15 +335,16 @@ export default class SelectComponent extends ListComponent {
|
|
|
314
335
|
if (value) {
|
|
315
336
|
this.selectOptions.push(option);
|
|
316
337
|
}
|
|
317
|
-
if (this.refs.selectContainer &&
|
|
338
|
+
if (this.refs.selectContainer && this.component.widget === 'html5') {
|
|
318
339
|
// Replace an empty Object value to an empty String.
|
|
319
340
|
if (option.value && _.isObject(option.value) && _.isEmpty(option.value)) {
|
|
320
341
|
option.value = '';
|
|
321
342
|
}
|
|
322
343
|
// Add element to option so we can reference it later.
|
|
323
344
|
const div = document.createElement('div');
|
|
345
|
+
const isInDataValue = this.component.multiple && Array.isArray(this.dataValue) && this.dataValue.includes(value);
|
|
324
346
|
div.innerHTML = this.sanitize(this.renderTemplate('selectOption', {
|
|
325
|
-
selected: _.isEqual(this.getOptionValue(this.dataValue), option.value),
|
|
347
|
+
selected: _.isEqual(this.getOptionValue(this.dataValue), option.value) || isInDataValue,
|
|
326
348
|
option,
|
|
327
349
|
attrs,
|
|
328
350
|
id,
|
|
@@ -337,14 +359,21 @@ export default class SelectComponent extends ListComponent {
|
|
|
337
359
|
let added = false;
|
|
338
360
|
let data = this.dataValue;
|
|
339
361
|
// preset submission value with value property before request.
|
|
340
|
-
if (this.options.pdf &&
|
|
362
|
+
if (this.options.pdf &&
|
|
363
|
+
!items.length &&
|
|
364
|
+
this.component.dataSrc === 'url' &&
|
|
365
|
+
this.valueProperty) {
|
|
341
366
|
data = Array.isArray(data)
|
|
342
|
-
? data.map(item => _.set({}, this.valueProperty, item))
|
|
367
|
+
? data.map((item) => _.set({}, this.valueProperty, item))
|
|
343
368
|
: _.set({}, this.valueProperty, data);
|
|
344
369
|
}
|
|
345
370
|
if (!this.selectOptions.length) {
|
|
346
371
|
// Add the currently selected choices if they don't already exist.
|
|
347
|
-
const currentChoices = Array.isArray(data) && this.component.multiple
|
|
372
|
+
const currentChoices = Array.isArray(data) && this.component.multiple
|
|
373
|
+
? data
|
|
374
|
+
: [
|
|
375
|
+
data,
|
|
376
|
+
];
|
|
348
377
|
added = this.addCurrentChoices(currentChoices, items);
|
|
349
378
|
if (!added && !this.component.multiple) {
|
|
350
379
|
this.addPlaceholder();
|
|
@@ -371,8 +400,12 @@ export default class SelectComponent extends ListComponent {
|
|
|
371
400
|
}
|
|
372
401
|
return false;
|
|
373
402
|
}
|
|
374
|
-
/* eslint-disable max-statements */
|
|
375
403
|
setItems(items, fromSearch) {
|
|
404
|
+
if (this.visible && this.isHtmlRenderMode() && !_.isEqual(items, this.selectItems)) {
|
|
405
|
+
this.itemsLoaded.then(() => {
|
|
406
|
+
this.redraw();
|
|
407
|
+
});
|
|
408
|
+
}
|
|
376
409
|
this.selectItems = items;
|
|
377
410
|
// If the items is a string, then parse as JSON.
|
|
378
411
|
if (typeof items == 'string') {
|
|
@@ -404,9 +437,9 @@ export default class SelectComponent extends ListComponent {
|
|
|
404
437
|
if (this.itemsFromUrl) {
|
|
405
438
|
areItemsEqual = this.isSelectURL ? _.isEqual(items, this.downloadedResources) : false;
|
|
406
439
|
const areItemsEnded = this.component.limit > items.length;
|
|
407
|
-
const areItemsDownloaded = areItemsEqual
|
|
408
|
-
|
|
409
|
-
|
|
440
|
+
const areItemsDownloaded = areItemsEqual &&
|
|
441
|
+
this.downloadedResources &&
|
|
442
|
+
this.downloadedResources.length === items.length;
|
|
410
443
|
if (areItemsEnded) {
|
|
411
444
|
this.disableInfiniteScroll();
|
|
412
445
|
}
|
|
@@ -423,7 +456,8 @@ export default class SelectComponent extends ListComponent {
|
|
|
423
456
|
? this.downloadedResources.concat(items)
|
|
424
457
|
: items;
|
|
425
458
|
}
|
|
426
|
-
this.downloadedResources.serverCount =
|
|
459
|
+
this.downloadedResources.serverCount =
|
|
460
|
+
items.serverCount || this.downloadedResources.serverCount;
|
|
427
461
|
}
|
|
428
462
|
else {
|
|
429
463
|
this.downloadedResources = items || [];
|
|
@@ -431,10 +465,11 @@ export default class SelectComponent extends ListComponent {
|
|
|
431
465
|
// If there is new select option with same id as already selected, set the new one
|
|
432
466
|
if (!_.isEmpty(this.dataValue) && this.component.idPath) {
|
|
433
467
|
const selectedOptionId = _.get(this.dataValue, this.component.idPath, null);
|
|
434
|
-
const newOptionWithSameId = !_.isNil(selectedOptionId) &&
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
468
|
+
const newOptionWithSameId = !_.isNil(selectedOptionId) &&
|
|
469
|
+
items.find((item) => {
|
|
470
|
+
const itemId = _.get(item, this.component.idPath);
|
|
471
|
+
return itemId === selectedOptionId;
|
|
472
|
+
});
|
|
438
473
|
if (newOptionWithSameId) {
|
|
439
474
|
this.setValue(newOptionWithSameId);
|
|
440
475
|
}
|
|
@@ -450,7 +485,10 @@ export default class SelectComponent extends ListComponent {
|
|
|
450
485
|
// Iterate through each of the items.
|
|
451
486
|
_.each(items, (item, index) => {
|
|
452
487
|
// preventing references of the components inside the form to the parent form when building forms
|
|
453
|
-
if (this.root &&
|
|
488
|
+
if (this.root &&
|
|
489
|
+
this.root.options.editForm &&
|
|
490
|
+
this.root.options.editForm._id &&
|
|
491
|
+
this.root.options.editForm._id === item._id)
|
|
454
492
|
return;
|
|
455
493
|
const itemValueAndLabel = this.selectValueAndLabel(item);
|
|
456
494
|
this.addOption(itemValueAndLabel.value, itemValueAndLabel.label, {}, _.get(item, this.component.idPath, String(index)));
|
|
@@ -470,7 +508,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
470
508
|
// If a value is provided, then select it.
|
|
471
509
|
if (!this.isEmpty() || this.isRemoveButtonPressed) {
|
|
472
510
|
this.setValue(this.dataValue, {
|
|
473
|
-
noUpdateEvent: true
|
|
511
|
+
noUpdateEvent: true,
|
|
474
512
|
});
|
|
475
513
|
}
|
|
476
514
|
else if (this.shouldAddDefaultValue && !this.options.readOnly) {
|
|
@@ -496,17 +534,17 @@ export default class SelectComponent extends ListComponent {
|
|
|
496
534
|
return super.itemValueForHTMLMode(value);
|
|
497
535
|
}
|
|
498
536
|
if (Array.isArray(value)) {
|
|
499
|
-
const values = value.map(item => Array.isArray(item)
|
|
537
|
+
const values = value.map((item) => Array.isArray(item)
|
|
500
538
|
? this.itemValueForHTMLMode(item)
|
|
501
539
|
: this.getSingleItemValueForHTMLMode(item));
|
|
502
540
|
return values.join(', ');
|
|
503
541
|
}
|
|
504
542
|
return this.getSingleItemValueForHTMLMode(value);
|
|
505
543
|
}
|
|
506
|
-
/* eslint-enable max-statements */
|
|
507
544
|
get defaultValue() {
|
|
508
545
|
let defaultValue = super.defaultValue;
|
|
509
|
-
if (!defaultValue &&
|
|
546
|
+
if (!defaultValue &&
|
|
547
|
+
(this.component.defaultValue === false || this.component.defaultValue === 0)) {
|
|
510
548
|
defaultValue = this.component.defaultValue;
|
|
511
549
|
}
|
|
512
550
|
return defaultValue;
|
|
@@ -525,9 +563,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
525
563
|
}
|
|
526
564
|
// See if they have not met the minimum search requirements.
|
|
527
565
|
const minSearch = parseInt(this.component.minSearch, 10);
|
|
528
|
-
if (this.component.searchField &&
|
|
529
|
-
(minSearch > 0) &&
|
|
530
|
-
(!search || (search.length < minSearch))) {
|
|
566
|
+
if (this.component.searchField && minSearch > 0 && (!search || search.length < minSearch)) {
|
|
531
567
|
// Set empty items.
|
|
532
568
|
return this.setItems([]);
|
|
533
569
|
}
|
|
@@ -538,17 +574,19 @@ export default class SelectComponent extends ListComponent {
|
|
|
538
574
|
}
|
|
539
575
|
const limit = this.component.limit || 100;
|
|
540
576
|
const skip = this.isScrollLoading ? this.selectOptions.length : 0;
|
|
541
|
-
const query = this.component.disableLimit
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
577
|
+
const query = this.component.disableLimit
|
|
578
|
+
? {}
|
|
579
|
+
: {
|
|
580
|
+
limit,
|
|
581
|
+
skip,
|
|
582
|
+
};
|
|
545
583
|
// Allow for url interpolation.
|
|
546
584
|
url = this.sanitize(this.interpolate(url, {
|
|
547
585
|
formioBase: Formio.getBaseUrl(),
|
|
548
586
|
search,
|
|
549
587
|
limit,
|
|
550
588
|
skip,
|
|
551
|
-
page: Math.abs(Math.floor(skip / limit))
|
|
589
|
+
page: Math.abs(Math.floor(skip / limit)),
|
|
552
590
|
}), this.shouldSanitizeValue);
|
|
553
591
|
// Add search capability.
|
|
554
592
|
if (this.component.searchField && search) {
|
|
@@ -571,7 +609,9 @@ export default class SelectComponent extends ListComponent {
|
|
|
571
609
|
}
|
|
572
610
|
if (!_.isEmpty(query)) {
|
|
573
611
|
// Add the query string.
|
|
574
|
-
url +=
|
|
612
|
+
url +=
|
|
613
|
+
(!url.includes('?') ? '?' : '&') +
|
|
614
|
+
Formio.serialize(query, (item) => this.interpolate(item));
|
|
575
615
|
}
|
|
576
616
|
// Add filter capability
|
|
577
617
|
if (this.component.filter) {
|
|
@@ -632,7 +672,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
632
672
|
}
|
|
633
673
|
getCustomItems() {
|
|
634
674
|
const customItems = this.evaluate(this.component.data.custom, {
|
|
635
|
-
values: []
|
|
675
|
+
values: [],
|
|
636
676
|
}, 'values');
|
|
637
677
|
this.asyncValues = isPromise(customItems);
|
|
638
678
|
return customItems;
|
|
@@ -651,11 +691,11 @@ export default class SelectComponent extends ListComponent {
|
|
|
651
691
|
}
|
|
652
692
|
this.loading = true;
|
|
653
693
|
this.getCustomItems()
|
|
654
|
-
.then(items => {
|
|
694
|
+
.then((items) => {
|
|
655
695
|
this.loading = false;
|
|
656
696
|
this.setItems(items || []);
|
|
657
697
|
})
|
|
658
|
-
.catch(err => {
|
|
698
|
+
.catch((err) => {
|
|
659
699
|
this.handleLoadingError(err);
|
|
660
700
|
});
|
|
661
701
|
}
|
|
@@ -667,13 +707,13 @@ export default class SelectComponent extends ListComponent {
|
|
|
667
707
|
return super.isEmpty(value) || value === undefined;
|
|
668
708
|
}
|
|
669
709
|
refresh(value, { instance }) {
|
|
670
|
-
if (this.component.clearOnRefresh &&
|
|
710
|
+
if (this.component.clearOnRefresh && instance && !instance.pristine) {
|
|
671
711
|
this.setValue(this.emptyValue);
|
|
672
712
|
}
|
|
673
713
|
this.updateItems(null, true);
|
|
674
714
|
}
|
|
675
715
|
get additionalResourcesAvailable() {
|
|
676
|
-
return _.isNil(this.serverCount) ||
|
|
716
|
+
return _.isNil(this.serverCount) || this.serverCount > this.downloadedResources.length;
|
|
677
717
|
}
|
|
678
718
|
get serverCount() {
|
|
679
719
|
if (this.isFromSearch) {
|
|
@@ -725,18 +765,22 @@ export default class SelectComponent extends ListComponent {
|
|
|
725
765
|
setLoadingItem(addToCurrentList = false) {
|
|
726
766
|
if (this.choices) {
|
|
727
767
|
if (addToCurrentList) {
|
|
728
|
-
this.choices.setChoices([
|
|
768
|
+
this.choices.setChoices([
|
|
769
|
+
{
|
|
729
770
|
value: `${this.id}-loading`,
|
|
730
771
|
label: 'Loading...',
|
|
731
772
|
disabled: true,
|
|
732
|
-
}
|
|
773
|
+
},
|
|
774
|
+
], 'value', 'label');
|
|
733
775
|
}
|
|
734
776
|
else {
|
|
735
|
-
this.choices.setChoices([
|
|
777
|
+
this.choices.setChoices([
|
|
778
|
+
{
|
|
736
779
|
value: '',
|
|
737
780
|
label: `<i class="${this.iconClass('refresh')}" style="font-size:1.3em;"></i>`,
|
|
738
781
|
disabled: true,
|
|
739
|
-
}
|
|
782
|
+
},
|
|
783
|
+
], 'value', 'label', true);
|
|
740
784
|
}
|
|
741
785
|
}
|
|
742
786
|
else if (this.component.dataSrc === 'url' || this.component.dataSrc === 'resource') {
|
|
@@ -758,13 +802,15 @@ export default class SelectComponent extends ListComponent {
|
|
|
758
802
|
}
|
|
759
803
|
wrapElement(element) {
|
|
760
804
|
return this.component.addResource && !this.options.readOnly
|
|
761
|
-
?
|
|
762
|
-
element
|
|
763
|
-
})
|
|
805
|
+
? this.renderTemplate('resourceAdd', {
|
|
806
|
+
element,
|
|
807
|
+
})
|
|
764
808
|
: element;
|
|
765
809
|
}
|
|
766
810
|
choicesOptions() {
|
|
767
|
-
const useSearch = this.component.hasOwnProperty('searchEnabled')
|
|
811
|
+
const useSearch = this.component.hasOwnProperty('searchEnabled')
|
|
812
|
+
? this.component.searchEnabled
|
|
813
|
+
: true;
|
|
768
814
|
const placeholderValue = this.t(this.component.placeholder, { _userInput: true });
|
|
769
815
|
let customOptions = this.component.customOptions || {};
|
|
770
816
|
if (typeof customOptions == 'string') {
|
|
@@ -781,10 +827,16 @@ export default class SelectComponent extends ListComponent {
|
|
|
781
827
|
distance: 1000,
|
|
782
828
|
};
|
|
783
829
|
return {
|
|
784
|
-
removeItemButton: this.component.disabled
|
|
830
|
+
removeItemButton: this.component.disabled
|
|
831
|
+
? false
|
|
832
|
+
: _.get(this.component, 'removeItemButton', true),
|
|
785
833
|
itemSelectText: '',
|
|
786
834
|
classNames: {
|
|
787
|
-
containerOuter: [
|
|
835
|
+
containerOuter: [
|
|
836
|
+
'choices',
|
|
837
|
+
'form-group',
|
|
838
|
+
'formio-choices',
|
|
839
|
+
],
|
|
788
840
|
containerInner: this.transform('class', 'form-control ui fluid selection dropdown').split(' '),
|
|
789
841
|
},
|
|
790
842
|
addItemText: false,
|
|
@@ -795,21 +847,23 @@ export default class SelectComponent extends ListComponent {
|
|
|
795
847
|
noChoicesText: this.t('No choices to choose from'),
|
|
796
848
|
searchPlaceholderValue: this.t('Type to search'),
|
|
797
849
|
shouldSort: false,
|
|
798
|
-
position:
|
|
850
|
+
position: this.component.dropdown || 'auto',
|
|
799
851
|
searchEnabled: useSearch,
|
|
800
852
|
searchChoices: !this.component.searchField,
|
|
801
|
-
searchFields: _.get(this, 'component.searchFields', [
|
|
853
|
+
searchFields: _.get(this, 'component.searchFields', [
|
|
854
|
+
'label',
|
|
855
|
+
]),
|
|
802
856
|
shadowRoot: this.root ? this.root.shadowRoot : null,
|
|
803
857
|
fuseOptions: this.component.useExactSearch
|
|
804
858
|
? {
|
|
805
859
|
tokenize: true,
|
|
806
860
|
matchAllTokens: true,
|
|
807
|
-
...commonFuseOptions
|
|
861
|
+
...commonFuseOptions,
|
|
808
862
|
}
|
|
809
863
|
: Object.assign({}, _.get(this, 'component.fuseOptions', {}), {
|
|
810
864
|
include: 'score',
|
|
811
865
|
threshold: _.get(this, 'component.selectThreshold', 0.3),
|
|
812
|
-
...commonFuseOptions
|
|
866
|
+
...commonFuseOptions,
|
|
813
867
|
}),
|
|
814
868
|
valueComparer: _.isEqual,
|
|
815
869
|
resetScrollPosition: false,
|
|
@@ -817,13 +871,12 @@ export default class SelectComponent extends ListComponent {
|
|
|
817
871
|
...customOptions,
|
|
818
872
|
};
|
|
819
873
|
}
|
|
820
|
-
/* eslint-disable max-statements */
|
|
821
874
|
attach(element) {
|
|
822
875
|
const superAttach = super.attach(element);
|
|
823
876
|
this.loadRefs(element, {
|
|
824
877
|
selectContainer: 'single',
|
|
825
878
|
addResource: 'single',
|
|
826
|
-
autocompleteInput: 'single'
|
|
879
|
+
autocompleteInput: 'single',
|
|
827
880
|
});
|
|
828
881
|
//enable autocomplete for select
|
|
829
882
|
const autocompleteInput = this.refs.autocompleteInput;
|
|
@@ -836,9 +889,18 @@ export default class SelectComponent extends ListComponent {
|
|
|
836
889
|
if (!input) {
|
|
837
890
|
return;
|
|
838
891
|
}
|
|
839
|
-
this.addEventListener(input, this.inputInfo.changeEvent, () =>
|
|
840
|
-
|
|
841
|
-
|
|
892
|
+
this.addEventListener(input, this.inputInfo.changeEvent, (event) => {
|
|
893
|
+
let value = null;
|
|
894
|
+
if (this.component.widget === "html5") {
|
|
895
|
+
value = event.target.value;
|
|
896
|
+
if (this.component.multiple) {
|
|
897
|
+
value = Array.from(event.target.selectedOptions).map(opt => opt.value);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
this.updateValue(value, {
|
|
901
|
+
modified: true
|
|
902
|
+
});
|
|
903
|
+
});
|
|
842
904
|
this.attachRefreshOnBlur();
|
|
843
905
|
if (this.component.widget === 'html5') {
|
|
844
906
|
this.addFocusBlurEvents(input);
|
|
@@ -852,7 +914,10 @@ export default class SelectComponent extends ListComponent {
|
|
|
852
914
|
}
|
|
853
915
|
this.addEventListener(input, 'keydown', (event) => {
|
|
854
916
|
const { key } = event;
|
|
855
|
-
if ([
|
|
917
|
+
if ([
|
|
918
|
+
'Backspace',
|
|
919
|
+
'Delete',
|
|
920
|
+
].includes(key)) {
|
|
856
921
|
this.setValue(this.emptyValue);
|
|
857
922
|
}
|
|
858
923
|
});
|
|
@@ -919,8 +984,10 @@ export default class SelectComponent extends ListComponent {
|
|
|
919
984
|
this.isFromSearch = false;
|
|
920
985
|
});
|
|
921
986
|
// avoid spamming the resource/url endpoint when we have server side filtering enabled.
|
|
922
|
-
const debounceTimeout = this.component.searchField && (this.isSelectResource || this.isSelectURL)
|
|
923
|
-
(this.component.searchDebounce === 0
|
|
987
|
+
const debounceTimeout = this.component.searchField && (this.isSelectResource || this.isSelectURL)
|
|
988
|
+
? (this.component.searchDebounce === 0
|
|
989
|
+
? 0
|
|
990
|
+
: this.component.searchDebounce || this.defaultSchema.searchDebounce) * 1000
|
|
924
991
|
: 0;
|
|
925
992
|
const updateComponent = (evt) => {
|
|
926
993
|
this.triggerUpdate(evt.detail.value);
|
|
@@ -947,8 +1014,9 @@ export default class SelectComponent extends ListComponent {
|
|
|
947
1014
|
});
|
|
948
1015
|
}
|
|
949
1016
|
// Add value options.
|
|
1017
|
+
const value = this.undoValueTyping(this.dataValue);
|
|
950
1018
|
this.addValueOptions();
|
|
951
|
-
this.setChoicesValue(
|
|
1019
|
+
this.setChoicesValue(value);
|
|
952
1020
|
if (this.isSelectResource && this.refs.addResource) {
|
|
953
1021
|
this.addEventListener(this.refs.addResource, 'click', (event) => {
|
|
954
1022
|
event.preventDefault();
|
|
@@ -956,13 +1024,15 @@ export default class SelectComponent extends ListComponent {
|
|
|
956
1024
|
const dialog = this.createModal(formioForm);
|
|
957
1025
|
const projectUrl = _.get(this.root, 'formio.projectUrl', Formio.getProjectUrl());
|
|
958
1026
|
const formUrl = `${projectUrl}/form/${this.component.data.resource}`;
|
|
959
|
-
new Form(formioForm, formUrl, {}).ready
|
|
960
|
-
.then((form) => {
|
|
1027
|
+
new Form(formioForm, formUrl, {}).ready.then((form) => {
|
|
961
1028
|
form.on('submit', (submission) => {
|
|
962
1029
|
// If valueProperty is set, replace the submission with the corresponding value
|
|
963
1030
|
let value = this.valueProperty ? _.get(submission, this.valueProperty) : submission;
|
|
964
1031
|
if (this.component.multiple) {
|
|
965
|
-
value = [
|
|
1032
|
+
value = [
|
|
1033
|
+
...this.dataValue,
|
|
1034
|
+
value,
|
|
1035
|
+
];
|
|
966
1036
|
}
|
|
967
1037
|
this.setValue(value);
|
|
968
1038
|
this.triggerUpdate();
|
|
@@ -1006,7 +1076,9 @@ export default class SelectComponent extends ListComponent {
|
|
|
1006
1076
|
}
|
|
1007
1077
|
}
|
|
1008
1078
|
positionDropdown(scroll) {
|
|
1009
|
-
if (!this.shouldPositionDropdown ||
|
|
1079
|
+
if (!this.shouldPositionDropdown ||
|
|
1080
|
+
!this.choices ||
|
|
1081
|
+
(!this.choices.dropdown?.isActive && scroll)) {
|
|
1010
1082
|
return;
|
|
1011
1083
|
}
|
|
1012
1084
|
this.setDropdownPosition();
|
|
@@ -1027,11 +1099,12 @@ export default class SelectComponent extends ListComponent {
|
|
|
1027
1099
|
attachRefreshOnBlur() {
|
|
1028
1100
|
if (this.component.refreshOnBlur) {
|
|
1029
1101
|
this.on('blur', (instance) => {
|
|
1030
|
-
this.checkRefreshOn([
|
|
1102
|
+
this.checkRefreshOn([
|
|
1103
|
+
{ instance, value: instance.dataValue },
|
|
1104
|
+
], { fromBlur: true });
|
|
1031
1105
|
});
|
|
1032
1106
|
}
|
|
1033
1107
|
}
|
|
1034
|
-
/* eslint-enable max-statements */
|
|
1035
1108
|
update() {
|
|
1036
1109
|
if (this.component.dataSrc === 'custom') {
|
|
1037
1110
|
this.updateCustomItems();
|
|
@@ -1060,7 +1133,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1060
1133
|
}
|
|
1061
1134
|
set visible(value) {
|
|
1062
1135
|
// If we go from hidden to visible, trigger a refresh.
|
|
1063
|
-
if (value &&
|
|
1136
|
+
if (value && !this._visible !== !value) {
|
|
1064
1137
|
this.triggerUpdate();
|
|
1065
1138
|
}
|
|
1066
1139
|
super.visible = value;
|
|
@@ -1087,7 +1160,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1087
1160
|
const isSelectOptions = items === this.selectOptions;
|
|
1088
1161
|
if (items && items.length) {
|
|
1089
1162
|
_.each(items, (choice) => {
|
|
1090
|
-
if (choice._id && value._id &&
|
|
1163
|
+
if (choice._id && value._id && choice._id === value._id) {
|
|
1091
1164
|
found = true;
|
|
1092
1165
|
return false;
|
|
1093
1166
|
}
|
|
@@ -1107,22 +1180,23 @@ export default class SelectComponent extends ListComponent {
|
|
|
1107
1180
|
if (this.choices) {
|
|
1108
1181
|
this.choices.setChoices(notFoundValuesToAdd, 'value', 'label');
|
|
1109
1182
|
}
|
|
1110
|
-
notFoundValuesToAdd.map(notFoundValue => {
|
|
1183
|
+
notFoundValuesToAdd.map((notFoundValue) => {
|
|
1111
1184
|
this.addOption(notFoundValue.value, notFoundValue.label);
|
|
1112
1185
|
});
|
|
1113
1186
|
}
|
|
1114
1187
|
return added;
|
|
1115
1188
|
}
|
|
1116
1189
|
getValueAsString(data, options) {
|
|
1117
|
-
return
|
|
1190
|
+
return this.component.multiple && Array.isArray(data)
|
|
1118
1191
|
? data.map((v) => this.asString(v, options)).join(', ')
|
|
1119
1192
|
: this.asString(data, options);
|
|
1120
1193
|
}
|
|
1121
1194
|
getValue() {
|
|
1122
1195
|
// If the widget isn't active.
|
|
1123
|
-
if (this.viewOnly ||
|
|
1124
|
-
|
|
1125
|
-
|
|
1196
|
+
if (this.viewOnly ||
|
|
1197
|
+
this.loading ||
|
|
1198
|
+
(!this.component.lazyLoad && !this.selectOptions.length) ||
|
|
1199
|
+
!this.element) {
|
|
1126
1200
|
return this.dataValue;
|
|
1127
1201
|
}
|
|
1128
1202
|
let value = this.emptyValue;
|
|
@@ -1131,7 +1205,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1131
1205
|
// Make sure we don't get the placeholder
|
|
1132
1206
|
if (!this.component.multiple &&
|
|
1133
1207
|
this.component.placeholder &&
|
|
1134
|
-
|
|
1208
|
+
value === this.t(this.component.placeholder, { _userInput: true })) {
|
|
1135
1209
|
value = this.emptyValue;
|
|
1136
1210
|
}
|
|
1137
1211
|
}
|
|
@@ -1141,8 +1215,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1141
1215
|
if (value === '') {
|
|
1142
1216
|
return {};
|
|
1143
1217
|
}
|
|
1144
|
-
const option = this.selectOptions[value] ||
|
|
1145
|
-
this.selectOptions.find(option => option.id === value);
|
|
1218
|
+
const option = this.selectOptions[value] || this.selectOptions.find((option) => option.id === value);
|
|
1146
1219
|
if (option && _.isObject(option.value)) {
|
|
1147
1220
|
value = option.value;
|
|
1148
1221
|
}
|
|
@@ -1177,16 +1250,18 @@ export default class SelectComponent extends ListComponent {
|
|
|
1177
1250
|
number() {
|
|
1178
1251
|
const numberValue = Number(this.value);
|
|
1179
1252
|
const isEquivalent = value.toString() === numberValue.toString();
|
|
1180
|
-
if (!Number.isNaN(numberValue) &&
|
|
1253
|
+
if (!Number.isNaN(numberValue) &&
|
|
1254
|
+
Number.isFinite(numberValue) &&
|
|
1255
|
+
value !== '' &&
|
|
1256
|
+
isEquivalent) {
|
|
1181
1257
|
this.value = numberValue;
|
|
1182
1258
|
}
|
|
1183
1259
|
return this;
|
|
1184
1260
|
},
|
|
1185
1261
|
boolean() {
|
|
1186
|
-
if (_.isString(this.value)
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
this.value = (this.value.toLowerCase() === 'true');
|
|
1262
|
+
if (_.isString(this.value) &&
|
|
1263
|
+
(this.value.toLowerCase() === 'true' || this.value.toLowerCase() === 'false')) {
|
|
1264
|
+
this.value = this.value.toLowerCase() === 'true';
|
|
1190
1265
|
}
|
|
1191
1266
|
return this;
|
|
1192
1267
|
},
|
|
@@ -1205,7 +1280,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1205
1280
|
this.value = this.string().number().boolean().value;
|
|
1206
1281
|
}
|
|
1207
1282
|
return this;
|
|
1208
|
-
}
|
|
1283
|
+
},
|
|
1209
1284
|
};
|
|
1210
1285
|
try {
|
|
1211
1286
|
return normalize[dataType]().value;
|
|
@@ -1238,7 +1313,11 @@ export default class SelectComponent extends ListComponent {
|
|
|
1238
1313
|
// Check to see if we need to save off the template data into our metadata.
|
|
1239
1314
|
const templateValue = this.component.reference && value?._id ? value._id.toString() : value;
|
|
1240
1315
|
const shouldSaveData = (!valueIsObject || this.component.reference) && !this.inDataTable;
|
|
1241
|
-
if (!_.isNil(templateValue) &&
|
|
1316
|
+
if (!_.isNil(templateValue) &&
|
|
1317
|
+
shouldSaveData &&
|
|
1318
|
+
this.templateData &&
|
|
1319
|
+
this.templateData[templateValue] &&
|
|
1320
|
+
this.root?.submission) {
|
|
1242
1321
|
const submission = this.root.submission;
|
|
1243
1322
|
if (!submission.metadata) {
|
|
1244
1323
|
submission.metadata = {};
|
|
@@ -1252,7 +1331,9 @@ export default class SelectComponent extends ListComponent {
|
|
|
1252
1331
|
const dataValue = this.dataValue;
|
|
1253
1332
|
if (dataValue && _.isArray(dataValue) && dataValue.length) {
|
|
1254
1333
|
dataValue.forEach((dataValueItem) => {
|
|
1255
|
-
const dataValueItemValue = this.component.reference
|
|
1334
|
+
const dataValueItemValue = this.component.reference
|
|
1335
|
+
? dataValueItem._id.toString()
|
|
1336
|
+
: dataValueItem;
|
|
1256
1337
|
templateData[dataValueItemValue] = this.templateData[dataValueItemValue];
|
|
1257
1338
|
});
|
|
1258
1339
|
}
|
|
@@ -1272,7 +1353,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1272
1353
|
const changed = super.updateValue(value, flags);
|
|
1273
1354
|
if (changed || !this.selectMetadata || flags.resetValue) {
|
|
1274
1355
|
if (this.component.multiple && Array.isArray(this.dataValue)) {
|
|
1275
|
-
this.dataValue.forEach(singleValue => this.setMetadata(singleValue, flags));
|
|
1356
|
+
this.dataValue.forEach((singleValue) => this.setMetadata(singleValue, flags));
|
|
1276
1357
|
}
|
|
1277
1358
|
else {
|
|
1278
1359
|
this.setMetadata(this.dataValue, flags);
|
|
@@ -1283,7 +1364,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1283
1364
|
undoValueTyping(value) {
|
|
1284
1365
|
let untypedValue = value;
|
|
1285
1366
|
if (this.component.multiple && Array.isArray(value)) {
|
|
1286
|
-
untypedValue = value.map(v => {
|
|
1367
|
+
untypedValue = value.map((v) => {
|
|
1287
1368
|
if (typeof v === 'boolean' || typeof v === 'number') {
|
|
1288
1369
|
return v.toString();
|
|
1289
1370
|
}
|
|
@@ -1300,7 +1381,9 @@ export default class SelectComponent extends ListComponent {
|
|
|
1300
1381
|
setValue(value, flags = {}) {
|
|
1301
1382
|
const previousValue = this.dataValue;
|
|
1302
1383
|
const changed = this.updateValue(value, flags);
|
|
1303
|
-
if (this.component.widget === 'html5' &&
|
|
1384
|
+
if (this.component.widget === 'html5' &&
|
|
1385
|
+
(_.isEqual(value, previousValue) || (_.isEqual(previousValue, {}) && _.isEqual(flags, {}))) &&
|
|
1386
|
+
!flags.fromSubmission) {
|
|
1304
1387
|
return false;
|
|
1305
1388
|
}
|
|
1306
1389
|
value = this.dataValue;
|
|
@@ -1324,6 +1407,9 @@ export default class SelectComponent extends ListComponent {
|
|
|
1324
1407
|
this.lazyLoadInit = true;
|
|
1325
1408
|
const searchProperty = this.component.searchField || this.component.valueProperty;
|
|
1326
1409
|
this.triggerUpdate(_.get(value.data || value, searchProperty, value), true);
|
|
1410
|
+
this.itemsLoaded.then(() => {
|
|
1411
|
+
this.setChoicesValue(value, hasPreviousValue, flags);
|
|
1412
|
+
});
|
|
1327
1413
|
return changed;
|
|
1328
1414
|
}
|
|
1329
1415
|
// Add the value options.
|
|
@@ -1334,23 +1420,28 @@ export default class SelectComponent extends ListComponent {
|
|
|
1334
1420
|
return changed;
|
|
1335
1421
|
}
|
|
1336
1422
|
isInitApiCallNeeded(hasValue) {
|
|
1337
|
-
return this.component.lazyLoad &&
|
|
1423
|
+
return (this.component.lazyLoad &&
|
|
1338
1424
|
!this.lazyLoadInit &&
|
|
1339
1425
|
!this.active &&
|
|
1340
1426
|
!this.selectOptions.length &&
|
|
1341
1427
|
hasValue &&
|
|
1342
1428
|
this.shouldInitialLoad &&
|
|
1343
|
-
this.visible &&
|
|
1429
|
+
this.visible &&
|
|
1430
|
+
(this.component.searchField || this.component.valueProperty));
|
|
1344
1431
|
}
|
|
1345
1432
|
setChoicesValue(value, hasPreviousValue, flags = {}) {
|
|
1346
1433
|
const hasValue = !this.isEmpty(value) || flags.fromSubmission;
|
|
1347
|
-
hasPreviousValue =
|
|
1434
|
+
hasPreviousValue = hasPreviousValue === undefined ? true : hasPreviousValue;
|
|
1348
1435
|
if (this.choices) {
|
|
1349
1436
|
// Now set the value.
|
|
1350
1437
|
if (hasValue) {
|
|
1351
1438
|
this.choices.removeActiveItems();
|
|
1352
1439
|
// Add the currently selected choices if they don't already exist.
|
|
1353
|
-
const currentChoices = Array.isArray(value) && this.component.multiple
|
|
1440
|
+
const currentChoices = Array.isArray(value) && this.component.multiple
|
|
1441
|
+
? value
|
|
1442
|
+
: [
|
|
1443
|
+
value,
|
|
1444
|
+
];
|
|
1354
1445
|
if (!this.addCurrentChoices(currentChoices, this.selectOptions, true)) {
|
|
1355
1446
|
this.choices.setChoices(this.selectOptions, 'value', 'label', true);
|
|
1356
1447
|
}
|
|
@@ -1362,9 +1453,13 @@ export default class SelectComponent extends ListComponent {
|
|
|
1362
1453
|
}
|
|
1363
1454
|
else {
|
|
1364
1455
|
if (hasValue) {
|
|
1365
|
-
const values = Array.isArray(value)
|
|
1366
|
-
|
|
1367
|
-
|
|
1456
|
+
const values = Array.isArray(value)
|
|
1457
|
+
? value
|
|
1458
|
+
: [
|
|
1459
|
+
value,
|
|
1460
|
+
];
|
|
1461
|
+
if ((!_.isEqual(this.dataValue, this.defaultValue) && this.selectOptions.length < 2) ||
|
|
1462
|
+
(this.selectData && flags.fromSubmission)) {
|
|
1368
1463
|
const { value, label } = this.selectValueAndLabel(this.dataValue);
|
|
1369
1464
|
this.addOption(value, label);
|
|
1370
1465
|
}
|
|
@@ -1404,7 +1499,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1404
1499
|
return false;
|
|
1405
1500
|
}
|
|
1406
1501
|
try {
|
|
1407
|
-
return
|
|
1502
|
+
return JSON.stringify(normalizedOptionValue) === JSON.stringify(value);
|
|
1408
1503
|
}
|
|
1409
1504
|
catch (err) {
|
|
1410
1505
|
console.warn.error('Error while comparing items', err);
|
|
@@ -1413,7 +1508,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1413
1508
|
};
|
|
1414
1509
|
return values.findIndex((optionValue) => compareComplexValues(optionValue)) !== -1;
|
|
1415
1510
|
}
|
|
1416
|
-
return values.findIndex((optionValue) => this.normalizeSingleValue(optionValue) === value) !== -1;
|
|
1511
|
+
return (values.findIndex((optionValue) => this.normalizeSingleValue(optionValue) === value) !== -1);
|
|
1417
1512
|
}
|
|
1418
1513
|
return false;
|
|
1419
1514
|
}
|
|
@@ -1472,7 +1567,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1472
1567
|
*/
|
|
1473
1568
|
deleteValue() {
|
|
1474
1569
|
this.setValue('', {
|
|
1475
|
-
noUpdateEvent: true
|
|
1570
|
+
noUpdateEvent: true,
|
|
1476
1571
|
});
|
|
1477
1572
|
this.unset();
|
|
1478
1573
|
}
|
|
@@ -1495,7 +1590,10 @@ export default class SelectComponent extends ListComponent {
|
|
|
1495
1590
|
if (!this.component || !this.component.data || !this.component.data.values) {
|
|
1496
1591
|
return;
|
|
1497
1592
|
}
|
|
1498
|
-
return this.component.data.values.map(value => ({
|
|
1593
|
+
return this.component.data.values.map((value) => ({
|
|
1594
|
+
label: value.label,
|
|
1595
|
+
value: String(this.normalizeSingleValue(value.value)),
|
|
1596
|
+
}));
|
|
1499
1597
|
}
|
|
1500
1598
|
asString(value, options = {}) {
|
|
1501
1599
|
value = value ?? this.getValue();
|
|
@@ -1503,7 +1601,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1503
1601
|
if (this.inDataTable) {
|
|
1504
1602
|
value = this.undoValueTyping(value);
|
|
1505
1603
|
}
|
|
1506
|
-
const templateValue =
|
|
1604
|
+
const templateValue = this.isEntireObjectDisplay() && !_.isObject(value.data) ? { data: value } : value;
|
|
1507
1605
|
const template = this.itemTemplate(templateValue, value, options);
|
|
1508
1606
|
return template;
|
|
1509
1607
|
}
|
|
@@ -1511,7 +1609,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1511
1609
|
const convertToString = (data, valueProperty) => {
|
|
1512
1610
|
if (valueProperty) {
|
|
1513
1611
|
if (Array.isArray(data)) {
|
|
1514
|
-
data.forEach((item) => item[valueProperty] = item[valueProperty].toString());
|
|
1612
|
+
data.forEach((item) => (item[valueProperty] = item[valueProperty].toString()));
|
|
1515
1613
|
}
|
|
1516
1614
|
else if (_.isObject(data)) {
|
|
1517
1615
|
data[valueProperty] = data[valueProperty].toString();
|
|
@@ -1521,14 +1619,18 @@ export default class SelectComponent extends ListComponent {
|
|
|
1521
1619
|
if (this.isBooleanOrNumber(data)) {
|
|
1522
1620
|
data = data.toString();
|
|
1523
1621
|
}
|
|
1524
|
-
if (Array.isArray(data) && data.some(item => this.isBooleanOrNumber(item))) {
|
|
1525
|
-
data = data.map(item => this.isBooleanOrNumber(item) ? item.toString() : item);
|
|
1622
|
+
if (Array.isArray(data) && data.some((item) => this.isBooleanOrNumber(item))) {
|
|
1623
|
+
data = data.map((item) => (this.isBooleanOrNumber(item) ? item.toString() : item));
|
|
1526
1624
|
}
|
|
1527
1625
|
return data;
|
|
1528
1626
|
};
|
|
1529
1627
|
value = convertToString(value);
|
|
1530
|
-
if ([
|
|
1531
|
-
|
|
1628
|
+
if ([
|
|
1629
|
+
'values',
|
|
1630
|
+
'custom',
|
|
1631
|
+
].includes(this.component.dataSrc) &&
|
|
1632
|
+
!this.asyncCustomValues()) {
|
|
1633
|
+
const { items, valueProperty } = this.component.dataSrc === 'values'
|
|
1532
1634
|
? {
|
|
1533
1635
|
items: convertToString(this.getNormalizedValues(), 'value'),
|
|
1534
1636
|
valueProperty: 'value',
|
|
@@ -1538,28 +1640,30 @@ export default class SelectComponent extends ListComponent {
|
|
|
1538
1640
|
valueProperty: this.valueProperty,
|
|
1539
1641
|
};
|
|
1540
1642
|
const getFromValues = () => {
|
|
1541
|
-
const initialValue = _.find(items, [
|
|
1643
|
+
const initialValue = _.find(items, [
|
|
1644
|
+
valueProperty,
|
|
1645
|
+
value,
|
|
1646
|
+
]);
|
|
1542
1647
|
const values = this.defaultSchema.data.values || [];
|
|
1543
1648
|
return _.isEqual(initialValue, values[0]) ? '-' : initialValue;
|
|
1544
1649
|
};
|
|
1545
|
-
value =
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1650
|
+
value =
|
|
1651
|
+
this.component.multiple && Array.isArray(value)
|
|
1652
|
+
? _.filter(items, (item) => value.includes(item.value))
|
|
1653
|
+
: valueProperty && items
|
|
1654
|
+
? (getFromValues() ?? { value, label: value })
|
|
1655
|
+
: value;
|
|
1550
1656
|
}
|
|
1551
1657
|
if (_.isString(value)) {
|
|
1552
1658
|
return value;
|
|
1553
1659
|
}
|
|
1554
1660
|
const getTemplateValue = (v) => {
|
|
1555
1661
|
const itemTemplate = this.itemTemplate(v);
|
|
1556
|
-
return options.csv && itemTemplate
|
|
1557
|
-
? removeHTML(itemTemplate)
|
|
1558
|
-
: itemTemplate;
|
|
1662
|
+
return options.csv && itemTemplate ? removeHTML(itemTemplate) : itemTemplate;
|
|
1559
1663
|
};
|
|
1560
1664
|
if (Array.isArray(value)) {
|
|
1561
1665
|
const items = [];
|
|
1562
|
-
value.forEach(item => items.push(getTemplateValue(item)));
|
|
1666
|
+
value.forEach((item) => items.push(getTemplateValue(item)));
|
|
1563
1667
|
if (this.component.dataSrc === 'resource' && items.length > 0) {
|
|
1564
1668
|
return items.join(', ');
|
|
1565
1669
|
}
|
|
@@ -1573,9 +1677,7 @@ export default class SelectComponent extends ListComponent {
|
|
|
1573
1677
|
if (this.isEntireObjectDisplay() && _.isObject(value)) {
|
|
1574
1678
|
return JSON.stringify(value);
|
|
1575
1679
|
}
|
|
1576
|
-
return !_.isNil(value)
|
|
1577
|
-
? getTemplateValue(value)
|
|
1578
|
-
: '-';
|
|
1680
|
+
return !_.isNil(value) ? getTemplateValue(value) : '-';
|
|
1579
1681
|
}
|
|
1580
1682
|
detach() {
|
|
1581
1683
|
this.off('blur');
|
|
@@ -1596,10 +1698,14 @@ export default class SelectComponent extends ListComponent {
|
|
|
1596
1698
|
setErrorClasses(elements, dirty, hasError, hasMessages, element = this.element) {
|
|
1597
1699
|
super.setErrorClasses(elements, dirty, hasError, hasMessages, element);
|
|
1598
1700
|
if (this.choices) {
|
|
1599
|
-
super.setErrorClasses([
|
|
1701
|
+
super.setErrorClasses([
|
|
1702
|
+
this.choices.containerInner.element,
|
|
1703
|
+
], dirty, hasError, hasMessages, element);
|
|
1600
1704
|
}
|
|
1601
1705
|
else {
|
|
1602
|
-
super.setErrorClasses([
|
|
1706
|
+
super.setErrorClasses([
|
|
1707
|
+
this.refs.selectContainer,
|
|
1708
|
+
], dirty, hasError, hasMessages, element);
|
|
1603
1709
|
}
|
|
1604
1710
|
}
|
|
1605
1711
|
}
|