@defra/forms-engine-plugin 4.23.0 → 5.0.0-alpha.1
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/.public/assets-manifest.json +3 -5
- package/.public/javascripts/im-core.min.js +2 -0
- package/.public/javascripts/im-core.min.js.map +1 -0
- package/.public/javascripts/shared.min.js +1 -1
- package/.public/javascripts/shared.min.js.map +1 -1
- package/.public/javascripts/vendor/@defra.min.js +1 -1
- package/.public/javascripts/vendor/@defra.min.js.map +1 -1
- package/.public/stylesheets/application.min.css +1 -1
- package/.public/stylesheets/application.min.css.map +1 -1
- package/.server/client/javascripts/geospatial-map.js +8 -6
- package/.server/client/javascripts/geospatial-map.js.map +1 -1
- package/.server/client/javascripts/location-map.js +8 -1
- package/.server/client/javascripts/location-map.js.map +1 -1
- package/.server/client/javascripts/map.d.ts +6 -0
- package/.server/client/javascripts/map.js +10 -0
- package/.server/client/javascripts/map.js.map +1 -1
- package/.server/client/javascripts/sssi-dataset.d.ts +34 -0
- package/.server/client/javascripts/sssi-dataset.js +101 -0
- package/.server/client/javascripts/sssi-dataset.js.map +1 -0
- package/.server/client/stylesheets/shared.scss +0 -2
- package/.server/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
- package/.server/server/forms/simple-form.yaml +106 -3
- package/.server/server/plugins/engine/components/AutocompleteField.d.ts +11 -11
- package/.server/server/plugins/engine/components/AutocompleteField.js +2 -2
- package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
- package/.server/server/plugins/engine/components/CheckboxesField.d.ts +3 -2
- package/.server/server/plugins/engine/components/CheckboxesField.js +4 -9
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.d.ts +8 -7
- package/.server/server/plugins/engine/components/ComponentCollection.js +106 -51
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/DatePartsField.d.ts +8 -6
- package/.server/server/plugins/engine/components/DatePartsField.js +27 -9
- package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
- package/.server/server/plugins/engine/components/DeclarationField.d.ts +13 -11
- package/.server/server/plugins/engine/components/DeclarationField.js +31 -9
- package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
- package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +8 -5
- package/.server/server/plugins/engine/components/EastingNorthingField.js +42 -22
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
- package/.server/server/plugins/engine/components/EmailAddressField.d.ts +11 -14
- package/.server/server/plugins/engine/components/EmailAddressField.js +2 -2
- package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +14 -12
- package/.server/server/plugins/engine/components/FileUploadField.js +22 -12
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
- package/.server/server/plugins/engine/components/FormComponent.d.ts +21 -12
- package/.server/server/plugins/engine/components/FormComponent.js +33 -14
- package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/GeospatialField.d.ts +15 -12
- package/.server/server/plugins/engine/components/GeospatialField.js +21 -13
- package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
- package/.server/server/plugins/engine/components/LatLongField.d.ts +8 -5
- package/.server/server/plugins/engine/components/LatLongField.js +32 -20
- package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
- package/.server/server/plugins/engine/components/ListFormComponent.d.ts +7 -6
- package/.server/server/plugins/engine/components/ListFormComponent.js +19 -7
- package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +17 -16
- package/.server/server/plugins/engine/components/LocationFieldBase.js +2 -2
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +8 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +14 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
- package/.server/server/plugins/engine/components/Markdown.d.ts +8 -7
- package/.server/server/plugins/engine/components/Markdown.js +5 -2
- package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
- package/.server/server/plugins/engine/components/MonthYearField.d.ts +9 -7
- package/.server/server/plugins/engine/components/MonthYearField.js +26 -8
- package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
- package/.server/server/plugins/engine/components/MultilineTextField.d.ts +10 -9
- package/.server/server/plugins/engine/components/MultilineTextField.js +2 -2
- package/.server/server/plugins/engine/components/MultilineTextField.js.map +1 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +14 -6
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/NumberField.d.ts +10 -9
- package/.server/server/plugins/engine/components/NumberField.js +2 -2
- package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
- package/.server/server/plugins/engine/components/OsGridRefField.js +14 -6
- package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
- package/.server/server/plugins/engine/components/PaymentField.d.ts +12 -10
- package/.server/server/plugins/engine/components/PaymentField.js +21 -8
- package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectField.d.ts +11 -11
- package/.server/server/plugins/engine/components/SelectField.js +2 -2
- package/.server/server/plugins/engine/components/SelectField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectionControlField.d.ts +4 -4
- package/.server/server/plugins/engine/components/SelectionControlField.js +2 -2
- package/.server/server/plugins/engine/components/SelectionControlField.js.map +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +10 -9
- package/.server/server/plugins/engine/components/TelephoneNumberField.js +2 -2
- package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +12 -10
- package/.server/server/plugins/engine/components/UkAddressField.js +29 -17
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.d.ts +3 -0
- package/.server/server/plugins/engine/components/YesNoField.js +9 -0
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/components.d.ts +3 -2
- package/.server/server/plugins/engine/components/helpers/components.js +11 -8
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/types.d.ts +8 -1
- package/.server/server/plugins/engine/components/types.js.map +1 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js +8 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -1
- package/.server/server/plugins/engine/form-context.d.ts +1 -0
- package/.server/server/plugins/engine/form-context.js +4 -2
- package/.server/server/plugins/engine/form-context.js.map +1 -1
- package/.server/server/plugins/engine/helpers.d.ts +1 -1
- package/.server/server/plugins/engine/helpers.js +8 -13
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +39 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +50 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +5 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.js +18 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -0
- package/.server/server/plugins/engine/i18n/createTranslator.d.ts +9 -0
- package/.server/server/plugins/engine/i18n/createTranslator.js +51 -0
- package/.server/server/plugins/engine/i18n/createTranslator.js.map +1 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +5 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +57 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -0
- package/.server/server/plugins/engine/i18n/index.d.ts +18 -0
- package/.server/server/plugins/engine/i18n/index.js +71 -0
- package/.server/server/plugins/engine/i18n/index.js.map +1 -0
- package/.server/server/plugins/engine/i18n/translations/cy.json +271 -0
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +271 -0
- package/.server/server/plugins/engine/i18n/types.d.ts +41 -0
- package/.server/server/plugins/engine/i18n/types.js +2 -0
- package/.server/server/plugins/engine/i18n/types.js.map +1 -0
- package/.server/server/plugins/engine/index.js +3 -2
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +9 -1
- package/.server/server/plugins/engine/models/FormModel.js +44 -18
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +5 -2
- package/.server/server/plugins/engine/models/SummaryViewModel.js +44 -18
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/options.js +2 -1
- package/.server/server/plugins/engine/options.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +4 -0
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js +7 -6
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +2 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +6 -3
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/PageController.d.ts +3 -1
- package/.server/server/plugins/engine/pageControllers/PageController.js +11 -1
- package/.server/server/plugins/engine/pageControllers/PageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +4 -2
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +52 -21
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +3 -2
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +63 -26
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +3 -1
- package/.server/server/plugins/engine/pageControllers/StartPageController.js +2 -2
- package/.server/server/plugins/engine/pageControllers/StartPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js +12 -2
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +4 -3
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +44 -28
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.d.ts +2 -0
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js +24 -0
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/errors.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/errors.js +3 -2
- package/.server/server/plugins/engine/pageControllers/errors.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +3 -2
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js +4 -4
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +7 -3
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +34 -33
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/plugin.js +2 -0
- package/.server/server/plugins/engine/plugin.js.map +1 -1
- package/.server/server/plugins/engine/routes/index.js +4 -1
- package/.server/server/plugins/engine/routes/index.js.map +1 -1
- package/.server/server/plugins/engine/routes/questions.js +5 -2
- package/.server/server/plugins/engine/routes/questions.js.map +1 -1
- package/.server/server/plugins/engine/types/index.d.ts +1 -0
- package/.server/server/plugins/engine/types/index.js.map +1 -1
- package/.server/server/plugins/engine/types/schema.js +1 -0
- package/.server/server/plugins/engine/types/schema.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +12 -1
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/views/components/_location-field-base.html +4 -2
- package/.server/server/plugins/engine/views/components/fileuploadfield.html +3 -3
- package/.server/server/plugins/engine/views/components/geospatialfield.html +4 -1
- package/.server/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
- package/.server/server/plugins/engine/views/components/osgridreffield.html +1 -1
- package/.server/server/plugins/engine/views/components/paymentfield.html +8 -8
- package/.server/server/plugins/engine/views/components/ukaddressfield.html +4 -4
- package/.server/server/plugins/engine/views/confirmation.html +4 -4
- package/.server/server/plugins/engine/views/exit.html +4 -4
- package/.server/server/plugins/engine/views/file-upload.html +3 -3
- package/.server/server/plugins/engine/views/index.html +3 -3
- package/.server/server/plugins/engine/views/item-delete.html +1 -1
- package/.server/server/plugins/engine/views/partials/form.html +3 -3
- package/.server/server/plugins/engine/views/partials/preview-banner.html +4 -4
- package/.server/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
- package/.server/server/plugins/engine/views/repeat-list-summary.html +4 -4
- package/.server/server/plugins/engine/views/summary.html +14 -7
- package/.server/server/plugins/map/routes/index.js +1 -1
- package/.server/server/plugins/map/routes/index.js.map +1 -1
- package/.server/server/plugins/map/types.d.ts +1 -25
- package/.server/server/plugins/map/types.js +1 -16
- package/.server/server/plugins/map/types.js.map +1 -1
- package/.server/server/plugins/nunjucks/enviroment.test.js +10 -0
- package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/environment.d.ts +8 -0
- package/.server/server/plugins/nunjucks/environment.js +13 -0
- package/.server/server/plugins/nunjucks/environment.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.js +9 -1
- package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.test.js +13 -2
- package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
- package/.server/server/plugins/postcode-lookup/models/index.d.ts +24 -19
- package/.server/server/plugins/postcode-lookup/models/index.js +83 -76
- package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.js +7 -13
- package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/types.d.ts +1 -0
- package/.server/server/plugins/postcode-lookup/types.js +1 -0
- package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/.server/server/types.d.ts +2 -1
- package/.server/server/types.js.map +1 -1
- package/.server/server/utils/utils.d.ts +5 -0
- package/.server/server/utils/utils.js +16 -0
- package/.server/server/utils/utils.js.map +1 -1
- package/.server/typings/hapi/index.d.js.map +1 -1
- package/package.json +5 -4
- package/src/client/javascripts/geospatial-map.js +10 -6
- package/src/client/javascripts/location-map.js +11 -0
- package/src/client/javascripts/map.js +10 -0
- package/src/client/javascripts/sssi-dataset.js +106 -0
- package/src/client/stylesheets/shared.scss +0 -2
- package/src/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
- package/src/server/forms/simple-form.yaml +106 -3
- package/src/server/plugins/engine/components/AutocompleteField.ts +3 -6
- package/src/server/plugins/engine/components/CheckboxesField.ts +12 -11
- package/src/server/plugins/engine/components/ComponentCollection.ts +143 -61
- package/src/server/plugins/engine/components/DatePartsField.ts +33 -11
- package/src/server/plugins/engine/components/DeclarationField.ts +37 -14
- package/src/server/plugins/engine/components/EastingNorthingField.ts +83 -22
- package/src/server/plugins/engine/components/EmailAddressField.ts +4 -7
- package/src/server/plugins/engine/components/FileUploadField.ts +28 -22
- package/src/server/plugins/engine/components/FormComponent.ts +49 -12
- package/src/server/plugins/engine/components/GeospatialField.ts +38 -21
- package/src/server/plugins/engine/components/LatLongField.ts +52 -21
- package/src/server/plugins/engine/components/ListFormComponent.ts +26 -10
- package/src/server/plugins/engine/components/LocationFieldBase.ts +5 -8
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +24 -4
- package/src/server/plugins/engine/components/Markdown.ts +7 -3
- package/src/server/plugins/engine/components/MonthYearField.ts +32 -10
- package/src/server/plugins/engine/components/MultilineTextField.ts +5 -8
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +25 -11
- package/src/server/plugins/engine/components/NumberField.ts +3 -4
- package/src/server/plugins/engine/components/OsGridRefField.ts +25 -9
- package/src/server/plugins/engine/components/PaymentField.ts +22 -12
- package/src/server/plugins/engine/components/SelectField.ts +3 -6
- package/src/server/plugins/engine/components/SelectionControlField.ts +7 -8
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +4 -7
- package/src/server/plugins/engine/components/UkAddressField.ts +33 -18
- package/src/server/plugins/engine/components/YesNoField.ts +10 -0
- package/src/server/plugins/engine/components/helpers/components.ts +13 -6
- package/src/server/plugins/engine/components/types.ts +9 -0
- package/src/server/plugins/engine/configureEnginePlugin.ts +12 -1
- package/src/server/plugins/engine/form-context.ts +8 -2
- package/src/server/plugins/engine/helpers.ts +10 -18
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +69 -0
- package/src/server/plugins/engine/i18n/createFormTranslator.ts +33 -0
- package/src/server/plugins/engine/i18n/createTranslator.ts +61 -0
- package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +61 -0
- package/src/server/plugins/engine/i18n/index.ts +80 -0
- package/src/server/plugins/engine/i18n/translations/cy.json +271 -0
- package/src/server/plugins/engine/i18n/translations/en-GB.json +271 -0
- package/src/server/plugins/engine/i18n/types.ts +62 -0
- package/src/server/plugins/engine/index.ts +4 -2
- package/src/server/plugins/engine/models/FormModel.ts +59 -23
- package/src/server/plugins/engine/models/SummaryViewModel.ts +68 -25
- package/src/server/plugins/engine/options.js +2 -1
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +5 -0
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -3
- package/src/server/plugins/engine/outputFormatters/machine/v1.ts +9 -8
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +7 -3
- package/src/server/plugins/engine/pageControllers/PageController.ts +12 -1
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +53 -21
- package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +66 -29
- package/src/server/plugins/engine/pageControllers/StartPageController.ts +7 -2
- package/src/server/plugins/engine/pageControllers/StatusPageController.ts +10 -2
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +48 -22
- package/src/server/plugins/engine/pageControllers/__stubs__/translator.ts +28 -0
- package/src/server/plugins/engine/pageControllers/errors.ts +4 -2
- package/src/server/plugins/engine/pageControllers/helpers/submission.ts +11 -4
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +43 -53
- package/src/server/plugins/engine/plugin.ts +2 -0
- package/src/server/plugins/engine/routes/index.ts +9 -1
- package/src/server/plugins/engine/routes/questions.ts +5 -1
- package/src/server/plugins/engine/types/index.ts +5 -0
- package/src/server/plugins/engine/types/schema.ts +1 -0
- package/src/server/plugins/engine/types.ts +10 -0
- package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
- package/src/server/plugins/engine/views/components/fileuploadfield.html +3 -3
- package/src/server/plugins/engine/views/components/geospatialfield.html +4 -1
- package/src/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
- package/src/server/plugins/engine/views/components/osgridreffield.html +1 -1
- package/src/server/plugins/engine/views/components/paymentfield.html +8 -8
- package/src/server/plugins/engine/views/components/ukaddressfield.html +4 -4
- package/src/server/plugins/engine/views/confirmation.html +4 -4
- package/src/server/plugins/engine/views/exit.html +4 -4
- package/src/server/plugins/engine/views/file-upload.html +3 -3
- package/src/server/plugins/engine/views/index.html +3 -3
- package/src/server/plugins/engine/views/item-delete.html +1 -1
- package/src/server/plugins/engine/views/partials/form.html +3 -3
- package/src/server/plugins/engine/views/partials/preview-banner.html +4 -4
- package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
- package/src/server/plugins/engine/views/repeat-list-summary.html +4 -4
- package/src/server/plugins/engine/views/summary.html +14 -7
- package/src/server/plugins/map/routes/index.js +1 -1
- package/src/server/plugins/map/types.js +1 -16
- package/src/server/plugins/nunjucks/environment.js +14 -0
- package/src/server/plugins/nunjucks/filters/answer.js +12 -1
- package/src/server/plugins/postcode-lookup/models/index.js +144 -87
- package/src/server/plugins/postcode-lookup/routes/index.js +13 -16
- package/src/server/plugins/postcode-lookup/types.js +1 -0
- package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/src/server/types.ts +2 -0
- package/src/server/utils/utils.js +14 -0
- package/src/typings/hapi/index.d.ts +1 -0
- package/.public/javascripts/im-search-plugin.min.js +0 -2
- package/.public/javascripts/im-search-plugin.min.js.map +0 -1
- package/.public/javascripts/vendor/preact.min.js +0 -2
- package/.public/javascripts/vendor/preact.min.js.map +0 -1
- package/.server/server/plugins/engine/components/constants.d.ts +0 -1
- package/.server/server/plugins/engine/components/constants.js +0 -2
- package/.server/server/plugins/engine/components/constants.js.map +0 -1
- package/src/server/plugins/engine/components/constants.ts +0 -1
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { type AutocompleteFieldComponent, type SelectFieldComponent } from '@defra/forms-model';
|
|
2
2
|
import { ListFormComponent } from '../../../../server/plugins/engine/components/ListFormComponent.js';
|
|
3
|
-
import { type
|
|
3
|
+
import { type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
4
4
|
export declare class SelectField extends ListFormComponent {
|
|
5
5
|
options: SelectFieldComponent['options'] | AutocompleteFieldComponent['options'];
|
|
6
6
|
constructor(def: SelectFieldComponent | AutocompleteFieldComponent, props: ConstructorParameters<typeof ListFormComponent>[1]);
|
|
7
|
-
getViewModel(
|
|
8
|
-
items: import("
|
|
7
|
+
getViewModel(context: RenderContext): {
|
|
8
|
+
items: import("../../../../server/plugins/engine/components/types.js").ListItem[];
|
|
9
9
|
label: {
|
|
10
10
|
text: string;
|
|
11
11
|
};
|
|
12
12
|
id: string;
|
|
13
13
|
name: string;
|
|
14
|
-
value: import("
|
|
14
|
+
value: import("../types.js").FormValue;
|
|
15
15
|
type?: string;
|
|
16
16
|
hint?: {
|
|
17
17
|
id?: string;
|
|
18
18
|
text: string;
|
|
19
19
|
};
|
|
20
|
-
prefix?: import("
|
|
21
|
-
suffix?: import("
|
|
20
|
+
prefix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
21
|
+
suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
22
22
|
classes?: string;
|
|
23
23
|
condition?: string;
|
|
24
|
-
errors?: FormSubmissionError[];
|
|
24
|
+
errors?: import("../types.js").FormSubmissionError[];
|
|
25
25
|
errorMessage?: {
|
|
26
26
|
text: string;
|
|
27
27
|
};
|
|
@@ -34,23 +34,23 @@ export declare class SelectField extends ListFormComponent {
|
|
|
34
34
|
accept?: string;
|
|
35
35
|
inputmode?: string;
|
|
36
36
|
};
|
|
37
|
-
content?: import("
|
|
37
|
+
content?: import("../../../../server/plugins/engine/components/types.js").Content | import("../../../../server/plugins/engine/components/types.js").Content[] | string;
|
|
38
38
|
maxlength?: number;
|
|
39
39
|
maxwords?: number;
|
|
40
40
|
rows?: number;
|
|
41
41
|
fieldset?: {
|
|
42
42
|
attributes?: string | Record<string, string>;
|
|
43
|
-
legend?: import("
|
|
43
|
+
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
44
44
|
};
|
|
45
45
|
formGroup?: {
|
|
46
46
|
classes?: string;
|
|
47
47
|
attributes?: string | Record<string, string>;
|
|
48
48
|
};
|
|
49
49
|
showFieldsetError?: boolean;
|
|
50
|
-
components?: import("
|
|
50
|
+
components?: import("../../../../server/plugins/engine/components/types.js").ComponentViewModel[];
|
|
51
51
|
upload?: {
|
|
52
52
|
count: number;
|
|
53
|
-
summaryList: import("
|
|
53
|
+
summaryList: import("../types.js").SummaryList;
|
|
54
54
|
};
|
|
55
55
|
};
|
|
56
56
|
}
|
|
@@ -16,8 +16,8 @@ export class SelectField extends ListFormComponent {
|
|
|
16
16
|
this.formSchema = formSchema;
|
|
17
17
|
this.options = options;
|
|
18
18
|
}
|
|
19
|
-
getViewModel(
|
|
20
|
-
const viewModel = super.getViewModel(
|
|
19
|
+
getViewModel(context) {
|
|
20
|
+
const viewModel = super.getViewModel(context);
|
|
21
21
|
let {
|
|
22
22
|
items
|
|
23
23
|
} = viewModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectField.js","names":["ListFormComponent","SelectField","constructor","def","props","options","formSchema","required","allow","empty","getViewModel","
|
|
1
|
+
{"version":3,"file":"SelectField.js","names":["ListFormComponent","SelectField","constructor","def","props","options","formSchema","required","allow","empty","getViewModel","context","viewModel","items","value"],"sources":["../../../../../src/server/plugins/engine/components/SelectField.ts"],"sourcesContent":["import {\n type AutocompleteFieldComponent,\n type SelectFieldComponent\n} from '@defra/forms-model'\n\nimport { ListFormComponent } from '~/src/server/plugins/engine/components/ListFormComponent.js'\nimport { type RenderContext } from '~/src/server/plugins/engine/components/types.js'\n\nexport class SelectField extends ListFormComponent {\n declare options:\n | SelectFieldComponent['options']\n | AutocompleteFieldComponent['options']\n\n constructor(\n def: SelectFieldComponent | AutocompleteFieldComponent,\n props: ConstructorParameters<typeof ListFormComponent>[1]\n ) {\n super(def, props)\n\n const { options } = def\n let { formSchema } = this\n\n if (options.required === false) {\n formSchema = formSchema.allow('')\n } else {\n formSchema = formSchema.empty('')\n }\n\n this.formSchema = formSchema\n this.options = options\n }\n\n getViewModel(context: RenderContext) {\n const viewModel = super.getViewModel(context)\n let { items } = viewModel\n\n items = [{ value: '' }, ...items]\n\n return {\n ...viewModel,\n items\n }\n }\n}\n"],"mappings":"AAKA,SAASA,iBAAiB;AAG1B,OAAO,MAAMC,WAAW,SAASD,iBAAiB,CAAC;EAKjDE,WAAWA,CACTC,GAAsD,EACtDC,KAAyD,EACzD;IACA,KAAK,CAACD,GAAG,EAAEC,KAAK,CAAC;IAEjB,MAAM;MAAEC;IAAQ,CAAC,GAAGF,GAAG;IACvB,IAAI;MAAEG;IAAW,CAAC,GAAG,IAAI;IAEzB,IAAID,OAAO,CAACE,QAAQ,KAAK,KAAK,EAAE;MAC9BD,UAAU,GAAGA,UAAU,CAACE,KAAK,CAAC,EAAE,CAAC;IACnC,CAAC,MAAM;MACLF,UAAU,GAAGA,UAAU,CAACG,KAAK,CAAC,EAAE,CAAC;IACnC;IAEA,IAAI,CAACH,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACD,OAAO,GAAGA,OAAO;EACxB;EAEAK,YAAYA,CAACC,OAAsB,EAAE;IACnC,MAAMC,SAAS,GAAG,KAAK,CAACF,YAAY,CAACC,OAAO,CAAC;IAC7C,IAAI;MAAEE;IAAM,CAAC,GAAGD,SAAS;IAEzBC,KAAK,GAAG,CAAC;MAAEC,KAAK,EAAE;IAAG,CAAC,EAAE,GAAGD,KAAK,CAAC;IAEjC,OAAO;MACL,GAAGD,SAAS;MACZC;IACF,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ListFormComponent } from '../../../../server/plugins/engine/components/ListFormComponent.js';
|
|
2
|
-
import { type ListItem } from '../../../../server/plugins/engine/components/types.js';
|
|
3
|
-
import { type ErrorMessageTemplateList
|
|
2
|
+
import { type ListItem, type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
3
|
+
import { type ErrorMessageTemplateList } from '../../../../server/plugins/engine/types.js';
|
|
4
4
|
/**
|
|
5
5
|
* "Selection controls" are checkboxes and radios (and switches), as per Material UI nomenclature.
|
|
6
6
|
*/
|
|
7
7
|
export declare class SelectionControlField extends ListFormComponent {
|
|
8
|
-
getViewModel(
|
|
8
|
+
getViewModel(context: RenderContext): {
|
|
9
9
|
fieldset: {
|
|
10
10
|
attributes?: string | Record<string, string>;
|
|
11
11
|
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
@@ -26,7 +26,7 @@ export declare class SelectionControlField extends ListFormComponent {
|
|
|
26
26
|
suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
27
27
|
classes?: string;
|
|
28
28
|
condition?: string;
|
|
29
|
-
errors?: FormSubmissionError[];
|
|
29
|
+
errors?: import("../../../../server/plugins/engine/types.js").FormSubmissionError[];
|
|
30
30
|
errorMessage?: {
|
|
31
31
|
text: string;
|
|
32
32
|
};
|
|
@@ -4,11 +4,11 @@ import { messageTemplate } from "../pageControllers/validationOptions.js";
|
|
|
4
4
|
* "Selection controls" are checkboxes and radios (and switches), as per Material UI nomenclature.
|
|
5
5
|
*/
|
|
6
6
|
export class SelectionControlField extends ListFormComponent {
|
|
7
|
-
getViewModel(
|
|
7
|
+
getViewModel(context) {
|
|
8
8
|
const {
|
|
9
9
|
options
|
|
10
10
|
} = this;
|
|
11
|
-
const viewModel = super.getViewModel(
|
|
11
|
+
const viewModel = super.getViewModel(context);
|
|
12
12
|
let {
|
|
13
13
|
fieldset,
|
|
14
14
|
items,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionControlField.js","names":["ListFormComponent","messageTemplate","SelectionControlField","getViewModel","
|
|
1
|
+
{"version":3,"file":"SelectionControlField.js","names":["ListFormComponent","messageTemplate","SelectionControlField","getViewModel","context","options","viewModel","fieldset","items","label","legend","text","classes","map","item","selected","checked","itemModel","bold","getAllPossibleErrors","baseErrors","type","template","selectRequired","advancedSettingsErrors"],"sources":["../../../../../src/server/plugins/engine/components/SelectionControlField.ts"],"sourcesContent":["import { ListFormComponent } from '~/src/server/plugins/engine/components/ListFormComponent.js'\nimport {\n type ListItem,\n type RenderContext\n} from '~/src/server/plugins/engine/components/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'\n\n/**\n * \"Selection controls\" are checkboxes and radios (and switches), as per Material UI nomenclature.\n */\nexport class SelectionControlField extends ListFormComponent {\n getViewModel(context: RenderContext) {\n const { options } = this\n\n const viewModel = super.getViewModel(context)\n let { fieldset, items, label } = viewModel\n\n fieldset ??= {\n legend: {\n text: label.text,\n classes: 'govuk-fieldset__legend--m'\n }\n }\n\n items = items.map((item) => {\n const { selected: checked } = item\n const itemModel = { ...item, checked } satisfies ListItem\n\n if ('bold' in options && options.bold) {\n itemModel.label ??= {}\n itemModel.label.classes = 'govuk-label--s'\n }\n\n return itemModel\n })\n\n return {\n ...viewModel,\n fieldset,\n items\n }\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return SelectionControlField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'selectRequired', template: messageTemplate.selectRequired }\n ],\n advancedSettingsErrors: []\n }\n }\n}\n"],"mappings":"AAAA,SAASA,iBAAiB;AAK1B,SAASC,eAAe;AAGxB;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,SAASF,iBAAiB,CAAC;EAC3DG,YAAYA,CAACC,OAAsB,EAAE;IACnC,MAAM;MAAEC;IAAQ,CAAC,GAAG,IAAI;IAExB,MAAMC,SAAS,GAAG,KAAK,CAACH,YAAY,CAACC,OAAO,CAAC;IAC7C,IAAI;MAAEG,QAAQ;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGH,SAAS;IAE1CC,QAAQ,KAAK;MACXG,MAAM,EAAE;QACNC,IAAI,EAAEF,KAAK,CAACE,IAAI;QAChBC,OAAO,EAAE;MACX;IACF,CAAC;IAEDJ,KAAK,GAAGA,KAAK,CAACK,GAAG,CAAEC,IAAI,IAAK;MAC1B,MAAM;QAAEC,QAAQ,EAAEC;MAAQ,CAAC,GAAGF,IAAI;MAClC,MAAMG,SAAS,GAAG;QAAE,GAAGH,IAAI;QAAEE;MAAQ,CAAoB;MAEzD,IAAI,MAAM,IAAIX,OAAO,IAAIA,OAAO,CAACa,IAAI,EAAE;QACrCD,SAAS,CAACR,KAAK,KAAK,CAAC,CAAC;QACtBQ,SAAS,CAACR,KAAK,CAACG,OAAO,GAAG,gBAAgB;MAC5C;MAEA,OAAOK,SAAS;IAClB,CAAC,CAAC;IAEF,OAAO;MACL,GAAGX,SAAS;MACZC,QAAQ;MACRC;IACF,CAAC;EACH;;EAEA;AACF;AACA;EACEW,oBAAoBA,CAAA,EAA6B;IAC/C,OAAOjB,qBAAqB,CAACiB,oBAAoB,CAAC,CAAC;EACrD;;EAEA;AACF;AACA;EACE,OAAOA,oBAAoBA,CAAA,EAA6B;IACtD,OAAO;MACLC,UAAU,EAAE,CACV;QAAEC,IAAI,EAAE,gBAAgB;QAAEC,QAAQ,EAAErB,eAAe,CAACsB;MAAe,CAAC,CACrE;MACDC,sBAAsB,EAAE;IAC1B,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { type TelephoneNumberFieldComponent } from '@defra/forms-model';
|
|
2
2
|
import { type StringSchema } from 'joi';
|
|
3
3
|
import { FormComponent } from '../../../../server/plugins/engine/components/FormComponent.js';
|
|
4
|
-
import { type
|
|
4
|
+
import { type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
5
|
+
import { type ErrorMessageTemplateList } from '../../../../server/plugins/engine/types.js';
|
|
5
6
|
export declare class TelephoneNumberField extends FormComponent {
|
|
6
7
|
options: TelephoneNumberFieldComponent['options'];
|
|
7
8
|
formSchema: StringSchema;
|
|
8
9
|
stateSchema: StringSchema;
|
|
9
10
|
constructor(def: TelephoneNumberFieldComponent, props: ConstructorParameters<typeof FormComponent>[1]);
|
|
10
|
-
getViewModel(
|
|
11
|
+
getViewModel(context: RenderContext): {
|
|
11
12
|
type: string;
|
|
12
13
|
label: {
|
|
13
14
|
text: string;
|
|
@@ -19,11 +20,11 @@ export declare class TelephoneNumberField extends FormComponent {
|
|
|
19
20
|
id?: string;
|
|
20
21
|
text: string;
|
|
21
22
|
};
|
|
22
|
-
prefix?: import("
|
|
23
|
-
suffix?: import("
|
|
23
|
+
prefix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
24
|
+
suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
24
25
|
classes?: string;
|
|
25
26
|
condition?: string;
|
|
26
|
-
errors?: FormSubmissionError[];
|
|
27
|
+
errors?: import("../../../../server/plugins/engine/types.js").FormSubmissionError[];
|
|
27
28
|
errorMessage?: {
|
|
28
29
|
text: string;
|
|
29
30
|
};
|
|
@@ -36,21 +37,21 @@ export declare class TelephoneNumberField extends FormComponent {
|
|
|
36
37
|
accept?: string;
|
|
37
38
|
inputmode?: string;
|
|
38
39
|
};
|
|
39
|
-
content?: import("
|
|
40
|
+
content?: import("../../../../server/plugins/engine/components/types.js").Content | import("../../../../server/plugins/engine/components/types.js").Content[] | string;
|
|
40
41
|
maxlength?: number;
|
|
41
42
|
maxwords?: number;
|
|
42
43
|
rows?: number;
|
|
43
|
-
items?: import("
|
|
44
|
+
items?: import("../../../../server/plugins/engine/components/types.js").ListItem[] | import("../../../../server/plugins/engine/components/types.js").DateInputItem[];
|
|
44
45
|
fieldset?: {
|
|
45
46
|
attributes?: string | Record<string, string>;
|
|
46
|
-
legend?: import("
|
|
47
|
+
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
47
48
|
};
|
|
48
49
|
formGroup?: {
|
|
49
50
|
classes?: string;
|
|
50
51
|
attributes?: string | Record<string, string>;
|
|
51
52
|
};
|
|
52
53
|
showFieldsetError?: boolean;
|
|
53
|
-
components?: import("
|
|
54
|
+
components?: import("../../../../server/plugins/engine/components/types.js").ComponentViewModel[];
|
|
54
55
|
upload?: {
|
|
55
56
|
count: number;
|
|
56
57
|
summaryList: import("../../../../server/plugins/engine/types.js").SummaryList;
|
|
@@ -33,8 +33,8 @@ export class TelephoneNumberField extends FormComponent {
|
|
|
33
33
|
this.stateSchema = formSchema.default(null).allow(null);
|
|
34
34
|
this.options = options;
|
|
35
35
|
}
|
|
36
|
-
getViewModel(
|
|
37
|
-
const viewModel = super.getViewModel(
|
|
36
|
+
getViewModel(context) {
|
|
37
|
+
const viewModel = super.getViewModel(context);
|
|
38
38
|
const {
|
|
39
39
|
attributes
|
|
40
40
|
} = viewModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelephoneNumberField.js","names":["FormComponent","addClassOptionIfNone","INVALID_ERROR_CODE","joi","messageTemplate","TelephoneNumberField","constructor","def","props","options","format","formSchema","string","trim","phoneNumber","label","required","allow","customValidationMessage","message","messages","customValidationMessages","default","stateSchema","getViewModel","
|
|
1
|
+
{"version":3,"file":"TelephoneNumberField.js","names":["FormComponent","addClassOptionIfNone","INVALID_ERROR_CODE","joi","messageTemplate","TelephoneNumberField","constructor","def","props","options","format","formSchema","string","trim","phoneNumber","label","required","allow","customValidationMessage","message","messages","customValidationMessages","default","stateSchema","getViewModel","context","viewModel","attributes","autocomplete","type","getAllPossibleErrors","baseErrors","template","advancedSettingsErrors"],"sources":["../../../../../src/server/plugins/engine/components/TelephoneNumberField.ts"],"sourcesContent":["import { type TelephoneNumberFieldComponent } from '@defra/forms-model'\nimport { type StringSchema } from 'joi'\n\nimport { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'\nimport {\n INVALID_ERROR_CODE,\n joi\n} from '~/src/server/plugins/engine/components/helpers/telephone.js'\nimport { type RenderContext } from '~/src/server/plugins/engine/components/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'\n\nexport class TelephoneNumberField extends FormComponent {\n declare options: TelephoneNumberFieldComponent['options']\n declare formSchema: StringSchema\n declare stateSchema: StringSchema\n\n constructor(\n def: TelephoneNumberFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { options } = def\n const { format } = options\n\n let formSchema = joi\n .string()\n .trim()\n .phoneNumber({ format })\n .label(this.label)\n .required()\n\n if (options.required === false) {\n formSchema = formSchema.allow('')\n }\n\n if (options.customValidationMessage) {\n const message = options.customValidationMessage\n\n formSchema = formSchema.messages({\n 'any.required': message,\n 'string.empty': message,\n 'string.pattern.base': message,\n [INVALID_ERROR_CODE]: message\n })\n } else if (options.customValidationMessages) {\n formSchema = formSchema.messages(options.customValidationMessages)\n }\n\n addClassOptionIfNone(options, 'govuk-input--width-20')\n\n this.formSchema = formSchema.default('')\n this.stateSchema = formSchema.default(null).allow(null)\n this.options = options\n }\n\n getViewModel(context: RenderContext) {\n const viewModel = super.getViewModel(context)\n const { attributes } = viewModel\n\n attributes.autocomplete = 'tel'\n\n return {\n ...viewModel,\n type: 'tel'\n }\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return TelephoneNumberField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: messageTemplate.required },\n { type: 'format', template: messageTemplate.format }\n ],\n advancedSettingsErrors: []\n }\n }\n}\n"],"mappings":"AAGA,SAASA,aAAa;AACtB,SAASC,oBAAoB;AAC7B,SACEC,kBAAkB,EAClBC,GAAG;AAGL,SAASC,eAAe;AAGxB,OAAO,MAAMC,oBAAoB,SAASL,aAAa,CAAC;EAKtDM,WAAWA,CACTC,GAAkC,EAClCC,KAAqD,EACrD;IACA,KAAK,CAACD,GAAG,EAAEC,KAAK,CAAC;IAEjB,MAAM;MAAEC;IAAQ,CAAC,GAAGF,GAAG;IACvB,MAAM;MAAEG;IAAO,CAAC,GAAGD,OAAO;IAE1B,IAAIE,UAAU,GAAGR,GAAG,CACjBS,MAAM,CAAC,CAAC,CACRC,IAAI,CAAC,CAAC,CACNC,WAAW,CAAC;MAAEJ;IAAO,CAAC,CAAC,CACvBK,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC,CACjBC,QAAQ,CAAC,CAAC;IAEb,IAAIP,OAAO,CAACO,QAAQ,KAAK,KAAK,EAAE;MAC9BL,UAAU,GAAGA,UAAU,CAACM,KAAK,CAAC,EAAE,CAAC;IACnC;IAEA,IAAIR,OAAO,CAACS,uBAAuB,EAAE;MACnC,MAAMC,OAAO,GAAGV,OAAO,CAACS,uBAAuB;MAE/CP,UAAU,GAAGA,UAAU,CAACS,QAAQ,CAAC;QAC/B,cAAc,EAAED,OAAO;QACvB,cAAc,EAAEA,OAAO;QACvB,qBAAqB,EAAEA,OAAO;QAC9B,CAACjB,kBAAkB,GAAGiB;MACxB,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIV,OAAO,CAACY,wBAAwB,EAAE;MAC3CV,UAAU,GAAGA,UAAU,CAACS,QAAQ,CAACX,OAAO,CAACY,wBAAwB,CAAC;IACpE;IAEApB,oBAAoB,CAACQ,OAAO,EAAE,uBAAuB,CAAC;IAEtD,IAAI,CAACE,UAAU,GAAGA,UAAU,CAACW,OAAO,CAAC,EAAE,CAAC;IACxC,IAAI,CAACC,WAAW,GAAGZ,UAAU,CAACW,OAAO,CAAC,IAAI,CAAC,CAACL,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,CAACR,OAAO,GAAGA,OAAO;EACxB;EAEAe,YAAYA,CAACC,OAAsB,EAAE;IACnC,MAAMC,SAAS,GAAG,KAAK,CAACF,YAAY,CAACC,OAAO,CAAC;IAC7C,MAAM;MAAEE;IAAW,CAAC,GAAGD,SAAS;IAEhCC,UAAU,CAACC,YAAY,GAAG,KAAK;IAE/B,OAAO;MACL,GAAGF,SAAS;MACZG,IAAI,EAAE;IACR,CAAC;EACH;;EAEA;AACF;AACA;EACEC,oBAAoBA,CAAA,EAA6B;IAC/C,OAAOzB,oBAAoB,CAACyB,oBAAoB,CAAC,CAAC;EACpD;;EAEA;AACF;AACA;EACE,OAAOA,oBAAoBA,CAAA,EAA6B;IACtD,OAAO;MACLC,UAAU,EAAE,CACV;QAAEF,IAAI,EAAE,UAAU;QAAEG,QAAQ,EAAE5B,eAAe,CAACY;MAAS,CAAC,EACxD;QAAEa,IAAI,EAAE,QAAQ;QAAEG,QAAQ,EAAE5B,eAAe,CAACM;MAAO,CAAC,CACrD;MACDuB,sBAAsB,EAAE;IAC1B,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -2,6 +2,8 @@ import { type UkAddressFieldComponent } from '@defra/forms-model';
|
|
|
2
2
|
import { type ObjectSchema } from 'joi';
|
|
3
3
|
import { ComponentCollection } from '../../../../server/plugins/engine/components/ComponentCollection.js';
|
|
4
4
|
import { FormComponent } from '../../../../server/plugins/engine/components/FormComponent.js';
|
|
5
|
+
import { type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
6
|
+
import { type Translator } from '../../../../server/plugins/engine/i18n/types.js';
|
|
5
7
|
import { type FormRequestPayload, type FormResponseToolkit } from '../../../../server/plugins/engine/types/index.js';
|
|
6
8
|
import { type ErrorMessageTemplateList, type FormPayload, type FormState, type FormStateValue, type FormSubmissionError, type FormSubmissionState, type PostcodeLookupExternalArgs } from '../../../../server/plugins/engine/types.js';
|
|
7
9
|
export declare class UkAddressField extends FormComponent {
|
|
@@ -13,19 +15,19 @@ export declare class UkAddressField extends FormComponent {
|
|
|
13
15
|
getFormValueFromState(state: FormSubmissionState): UkAddressState | undefined;
|
|
14
16
|
getContextValueFromFormValue(value: UkAddressState | undefined): string[] | null;
|
|
15
17
|
getContextValueFromState(state: FormSubmissionState): string[] | null;
|
|
16
|
-
getDisplayStringFromFormValue(value: UkAddressState | undefined): string;
|
|
17
|
-
getDisplayStringFromState(state: FormSubmissionState): string;
|
|
18
|
+
getDisplayStringFromFormValue(value: UkAddressState | undefined, _translator: Translator): string;
|
|
19
|
+
getDisplayStringFromState(state: FormSubmissionState, translator: Translator): string;
|
|
18
20
|
/**
|
|
19
21
|
* Returns one error per child field
|
|
20
22
|
*/
|
|
21
|
-
getViewErrors(errors?: FormSubmissionError[]): FormSubmissionError[] | undefined;
|
|
22
|
-
getViewModel(
|
|
23
|
+
getViewErrors(translator: Translator, errors?: FormSubmissionError[]): FormSubmissionError[] | undefined;
|
|
24
|
+
getViewModel(context: RenderContext): {
|
|
23
25
|
value: string | undefined;
|
|
24
26
|
fieldset: {
|
|
25
27
|
attributes?: string | Record<string, string>;
|
|
26
|
-
legend?: import("../../../../server/plugins/engine/types
|
|
28
|
+
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
27
29
|
};
|
|
28
|
-
components: import("../../../../server/plugins/engine/types
|
|
30
|
+
components: import("../../../../server/plugins/engine/components/types.js").ComponentViewModel[];
|
|
29
31
|
usePostcodeLookup: boolean;
|
|
30
32
|
label: {
|
|
31
33
|
text: string;
|
|
@@ -37,8 +39,8 @@ export declare class UkAddressField extends FormComponent {
|
|
|
37
39
|
id?: string;
|
|
38
40
|
text: string;
|
|
39
41
|
};
|
|
40
|
-
prefix?: import("../../../../server/plugins/engine/types
|
|
41
|
-
suffix?: import("../../../../server/plugins/engine/types
|
|
42
|
+
prefix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
43
|
+
suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
42
44
|
classes?: string;
|
|
43
45
|
condition?: string;
|
|
44
46
|
errors?: FormSubmissionError[];
|
|
@@ -54,11 +56,11 @@ export declare class UkAddressField extends FormComponent {
|
|
|
54
56
|
accept?: string;
|
|
55
57
|
inputmode?: string;
|
|
56
58
|
};
|
|
57
|
-
content?: import("../../../../server/plugins/engine/types
|
|
59
|
+
content?: import("../../../../server/plugins/engine/components/types.js").Content | import("../../../../server/plugins/engine/components/types.js").Content[] | string;
|
|
58
60
|
maxlength?: number;
|
|
59
61
|
maxwords?: number;
|
|
60
62
|
rows?: number;
|
|
61
|
-
items?: import("../../../../server/plugins/engine/types
|
|
63
|
+
items?: import("../../../../server/plugins/engine/components/types.js").ListItem[] | import("../../../../server/plugins/engine/components/types.js").DateInputItem[];
|
|
62
64
|
formGroup?: {
|
|
63
65
|
classes?: string;
|
|
64
66
|
attributes?: string | Record<string, string>;
|
|
@@ -4,6 +4,7 @@ import { ComponentCollection } from "./ComponentCollection.js";
|
|
|
4
4
|
import { FormComponent, isFormState } from "./FormComponent.js";
|
|
5
5
|
import { TextField } from "./TextField.js";
|
|
6
6
|
import { dispatch } from "../../postcode-lookup/routes/index.js";
|
|
7
|
+
import { resolveLanguage } from "../../../utils/utils.js";
|
|
7
8
|
export class UkAddressField extends FormComponent {
|
|
8
9
|
constructor(def, props) {
|
|
9
10
|
super(def, props);
|
|
@@ -17,7 +18,7 @@ export class UkAddressField extends FormComponent {
|
|
|
17
18
|
this.collection = new ComponentCollection([{
|
|
18
19
|
type: ComponentType.TextField,
|
|
19
20
|
name: `${name}__uprn`,
|
|
20
|
-
title: '
|
|
21
|
+
title: 'components.addressField.uprn',
|
|
21
22
|
schema: {},
|
|
22
23
|
options: {
|
|
23
24
|
required: false,
|
|
@@ -26,7 +27,7 @@ export class UkAddressField extends FormComponent {
|
|
|
26
27
|
}, {
|
|
27
28
|
type: ComponentType.TextField,
|
|
28
29
|
name: `${name}__addressLine1`,
|
|
29
|
-
title: '
|
|
30
|
+
title: 'components.addressField.line1',
|
|
30
31
|
schema: {
|
|
31
32
|
max: 100
|
|
32
33
|
},
|
|
@@ -38,7 +39,7 @@ export class UkAddressField extends FormComponent {
|
|
|
38
39
|
}, {
|
|
39
40
|
type: ComponentType.TextField,
|
|
40
41
|
name: `${name}__addressLine2`,
|
|
41
|
-
title: '
|
|
42
|
+
title: 'components.addressField.line2',
|
|
42
43
|
schema: {
|
|
43
44
|
max: 100
|
|
44
45
|
},
|
|
@@ -50,7 +51,7 @@ export class UkAddressField extends FormComponent {
|
|
|
50
51
|
}, {
|
|
51
52
|
type: ComponentType.TextField,
|
|
52
53
|
name: `${name}__town`,
|
|
53
|
-
title: '
|
|
54
|
+
title: 'components.addressField.town',
|
|
54
55
|
schema: {
|
|
55
56
|
max: 100
|
|
56
57
|
},
|
|
@@ -63,7 +64,7 @@ export class UkAddressField extends FormComponent {
|
|
|
63
64
|
}, {
|
|
64
65
|
type: ComponentType.TextField,
|
|
65
66
|
name: `${name}__county`,
|
|
66
|
-
title: '
|
|
67
|
+
title: 'components.addressField.county',
|
|
67
68
|
schema: {
|
|
68
69
|
max: 100
|
|
69
70
|
},
|
|
@@ -75,7 +76,7 @@ export class UkAddressField extends FormComponent {
|
|
|
75
76
|
}, {
|
|
76
77
|
type: ComponentType.TextField,
|
|
77
78
|
name: `${name}__postcode`,
|
|
78
|
-
title: '
|
|
79
|
+
title: 'components.addressField.postcode',
|
|
79
80
|
schema: {
|
|
80
81
|
regex: '^[a-zA-Z]{1,2}\\d[a-zA-Z\\d]?\\s?\\d[a-zA-Z]{2}$'
|
|
81
82
|
},
|
|
@@ -107,19 +108,22 @@ export class UkAddressField extends FormComponent {
|
|
|
107
108
|
const value = this.getFormValueFromState(state);
|
|
108
109
|
return this.getContextValueFromFormValue(value);
|
|
109
110
|
}
|
|
110
|
-
getDisplayStringFromFormValue(value) {
|
|
111
|
+
getDisplayStringFromFormValue(value, _translator) {
|
|
111
112
|
return this.getContextValueFromFormValue(value)?.join(', ') ?? '';
|
|
112
113
|
}
|
|
113
|
-
getDisplayStringFromState(state) {
|
|
114
|
+
getDisplayStringFromState(state, translator) {
|
|
114
115
|
const value = this.getFormValueFromState(state);
|
|
115
|
-
return this.getDisplayStringFromFormValue(value);
|
|
116
|
+
return this.getDisplayStringFromFormValue(value, translator);
|
|
116
117
|
}
|
|
117
118
|
|
|
118
119
|
/**
|
|
119
120
|
* Returns one error per child field
|
|
120
121
|
*/
|
|
121
|
-
getViewErrors(errors) {
|
|
122
|
-
const
|
|
122
|
+
getViewErrors(translator, errors) {
|
|
123
|
+
const {
|
|
124
|
+
t
|
|
125
|
+
} = translator;
|
|
126
|
+
const uniqueErrors = this.getErrors(translator, errors)?.filter((error, index, self) => index === self.findIndex(err => err.name === error.name));
|
|
123
127
|
|
|
124
128
|
// When using postcode lookup, the address fields are hidden
|
|
125
129
|
// so we replace any individual validation messages with a single one
|
|
@@ -132,18 +136,24 @@ export class UkAddressField extends FormComponent {
|
|
|
132
136
|
name,
|
|
133
137
|
path: [name],
|
|
134
138
|
href: `#${name}`,
|
|
135
|
-
text:
|
|
139
|
+
text: t('components.addressField.enterAddress', {
|
|
140
|
+
shortDescription: lowerFirst(label)
|
|
141
|
+
})
|
|
136
142
|
}];
|
|
137
143
|
}
|
|
138
144
|
return uniqueErrors;
|
|
139
145
|
}
|
|
140
|
-
getViewModel(
|
|
146
|
+
getViewModel(context) {
|
|
147
|
+
const {
|
|
148
|
+
payload,
|
|
149
|
+
translator
|
|
150
|
+
} = context;
|
|
141
151
|
const {
|
|
142
152
|
collection,
|
|
143
153
|
name,
|
|
144
154
|
options
|
|
145
155
|
} = this;
|
|
146
|
-
const viewModel = super.getViewModel(
|
|
156
|
+
const viewModel = super.getViewModel(context);
|
|
147
157
|
let {
|
|
148
158
|
fieldset,
|
|
149
159
|
hint,
|
|
@@ -165,7 +175,7 @@ export class UkAddressField extends FormComponent {
|
|
|
165
175
|
'aria-describedby': hint.id
|
|
166
176
|
};
|
|
167
177
|
}
|
|
168
|
-
const components = collection.getViewModel(
|
|
178
|
+
const components = collection.getViewModel(context);
|
|
169
179
|
|
|
170
180
|
// Hide UPRN
|
|
171
181
|
const uprn = components.at(0);
|
|
@@ -178,7 +188,7 @@ export class UkAddressField extends FormComponent {
|
|
|
178
188
|
|
|
179
189
|
// Postcode lookup
|
|
180
190
|
const usePostcodeLookup = this.shouldUsePostcodeLookup();
|
|
181
|
-
const value = usePostcodeLookup ? this.getDisplayStringFromState(payload) : undefined;
|
|
191
|
+
const value = usePostcodeLookup ? this.getDisplayStringFromState(payload, translator) : undefined;
|
|
182
192
|
return {
|
|
183
193
|
...viewModel,
|
|
184
194
|
value,
|
|
@@ -232,13 +242,15 @@ export class UkAddressField extends FormComponent {
|
|
|
232
242
|
controller,
|
|
233
243
|
component
|
|
234
244
|
} = args;
|
|
245
|
+
const language = resolveLanguage(request);
|
|
235
246
|
return dispatch(request, h, {
|
|
236
247
|
formName: controller.model.name,
|
|
237
248
|
componentName: component.name,
|
|
238
249
|
componentHint: component.hint,
|
|
239
250
|
componentTitle: component.title || controller.title,
|
|
240
251
|
step: args.actionArgs.step,
|
|
241
|
-
sourceUrl: args.sourceUrl
|
|
252
|
+
sourceUrl: args.sourceUrl,
|
|
253
|
+
language
|
|
242
254
|
});
|
|
243
255
|
}
|
|
244
256
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UkAddressField.js","names":["ComponentType","lowerFirst","ComponentCollection","FormComponent","isFormState","TextField","dispatch","UkAddressField","constructor","def","props","name","options","isRequired","required","hideOptional","optionalText","hideTitle","collection","type","title","schema","classes","max","autocomplete","regex","parent","formSchema","stateSchema","getFormValueFromState","state","value","isState","undefined","getContextValueFromFormValue","Object","entries","filter","key","Boolean","map","getContextValueFromState","getDisplayStringFromFormValue","join","getDisplayStringFromState","getViewErrors","errors","uniqueErrors","getErrors","error","index","self","findIndex","err","shouldUsePostcodeLookup","length","label","path","href","text","getViewModel","payload","viewModel","fieldset","hint","legend","id","attributes","components","uprn","at","Error","model","formGroup","usePostcodeLookup","isUkAddress","getAllPossibleErrors","ordnanceSurveyApiKey","baseErrors","template","advancedSettingsErrors","isText","addressLine1","town","postcode","dispatcher","request","h","args","controller","component","formName","componentName","componentHint","componentTitle","step","actionArgs","sourceUrl"],"sources":["../../../../../src/server/plugins/engine/components/UkAddressField.ts"],"sourcesContent":["import { ComponentType, type UkAddressFieldComponent } from '@defra/forms-model'\nimport { type ObjectSchema } from 'joi'\nimport lowerFirst from 'lodash/lowerFirst.js'\n\nimport { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'\nimport {\n FormComponent,\n isFormState\n} from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { TextField } from '~/src/server/plugins/engine/components/TextField.js'\nimport { type QuestionPageController } from '~/src/server/plugins/engine/pageControllers/QuestionPageController.js'\nimport {\n type FormRequestPayload,\n type FormResponseToolkit\n} from '~/src/server/plugins/engine/types/index.js'\nimport {\n type ErrorMessageTemplateList,\n type FormPayload,\n type FormState,\n type FormStateValue,\n type FormSubmissionError,\n type FormSubmissionState,\n type PostcodeLookupExternalArgs\n} from '~/src/server/plugins/engine/types.js'\nimport { dispatch } from '~/src/server/plugins/postcode-lookup/routes/index.js'\n\nexport class UkAddressField extends FormComponent {\n declare options: UkAddressFieldComponent['options']\n declare formSchema: ObjectSchema<FormPayload>\n declare stateSchema: ObjectSchema<FormState>\n declare collection: ComponentCollection\n\n constructor(\n def: UkAddressFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { name, options } = def\n\n const isRequired = options.required !== false\n const hideOptional = !!options.optionalText\n const hideTitle = !!options.hideTitle\n\n this.collection = new ComponentCollection(\n [\n {\n type: ComponentType.TextField,\n name: `${name}__uprn`,\n title: 'UPRN',\n schema: {},\n options: {\n required: false,\n classes: 'hidden'\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__addressLine1`,\n title: 'Address line 1',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-line1',\n required: isRequired,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__addressLine2`,\n title: 'Address line 2',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-line2',\n required: false,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__town`,\n title: 'Town or city',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-level2',\n classes: 'govuk-!-width-two-thirds',\n required: isRequired,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__county`,\n title: 'County',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-level1',\n required: false,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__postcode`,\n title: 'Postcode',\n schema: {\n regex: '^[a-zA-Z]{1,2}\\\\d[a-zA-Z\\\\d]?\\\\s?\\\\d[a-zA-Z]{2}$'\n },\n options: {\n autocomplete: 'postal-code',\n classes: 'govuk-input--width-10',\n required: isRequired,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n }\n ],\n { ...props, parent: this }\n )\n\n this.options = options\n this.formSchema = this.collection.formSchema\n this.stateSchema = this.collection.stateSchema\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const value = super.getFormValueFromState(state)\n return this.isState(value) ? value : undefined\n }\n\n getContextValueFromFormValue(value: UkAddressState | undefined) {\n if (!value) {\n return null\n }\n\n return Object.entries(value)\n .filter(([key, value]) => key !== 'uprn' && Boolean(value))\n .map(([, value]) => value)\n }\n\n getContextValueFromState(state: FormSubmissionState) {\n const value = this.getFormValueFromState(state)\n\n return this.getContextValueFromFormValue(value)\n }\n\n getDisplayStringFromFormValue(value: UkAddressState | undefined): string {\n return this.getContextValueFromFormValue(value)?.join(', ') ?? ''\n }\n\n getDisplayStringFromState(state: FormSubmissionState) {\n const value = this.getFormValueFromState(state)\n\n return this.getDisplayStringFromFormValue(value)\n }\n\n /**\n * Returns one error per child field\n */\n getViewErrors(\n errors?: FormSubmissionError[]\n ): FormSubmissionError[] | undefined {\n const uniqueErrors = this.getErrors(errors)?.filter(\n (error, index, self) =>\n index === self.findIndex((err) => err.name === error.name)\n )\n\n // When using postcode lookup, the address fields are hidden\n // so we replace any individual validation messages with a single one\n if (this.shouldUsePostcodeLookup() && uniqueErrors?.length) {\n const { name, label } = this\n\n return [\n {\n name,\n path: [name],\n href: `#${name}`,\n text: `Enter ${lowerFirst(label)}`\n }\n ]\n }\n\n return uniqueErrors\n }\n\n getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {\n const { collection, name, options } = this\n\n const viewModel = super.getViewModel(payload, errors)\n let { fieldset, hint, label } = viewModel\n\n fieldset ??= {\n legend: {\n text: label.text,\n\n /**\n * For screen readers, only hide legend visually. This can be overridden\n * by single component {@link QuestionPageController | `showTitle` handling}\n */\n classes: options.hideTitle\n ? 'govuk-visually-hidden'\n : 'govuk-fieldset__legend--m'\n }\n }\n\n if (hint) {\n hint.id ??= `${name}-hint`\n fieldset.attributes ??= {\n 'aria-describedby': hint.id\n }\n }\n\n const components = collection.getViewModel(payload, errors)\n\n // Hide UPRN\n const uprn = components.at(0)\n\n if (!uprn) {\n throw new Error('No UPRN')\n }\n\n uprn.model.formGroup = { classes: 'app-hidden' }\n\n // Postcode lookup\n const usePostcodeLookup = this.shouldUsePostcodeLookup()\n\n const value = usePostcodeLookup\n ? this.getDisplayStringFromState(payload)\n : undefined\n\n return {\n ...viewModel,\n value,\n fieldset,\n components,\n usePostcodeLookup\n }\n }\n\n isState(value?: FormStateValue | FormState): value is UkAddressState {\n return UkAddressField.isUkAddress(value)\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return UkAddressField.getAllPossibleErrors()\n }\n\n private shouldUsePostcodeLookup() {\n return !!(this.options.usePostcodeLookup && this.model.ordnanceSurveyApiKey)\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: 'Enter address line 1' },\n { type: 'required', template: 'Enter town or city' },\n { type: 'required', template: 'Enter postcode' },\n { type: 'format', template: 'Enter valid postcode' }\n ],\n advancedSettingsErrors: []\n }\n }\n\n static isUkAddress(\n value?: FormStateValue | FormState\n ): value is UkAddressState {\n return (\n isFormState(value) &&\n TextField.isText(value.addressLine1) &&\n TextField.isText(value.town) &&\n TextField.isText(value.postcode)\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n static async dispatcher(\n request: FormRequestPayload,\n h: FormResponseToolkit,\n args: PostcodeLookupExternalArgs\n ) {\n const { controller, component } = args\n\n return dispatch(request, h, {\n formName: controller.model.name,\n componentName: component.name,\n componentHint: component.hint,\n componentTitle: component.title || controller.title,\n step: args.actionArgs.step,\n sourceUrl: args.sourceUrl\n })\n }\n}\n\nexport interface UkAddressState extends Record<string, string> {\n uprn: string\n addressLine1: string\n addressLine2: string\n town: string\n county: string\n postcode: string\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"UkAddressField.js","names":["ComponentType","lowerFirst","ComponentCollection","FormComponent","isFormState","TextField","dispatch","resolveLanguage","UkAddressField","constructor","def","props","name","options","isRequired","required","hideOptional","optionalText","hideTitle","collection","type","title","schema","classes","max","autocomplete","regex","parent","formSchema","stateSchema","getFormValueFromState","state","value","isState","undefined","getContextValueFromFormValue","Object","entries","filter","key","Boolean","map","getContextValueFromState","getDisplayStringFromFormValue","_translator","join","getDisplayStringFromState","translator","getViewErrors","errors","t","uniqueErrors","getErrors","error","index","self","findIndex","err","shouldUsePostcodeLookup","length","label","path","href","text","shortDescription","getViewModel","context","payload","viewModel","fieldset","hint","legend","id","attributes","components","uprn","at","Error","model","formGroup","usePostcodeLookup","isUkAddress","getAllPossibleErrors","ordnanceSurveyApiKey","baseErrors","template","advancedSettingsErrors","isText","addressLine1","town","postcode","dispatcher","request","h","args","controller","component","language","formName","componentName","componentHint","componentTitle","step","actionArgs","sourceUrl"],"sources":["../../../../../src/server/plugins/engine/components/UkAddressField.ts"],"sourcesContent":["import { ComponentType, type UkAddressFieldComponent } from '@defra/forms-model'\nimport { type ObjectSchema } from 'joi'\nimport lowerFirst from 'lodash/lowerFirst.js'\n\nimport { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'\nimport {\n FormComponent,\n isFormState\n} from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { TextField } from '~/src/server/plugins/engine/components/TextField.js'\nimport { type RenderContext } from '~/src/server/plugins/engine/components/types.js'\nimport { type Translator } from '~/src/server/plugins/engine/i18n/types.js'\nimport {\n type FormRequestPayload,\n type FormResponseToolkit\n} from '~/src/server/plugins/engine/types/index.js'\nimport {\n type ErrorMessageTemplateList,\n type FormPayload,\n type FormState,\n type FormStateValue,\n type FormSubmissionError,\n type FormSubmissionState,\n type PostcodeLookupExternalArgs\n} from '~/src/server/plugins/engine/types.js'\nimport { dispatch } from '~/src/server/plugins/postcode-lookup/routes/index.js'\nimport { resolveLanguage } from '~/src/server/utils/utils.js'\n\nexport class UkAddressField extends FormComponent {\n declare options: UkAddressFieldComponent['options']\n declare formSchema: ObjectSchema<FormPayload>\n declare stateSchema: ObjectSchema<FormState>\n declare collection: ComponentCollection\n\n constructor(\n def: UkAddressFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { name, options } = def\n\n const isRequired = options.required !== false\n const hideOptional = !!options.optionalText\n const hideTitle = !!options.hideTitle\n this.collection = new ComponentCollection(\n [\n {\n type: ComponentType.TextField,\n name: `${name}__uprn`,\n title: 'components.addressField.uprn',\n schema: {},\n options: {\n required: false,\n classes: 'hidden'\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__addressLine1`,\n title: 'components.addressField.line1',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-line1',\n required: isRequired,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__addressLine2`,\n title: 'components.addressField.line2',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-line2',\n required: false,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__town`,\n title: 'components.addressField.town',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-level2',\n classes: 'govuk-!-width-two-thirds',\n required: isRequired,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__county`,\n title: 'components.addressField.county',\n schema: { max: 100 },\n options: {\n autocomplete: 'address-level1',\n required: false,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n },\n {\n type: ComponentType.TextField,\n name: `${name}__postcode`,\n title: 'components.addressField.postcode',\n schema: {\n regex: '^[a-zA-Z]{1,2}\\\\d[a-zA-Z\\\\d]?\\\\s?\\\\d[a-zA-Z]{2}$'\n },\n options: {\n autocomplete: 'postal-code',\n classes: 'govuk-input--width-10',\n required: isRequired,\n optionalText: !isRequired && (hideOptional || !hideTitle)\n }\n }\n ],\n { ...props, parent: this }\n )\n\n this.options = options\n this.formSchema = this.collection.formSchema\n this.stateSchema = this.collection.stateSchema\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const value = super.getFormValueFromState(state)\n return this.isState(value) ? value : undefined\n }\n\n getContextValueFromFormValue(value: UkAddressState | undefined) {\n if (!value) {\n return null\n }\n\n return Object.entries(value)\n .filter(([key, value]) => key !== 'uprn' && Boolean(value))\n .map(([, value]) => value)\n }\n\n getContextValueFromState(state: FormSubmissionState) {\n const value = this.getFormValueFromState(state)\n\n return this.getContextValueFromFormValue(value)\n }\n\n getDisplayStringFromFormValue(\n value: UkAddressState | undefined,\n _translator: Translator\n ): string {\n return this.getContextValueFromFormValue(value)?.join(', ') ?? ''\n }\n\n getDisplayStringFromState(\n state: FormSubmissionState,\n translator: Translator\n ) {\n const value = this.getFormValueFromState(state)\n\n return this.getDisplayStringFromFormValue(value, translator)\n }\n\n /**\n * Returns one error per child field\n */\n getViewErrors(\n translator: Translator,\n errors?: FormSubmissionError[]\n ): FormSubmissionError[] | undefined {\n const { t } = translator\n\n const uniqueErrors = this.getErrors(translator, errors)?.filter(\n (error, index, self) =>\n index === self.findIndex((err) => err.name === error.name)\n )\n\n // When using postcode lookup, the address fields are hidden\n // so we replace any individual validation messages with a single one\n if (this.shouldUsePostcodeLookup() && uniqueErrors?.length) {\n const { name, label } = this\n\n return [\n {\n name,\n path: [name],\n href: `#${name}`,\n text: t('components.addressField.enterAddress', {\n shortDescription: lowerFirst(label)\n })\n }\n ]\n }\n\n return uniqueErrors\n }\n\n getViewModel(context: RenderContext) {\n const { payload, translator } = context\n const { collection, name, options } = this\n\n const viewModel = super.getViewModel(context)\n let { fieldset, hint, label } = viewModel\n\n fieldset ??= {\n legend: {\n text: label.text,\n\n /**\n * For screen readers, only hide legend visually. This can be overridden\n * by single component {@link QuestionPageController | `showTitle` handling}\n */\n classes: options.hideTitle\n ? 'govuk-visually-hidden'\n : 'govuk-fieldset__legend--m'\n }\n }\n\n if (hint) {\n hint.id ??= `${name}-hint`\n fieldset.attributes ??= {\n 'aria-describedby': hint.id\n }\n }\n\n const components = collection.getViewModel(context)\n\n // Hide UPRN\n const uprn = components.at(0)\n\n if (!uprn) {\n throw new Error('No UPRN')\n }\n\n uprn.model.formGroup = { classes: 'app-hidden' }\n\n // Postcode lookup\n const usePostcodeLookup = this.shouldUsePostcodeLookup()\n\n const value = usePostcodeLookup\n ? this.getDisplayStringFromState(payload, translator)\n : undefined\n\n return {\n ...viewModel,\n value,\n fieldset,\n components,\n usePostcodeLookup\n }\n }\n\n isState(value?: FormStateValue | FormState): value is UkAddressState {\n return UkAddressField.isUkAddress(value)\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return UkAddressField.getAllPossibleErrors()\n }\n\n private shouldUsePostcodeLookup() {\n return !!(this.options.usePostcodeLookup && this.model.ordnanceSurveyApiKey)\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: 'Enter address line 1' },\n { type: 'required', template: 'Enter town or city' },\n { type: 'required', template: 'Enter postcode' },\n { type: 'format', template: 'Enter valid postcode' }\n ],\n advancedSettingsErrors: []\n }\n }\n\n static isUkAddress(\n value?: FormStateValue | FormState\n ): value is UkAddressState {\n return (\n isFormState(value) &&\n TextField.isText(value.addressLine1) &&\n TextField.isText(value.town) &&\n TextField.isText(value.postcode)\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n static async dispatcher(\n request: FormRequestPayload,\n h: FormResponseToolkit,\n args: PostcodeLookupExternalArgs\n ) {\n const { controller, component } = args\n const language = resolveLanguage(request)\n\n return dispatch(request, h, {\n formName: controller.model.name,\n componentName: component.name,\n componentHint: component.hint,\n componentTitle: component.title || controller.title,\n step: args.actionArgs.step,\n sourceUrl: args.sourceUrl,\n language\n })\n }\n}\n\nexport interface UkAddressState extends Record<string, string> {\n uprn: string\n addressLine1: string\n addressLine2: string\n town: string\n county: string\n postcode: string\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { type YesNoFieldComponent } from '@defra/forms-model';
|
|
2
|
+
import { type LanguageMessages } from 'joi';
|
|
2
3
|
import { SelectionControlField } from '../../../../server/plugins/engine/components/SelectionControlField.js';
|
|
4
|
+
import { type Translator } from '../../../../server/plugins/engine/i18n/types.js';
|
|
3
5
|
import { type ErrorMessageTemplateList } from '../../../../server/plugins/engine/types.js';
|
|
4
6
|
/**
|
|
5
7
|
* @description
|
|
@@ -8,6 +10,7 @@ import { type ErrorMessageTemplateList } from '../../../../server/plugins/engine
|
|
|
8
10
|
export declare class YesNoField extends SelectionControlField {
|
|
9
11
|
options: YesNoFieldComponent['options'];
|
|
10
12
|
constructor(def: YesNoFieldComponent, props: ConstructorParameters<typeof SelectionControlField>[1]);
|
|
13
|
+
getValidationMessagesOverride(translator: Translator): LanguageMessages;
|
|
11
14
|
/**
|
|
12
15
|
* For error preview page that shows all possible errors on a component
|
|
13
16
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SchemaVersion, yesNoListId, yesNoListName } from '@defra/forms-model';
|
|
2
2
|
import { SelectionControlField } from "./SelectionControlField.js";
|
|
3
3
|
import { addClassOptionIfNone } from "./helpers/index.js";
|
|
4
|
+
import { buildValidationMessages } from "../i18n/buildValidationMessages.js";
|
|
4
5
|
import { messageTemplate } from "../pageControllers/validationOptions.js";
|
|
5
6
|
import { convertToLanguageMessages } from "../../../utils/type-utils.js";
|
|
6
7
|
|
|
@@ -30,6 +31,14 @@ export class YesNoField extends SelectionControlField {
|
|
|
30
31
|
this.formSchema = formSchema;
|
|
31
32
|
this.options = options;
|
|
32
33
|
}
|
|
34
|
+
getValidationMessagesOverride(translator) {
|
|
35
|
+
const {
|
|
36
|
+
selectYesNoRequired
|
|
37
|
+
} = buildValidationMessages(translator.t);
|
|
38
|
+
return convertToLanguageMessages({
|
|
39
|
+
'any.required': selectYesNoRequired
|
|
40
|
+
});
|
|
41
|
+
}
|
|
33
42
|
|
|
34
43
|
/**
|
|
35
44
|
* For error preview page that shows all possible errors on a component
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YesNoField.js","names":["SchemaVersion","yesNoListId","yesNoListName","SelectionControlField","addClassOptionIfNone","messageTemplate","convertToLanguageMessages","YesNoField","constructor","def","props","list","model","schemaVersion","V1","options","formSchema","required","optional","messages","selectYesNoRequired","getAllPossibleErrors","baseErrors","type","template","advancedSettingsErrors"],"sources":["../../../../../src/server/plugins/engine/components/YesNoField.ts"],"sourcesContent":["import {\n SchemaVersion,\n yesNoListId,\n yesNoListName,\n type YesNoFieldComponent\n} from '@defra/forms-model'\n\nimport { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'\nimport { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'\nimport { convertToLanguageMessages } from '~/src/server/utils/type-utils.js'\n\n/**\n * @description\n * YesNoField is a radiosField with predefined values.\n */\nexport class YesNoField extends SelectionControlField {\n declare options: YesNoFieldComponent['options']\n\n constructor(\n def: YesNoFieldComponent,\n props: ConstructorParameters<typeof SelectionControlField>[1]\n ) {\n super(\n {\n ...def,\n list:\n props.model.schemaVersion === SchemaVersion.V1\n ? yesNoListName\n : yesNoListId\n },\n props\n )\n\n const { options } = def\n let { formSchema } = this\n\n addClassOptionIfNone(options, 'govuk-radios--inline')\n\n if (options.required === false) {\n formSchema = formSchema.optional()\n }\n\n formSchema = formSchema.messages(\n convertToLanguageMessages({\n 'any.required': messageTemplate.selectYesNoRequired\n })\n )\n\n this.formSchema = formSchema\n this.options = options\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return YesNoField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n {\n type: 'selectYesNoRequired',\n template: messageTemplate.selectYesNoRequired\n }\n ],\n advancedSettingsErrors: []\n }\n }\n}\n"],"mappings":"AAAA,SACEA,aAAa,EACbC,WAAW,EACXC,aAAa,QAER,oBAAoB;
|
|
1
|
+
{"version":3,"file":"YesNoField.js","names":["SchemaVersion","yesNoListId","yesNoListName","SelectionControlField","addClassOptionIfNone","buildValidationMessages","messageTemplate","convertToLanguageMessages","YesNoField","constructor","def","props","list","model","schemaVersion","V1","options","formSchema","required","optional","messages","selectYesNoRequired","getValidationMessagesOverride","translator","t","getAllPossibleErrors","baseErrors","type","template","advancedSettingsErrors"],"sources":["../../../../../src/server/plugins/engine/components/YesNoField.ts"],"sourcesContent":["import {\n SchemaVersion,\n yesNoListId,\n yesNoListName,\n type YesNoFieldComponent\n} from '@defra/forms-model'\nimport { type LanguageMessages } from 'joi'\n\nimport { SelectionControlField } from '~/src/server/plugins/engine/components/SelectionControlField.js'\nimport { addClassOptionIfNone } from '~/src/server/plugins/engine/components/helpers/index.js'\nimport { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'\nimport { type Translator } from '~/src/server/plugins/engine/i18n/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'\nimport { convertToLanguageMessages } from '~/src/server/utils/type-utils.js'\n\n/**\n * @description\n * YesNoField is a radiosField with predefined values.\n */\nexport class YesNoField extends SelectionControlField {\n declare options: YesNoFieldComponent['options']\n\n constructor(\n def: YesNoFieldComponent,\n props: ConstructorParameters<typeof SelectionControlField>[1]\n ) {\n super(\n {\n ...def,\n list:\n props.model.schemaVersion === SchemaVersion.V1\n ? yesNoListName\n : yesNoListId\n },\n props\n )\n\n const { options } = def\n let { formSchema } = this\n\n addClassOptionIfNone(options, 'govuk-radios--inline')\n\n if (options.required === false) {\n formSchema = formSchema.optional()\n }\n\n formSchema = formSchema.messages(\n convertToLanguageMessages({\n 'any.required': messageTemplate.selectYesNoRequired\n })\n )\n\n this.formSchema = formSchema\n this.options = options\n }\n\n getValidationMessagesOverride(translator: Translator): LanguageMessages {\n const { selectYesNoRequired } = buildValidationMessages(translator.t)\n return convertToLanguageMessages({\n 'any.required': selectYesNoRequired\n })\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return YesNoField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n {\n type: 'selectYesNoRequired',\n template: messageTemplate.selectYesNoRequired\n }\n ],\n advancedSettingsErrors: []\n }\n }\n}\n"],"mappings":"AAAA,SACEA,aAAa,EACbC,WAAW,EACXC,aAAa,QAER,oBAAoB;AAG3B,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAEhC,SAASC,eAAe;AAExB,SAASC,yBAAyB;;AAElC;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,SAASL,qBAAqB,CAAC;EAGpDM,WAAWA,CACTC,GAAwB,EACxBC,KAA6D,EAC7D;IACA,KAAK,CACH;MACE,GAAGD,GAAG;MACNE,IAAI,EACFD,KAAK,CAACE,KAAK,CAACC,aAAa,KAAKd,aAAa,CAACe,EAAE,GAC1Cb,aAAa,GACbD;IACR,CAAC,EACDU,KACF,CAAC;IAED,MAAM;MAAEK;IAAQ,CAAC,GAAGN,GAAG;IACvB,IAAI;MAAEO;IAAW,CAAC,GAAG,IAAI;IAEzBb,oBAAoB,CAACY,OAAO,EAAE,sBAAsB,CAAC;IAErD,IAAIA,OAAO,CAACE,QAAQ,KAAK,KAAK,EAAE;MAC9BD,UAAU,GAAGA,UAAU,CAACE,QAAQ,CAAC,CAAC;IACpC;IAEAF,UAAU,GAAGA,UAAU,CAACG,QAAQ,CAC9Bb,yBAAyB,CAAC;MACxB,cAAc,EAAED,eAAe,CAACe;IAClC,CAAC,CACH,CAAC;IAED,IAAI,CAACJ,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACD,OAAO,GAAGA,OAAO;EACxB;EAEAM,6BAA6BA,CAACC,UAAsB,EAAoB;IACtE,MAAM;MAAEF;IAAoB,CAAC,GAAGhB,uBAAuB,CAACkB,UAAU,CAACC,CAAC,CAAC;IACrE,OAAOjB,yBAAyB,CAAC;MAC/B,cAAc,EAAEc;IAClB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;EACEI,oBAAoBA,CAAA,EAA6B;IAC/C,OAAOjB,UAAU,CAACiB,oBAAoB,CAAC,CAAC;EAC1C;;EAEA;AACF;AACA;EACE,OAAOA,oBAAoBA,CAAA,EAA6B;IACtD,OAAO;MACLC,UAAU,EAAE,CACV;QACEC,IAAI,EAAE,qBAAqB;QAC3BC,QAAQ,EAAEtB,eAAe,CAACe;MAC5B,CAAC,CACF;MACDQ,sBAAsB,EAAE;IAC1B,CAAC;EACH;AACF","ignoreList":[]}
|