@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/postcode-lookup/types.js"],"sourcesContent":["/**\n * @typedef {{\n * ordnanceSurveyApiKey: string\n * }} PostcodeLookupConfiguration\n */\n\n/**\n * @typedef {{\n * name: string\n * step?: string\n * }} PostcodeLookupDispatchArgs\n */\n\n/**\n * @typedef {{\n * sourceUrl: string,\n * formName: string\n * componentName: string\n * componentTitle: string,\n * componentHint?: string\n * step?: string\n * }} PostcodeLookupDispatchData\n */\n\n/**\n * @typedef {{\n * initial: PostcodeLookupDispatchData\n * details: PostcodeLookupDetailsData\n * }} PostcodeLookupSessionData\n */\n\n//\n// Model types\n//\n\n/**\n * The postcode lookup details form view model data\n * @typedef {object} PostcodeLookupDetailsData\n * @property {string} postcodeQuery - postcode query\n * @property {string} buildingNameQuery - Building name or number query\n */\n\n//\n// Route types\n//\n\n/**\n * Postcode lookup query params\n * @typedef {object} PostcodeLookupQuery\n * @property {string} [step] - step\n */\n\n/**\n * @typedef {object} PostcodeLookupDetailsPayloadProperties\n * @property {string} step - step\n */\n\n/**\n * @typedef {PostcodeLookupDetailsData & PostcodeLookupDetailsPayloadProperties} PostcodeLookupDetailsPayload\n */\n\n/**\n * @typedef {object} PostcodeLookupSelectPayload\n * @property {string} step - step\n * @property {string} uprn - postcode\n */\n\n/**\n * Postcode lookup get request\n * @typedef {object} PostcodeLookupGetRequestRefs\n * @property {PostcodeLookupQuery} Query - Request query\n */\n\n/**\n * Postcode lookup post request\n * @typedef {object} PostcodeLookupPostRequestRefs\n * @property {PostcodeLookupDetailsPayload | PostcodeLookupSelectPayload} Payload - Request payload\n */\n\n/**\n * @typedef {PostcodeLookupGetRequestRefs | PostcodeLookupPostRequestRefs} PostcodeLookupRequestRefs\n * @typedef {Request<PostcodeLookupGetRequestRefs>} PostcodeLookupGetRequest\n * @typedef {Request<PostcodeLookupPostRequestRefs>} PostcodeLookupPostRequest\n * @typedef {PostcodeLookupGetRequest | PostcodeLookupPostRequest} PostcodeLookupRequest\n */\n\n/**\n * @typedef {object} PostcodeLookupManualPayload\n * @property {string} addressLine1 - The address line 1\n * @property {string} addressLine2 - The address line 2\n * @property {string} town - The address town or city\n * @property {string} county - The address county\n * @property {string} postcode - The address postcode\n */\n\n//\n// Service types\n//\n\n/**\n * @typedef {object} Address\n * @property {string} uprn - The unique property reference\n * @property {string} address - The full address\n * @property {string} addressLine1 - Address line 1\n * @property {string} addressLine2 - Address line 2\n * @property {string} town - Address town\n * @property {string} county - Address county\n * @property {string} postcode - Address postcode\n * @property {string} formatted - The full formatted address\n */\n\n/**\n * OS places address response\n * @typedef {object} DeliveryPointAddress\n * @property {string} UPRN - Unique property reference number\n * @property {string} UDPRN - Unique delivery point Reference Number\n * @property {string} ADDRESS - Address\n * @property {string} ORGANISATION_NAME - Organisation name\n * @property {string} SUB_BUILDING_NAME - Sub building name\n * @property {string} BUILDING_NAME - Building name\n * @property {string} BUILDING_NUMBER - Building number\n * @property {string} THOROUGHFARE_NAME - Throughfare name\n * @property {string} DEPENDENT_LOCALITY - Dependent locality\n * @property {string} POST_TOWN - Post town\n * @property {string} POSTCODE - Postcode\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressItem\n * @property {DeliveryPointAddress} DPA - Delivery point address\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressResult\n * @property {DeliveryPointAddressItem[]} [results] - Delivery point address results\n */\n\n/**\n * @import { Request } from '@hapi/hapi'\n * @import { FormPayload } from '~/src/server/plugins/engine/types.js'\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/server/plugins/postcode-lookup/types.js"],"sourcesContent":["/**\n * @typedef {{\n * ordnanceSurveyApiKey: string\n * }} PostcodeLookupConfiguration\n */\n\n/**\n * @typedef {{\n * name: string\n * step?: string\n * }} PostcodeLookupDispatchArgs\n */\n\n/**\n * @typedef {{\n * sourceUrl: string,\n * formName: string\n * componentName: string\n * componentTitle: string,\n * componentHint?: string\n * step?: string\n * language?: string\n * }} PostcodeLookupDispatchData\n */\n\n/**\n * @typedef {{\n * initial: PostcodeLookupDispatchData\n * details: PostcodeLookupDetailsData\n * }} PostcodeLookupSessionData\n */\n\n//\n// Model types\n//\n\n/**\n * The postcode lookup details form view model data\n * @typedef {object} PostcodeLookupDetailsData\n * @property {string} postcodeQuery - postcode query\n * @property {string} buildingNameQuery - Building name or number query\n */\n\n//\n// Route types\n//\n\n/**\n * Postcode lookup query params\n * @typedef {object} PostcodeLookupQuery\n * @property {string} [step] - step\n */\n\n/**\n * @typedef {object} PostcodeLookupDetailsPayloadProperties\n * @property {string} step - step\n */\n\n/**\n * @typedef {PostcodeLookupDetailsData & PostcodeLookupDetailsPayloadProperties} PostcodeLookupDetailsPayload\n */\n\n/**\n * @typedef {object} PostcodeLookupSelectPayload\n * @property {string} step - step\n * @property {string} uprn - postcode\n */\n\n/**\n * Postcode lookup get request\n * @typedef {object} PostcodeLookupGetRequestRefs\n * @property {PostcodeLookupQuery} Query - Request query\n */\n\n/**\n * Postcode lookup post request\n * @typedef {object} PostcodeLookupPostRequestRefs\n * @property {PostcodeLookupDetailsPayload | PostcodeLookupSelectPayload} Payload - Request payload\n */\n\n/**\n * @typedef {PostcodeLookupGetRequestRefs | PostcodeLookupPostRequestRefs} PostcodeLookupRequestRefs\n * @typedef {Request<PostcodeLookupGetRequestRefs>} PostcodeLookupGetRequest\n * @typedef {Request<PostcodeLookupPostRequestRefs>} PostcodeLookupPostRequest\n * @typedef {PostcodeLookupGetRequest | PostcodeLookupPostRequest} PostcodeLookupRequest\n */\n\n/**\n * @typedef {object} PostcodeLookupManualPayload\n * @property {string} addressLine1 - The address line 1\n * @property {string} addressLine2 - The address line 2\n * @property {string} town - The address town or city\n * @property {string} county - The address county\n * @property {string} postcode - The address postcode\n */\n\n//\n// Service types\n//\n\n/**\n * @typedef {object} Address\n * @property {string} uprn - The unique property reference\n * @property {string} address - The full address\n * @property {string} addressLine1 - Address line 1\n * @property {string} addressLine2 - Address line 2\n * @property {string} town - Address town\n * @property {string} county - Address county\n * @property {string} postcode - Address postcode\n * @property {string} formatted - The full formatted address\n */\n\n/**\n * OS places address response\n * @typedef {object} DeliveryPointAddress\n * @property {string} UPRN - Unique property reference number\n * @property {string} UDPRN - Unique delivery point Reference Number\n * @property {string} ADDRESS - Address\n * @property {string} ORGANISATION_NAME - Organisation name\n * @property {string} SUB_BUILDING_NAME - Sub building name\n * @property {string} BUILDING_NAME - Building name\n * @property {string} BUILDING_NUMBER - Building number\n * @property {string} THOROUGHFARE_NAME - Throughfare name\n * @property {string} DEPENDENT_LOCALITY - Dependent locality\n * @property {string} POST_TOWN - Post town\n * @property {string} POSTCODE - Postcode\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressItem\n * @property {DeliveryPointAddress} DPA - Delivery point address\n */\n\n/**\n * OS places DPA response\n * @typedef {object} DeliveryPointAddressResult\n * @property {DeliveryPointAddressItem[]} [results] - Delivery point address results\n */\n\n/**\n * @import { Request } from '@hapi/hapi'\n * @import { FormPayload } from '~/src/server/plugins/engine/types.js'\n */\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<div class="govuk-grid-column-two-thirds">
|
|
14
14
|
{% if errors %}
|
|
15
15
|
{{ govukErrorSummary({
|
|
16
|
-
titleText:
|
|
16
|
+
titleText: t('errors.title'),
|
|
17
17
|
errorList: errors
|
|
18
18
|
}) }}
|
|
19
19
|
{% endif %}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
|
|
39
39
|
{% if hasAddresses %}
|
|
40
40
|
<p class="govuk-body">
|
|
41
|
-
{{
|
|
41
|
+
{{ addressesFoundText }} {{ detailsHtml | safe }}. <a href="{{ searchAgainLink.href }}" class="govuk-link govuk-link--no-visited-state">{{ searchAgainLink.text }}</a>
|
|
42
42
|
</p>
|
|
43
43
|
{% endif %}
|
|
44
44
|
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
}) }}
|
|
54
54
|
{% else %}
|
|
55
55
|
<!-- No addresses found - show try again -->
|
|
56
|
-
<p class="govuk-body">
|
|
56
|
+
<p class="govuk-body">{{ noAddressFoundText }} {{ detailsHtml | safe }}.</p>
|
|
57
57
|
{% endif %}
|
|
58
58
|
{% case "manual" %}
|
|
59
59
|
<!-- Postcode lookup manual entry -->
|
|
@@ -3,7 +3,7 @@ import { type Server } from '@hapi/hapi';
|
|
|
3
3
|
import { type FormModel } from '../server/plugins/engine/models/index.js';
|
|
4
4
|
import { type DetailItem } from '../server/plugins/engine/models/types.js';
|
|
5
5
|
import { type PageController } from '../server/plugins/engine/pageControllers/PageController.js';
|
|
6
|
-
import { type FormContext, type OnRequestCallback, type PluginOptions, type PreparePageEventRequestOptions } from '../server/plugins/engine/types.js';
|
|
6
|
+
import { type FormContext, type GetLanguageHandler, type OnRequestCallback, type PluginOptions, type PreparePageEventRequestOptions } from '../server/plugins/engine/types.js';
|
|
7
7
|
import { type PaymentService } from '../server/plugins/payment/service.js';
|
|
8
8
|
import { type FormRequestPayload, type FormStatus } from '../server/routes/types.js';
|
|
9
9
|
import { type CacheService } from '../server/services/cacheService.js';
|
|
@@ -38,6 +38,7 @@ export interface RouteConfig {
|
|
|
38
38
|
cacheServiceCreator?: (server: Server) => CacheService;
|
|
39
39
|
ordnanceSurveyApiKey?: string;
|
|
40
40
|
ordnanceSurveyApiSecret?: string;
|
|
41
|
+
getLanguage?: GetLanguageHandler;
|
|
41
42
|
}
|
|
42
43
|
export interface OutputService {
|
|
43
44
|
submit: (context: FormContext, request: FormRequestPayload, model: FormModel, emailAddress: string, items: DetailItem[], submitResponse: SubmitResponsePayload, formMetadata?: FormMetadata) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import {\n type FormDefinition,\n type FormMetadata,\n type SubmitPayload,\n type SubmitResponsePayload\n} from '@defra/forms-model'\nimport { type Server } from '@hapi/hapi'\n\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type DetailItem } from '~/src/server/plugins/engine/models/types.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport {\n type FormContext,\n type OnRequestCallback,\n type PluginOptions,\n type PreparePageEventRequestOptions\n} from '~/src/server/plugins/engine/types.js'\nimport { type PaymentService } from '~/src/server/plugins/payment/service.js'\nimport {\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\nimport { type CacheService } from '~/src/server/services/cacheService.js'\n\nexport interface FormsService {\n getFormMetadata: (slug: string) => Promise<FormMetadata>\n getFormMetadataById: (id: string) => Promise<FormMetadata>\n getFormDefinition: (\n id: string,\n state: FormStatus\n ) => Promise<FormDefinition | undefined>\n getFormSecret: (formId: string, secretName: string) => Promise<string>\n}\n\nexport interface FormSubmissionService {\n persistFiles: (\n files: { fileId: string; initiatedRetrievalKey: string }[],\n persistedRetrievalKey: string\n ) => Promise<object>\n submit: (data: SubmitPayload) => Promise<SubmitResponsePayload | undefined>\n}\n\nexport interface Services {\n formsService: FormsService\n formSubmissionService: FormSubmissionService\n outputService: OutputService\n paymentService?: PaymentService\n}\n\nexport interface RouteConfig {\n formFileName?: string\n formFilePath?: string\n enforceCsrf?: boolean\n services?: Services\n controllers?: Record<string, typeof PageController>\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n saveAndExit?: PluginOptions['saveAndExit']\n cacheServiceCreator?: (server: Server) => CacheService\n ordnanceSurveyApiKey?: string\n ordnanceSurveyApiSecret?: string\n}\n\nexport interface OutputService {\n submit: (\n context: FormContext,\n request: FormRequestPayload,\n model: FormModel,\n emailAddress: string,\n items: DetailItem[],\n submitResponse: SubmitResponsePayload,\n formMetadata?: FormMetadata\n ) => Promise<void>\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../src/server/types.ts"],"sourcesContent":["import {\n type FormDefinition,\n type FormMetadata,\n type SubmitPayload,\n type SubmitResponsePayload\n} from '@defra/forms-model'\nimport { type Server } from '@hapi/hapi'\n\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport { type DetailItem } from '~/src/server/plugins/engine/models/types.js'\nimport { type PageController } from '~/src/server/plugins/engine/pageControllers/PageController.js'\nimport {\n type FormContext,\n type GetLanguageHandler,\n type OnRequestCallback,\n type PluginOptions,\n type PreparePageEventRequestOptions\n} from '~/src/server/plugins/engine/types.js'\nimport { type PaymentService } from '~/src/server/plugins/payment/service.js'\nimport {\n type FormRequestPayload,\n type FormStatus\n} from '~/src/server/routes/types.js'\nimport { type CacheService } from '~/src/server/services/cacheService.js'\n\nexport interface FormsService {\n getFormMetadata: (slug: string) => Promise<FormMetadata>\n getFormMetadataById: (id: string) => Promise<FormMetadata>\n getFormDefinition: (\n id: string,\n state: FormStatus\n ) => Promise<FormDefinition | undefined>\n getFormSecret: (formId: string, secretName: string) => Promise<string>\n}\n\nexport interface FormSubmissionService {\n persistFiles: (\n files: { fileId: string; initiatedRetrievalKey: string }[],\n persistedRetrievalKey: string\n ) => Promise<object>\n submit: (data: SubmitPayload) => Promise<SubmitResponsePayload | undefined>\n}\n\nexport interface Services {\n formsService: FormsService\n formSubmissionService: FormSubmissionService\n outputService: OutputService\n paymentService?: PaymentService\n}\n\nexport interface RouteConfig {\n formFileName?: string\n formFilePath?: string\n enforceCsrf?: boolean\n services?: Services\n controllers?: Record<string, typeof PageController>\n preparePageEventRequestOptions?: PreparePageEventRequestOptions\n onRequest?: OnRequestCallback\n saveAndExit?: PluginOptions['saveAndExit']\n cacheServiceCreator?: (server: Server) => CacheService\n ordnanceSurveyApiKey?: string\n ordnanceSurveyApiSecret?: string\n getLanguage?: GetLanguageHandler\n}\n\nexport interface OutputService {\n submit: (\n context: FormContext,\n request: FormRequestPayload,\n model: FormModel,\n emailAddress: string,\n items: DetailItem[],\n submitResponse: SubmitResponsePayload,\n formMetadata?: FormMetadata\n ) => Promise<void>\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -11,3 +11,8 @@ export function applyTraceHeaders(existingHeaders?: Record<string, string> | und
|
|
|
11
11
|
* @returns
|
|
12
12
|
*/
|
|
13
13
|
export function isValidUUID(str: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* @param {AnyFormRequest} request
|
|
16
|
+
*/
|
|
17
|
+
export function resolveLanguage(request: AnyFormRequest): string;
|
|
18
|
+
import type { AnyFormRequest } from '../../server/plugins/engine/types.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getTraceId } from '@defra/hapi-tracing';
|
|
2
2
|
import Joi from 'joi';
|
|
3
3
|
import { config } from "../../config/index.js";
|
|
4
|
+
import { getPluginOptions } from "../plugins/engine/helpers.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Returns a set of headers to use in an HTTP request, merging them with any existing headers in options.
|
|
@@ -30,4 +31,19 @@ export function isValidUUID(str) {
|
|
|
30
31
|
} = Joi.string().uuid().validate(str);
|
|
31
32
|
return error === undefined;
|
|
32
33
|
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @param {AnyFormRequest} request
|
|
37
|
+
*/
|
|
38
|
+
export function resolveLanguage(request) {
|
|
39
|
+
const {
|
|
40
|
+
getLanguage
|
|
41
|
+
} = getPluginOptions(request.server);
|
|
42
|
+
return getLanguage?.(request.query, request.yar) ?? 'en-GB';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @import { FormMetadata } from '@defra/forms-model'
|
|
47
|
+
* @import { AnyFormRequest } from '../../server/plugins/engine/types.js'
|
|
48
|
+
*/
|
|
33
49
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["getTraceId","Joi","config","applyTraceHeaders","existingHeaders","header","get","traceId","headers","undefined","Object","assign","isValidUUID","str","error","string","uuid","validate"],"sources":["../../../src/server/utils/utils.js"],"sourcesContent":["import { getTraceId } from '@defra/hapi-tracing'\nimport Joi from 'joi'\n\nimport { config } from '~/src/config/index.js'\n\n/**\n * Returns a set of headers to use in an HTTP request, merging them with any existing headers in options.\n * @param {Record<string, string> | undefined} [existingHeaders] - Optional existing headers to merge with the tracing headers.\n * @param {string} [header] - The tracing header name to use.\n * @returns {Record<string, string> | undefined} The merged headers, or undefined if no tracing header is available.\n */\nexport function applyTraceHeaders(\n existingHeaders,\n header = config.get('tracing').header\n) {\n if (!header) {\n return existingHeaders\n }\n\n const traceId = getTraceId()\n\n const headers = traceId ? { [header]: traceId } : undefined\n\n return existingHeaders ? Object.assign(existingHeaders, headers) : headers\n}\n\n/**\n * Validates if a string conforms to the uuid structure\n * @param {string} str\n * @returns\n */\nexport function isValidUUID(str) {\n const { error } = Joi.string().uuid().validate(str)\n return error === undefined\n}\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,qBAAqB;AAChD,OAAOC,GAAG,MAAM,KAAK;AAErB,SAASC,MAAM;;
|
|
1
|
+
{"version":3,"file":"utils.js","names":["getTraceId","Joi","config","getPluginOptions","applyTraceHeaders","existingHeaders","header","get","traceId","headers","undefined","Object","assign","isValidUUID","str","error","string","uuid","validate","resolveLanguage","request","getLanguage","server","query","yar"],"sources":["../../../src/server/utils/utils.js"],"sourcesContent":["import { getTraceId } from '@defra/hapi-tracing'\nimport Joi from 'joi'\n\nimport { config } from '~/src/config/index.js'\nimport { getPluginOptions } from '~/src/server/plugins/engine/helpers.js'\n\n/**\n * Returns a set of headers to use in an HTTP request, merging them with any existing headers in options.\n * @param {Record<string, string> | undefined} [existingHeaders] - Optional existing headers to merge with the tracing headers.\n * @param {string} [header] - The tracing header name to use.\n * @returns {Record<string, string> | undefined} The merged headers, or undefined if no tracing header is available.\n */\nexport function applyTraceHeaders(\n existingHeaders,\n header = config.get('tracing').header\n) {\n if (!header) {\n return existingHeaders\n }\n\n const traceId = getTraceId()\n\n const headers = traceId ? { [header]: traceId } : undefined\n\n return existingHeaders ? Object.assign(existingHeaders, headers) : headers\n}\n\n/**\n * Validates if a string conforms to the uuid structure\n * @param {string} str\n * @returns\n */\nexport function isValidUUID(str) {\n const { error } = Joi.string().uuid().validate(str)\n return error === undefined\n}\n\n/**\n * @param {AnyFormRequest} request\n */\nexport function resolveLanguage(request) {\n const { getLanguage } = getPluginOptions(request.server)\n return getLanguage?.(request.query, request.yar) ?? 'en-GB'\n}\n\n/**\n * @import { FormMetadata } from '@defra/forms-model'\n * @import { AnyFormRequest } from '~/src/server/plugins/engine/types.js'\n */\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,qBAAqB;AAChD,OAAOC,GAAG,MAAM,KAAK;AAErB,SAASC,MAAM;AACf,SAASC,gBAAgB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,eAAe,EACfC,MAAM,GAAGJ,MAAM,CAACK,GAAG,CAAC,SAAS,CAAC,CAACD,MAAM,EACrC;EACA,IAAI,CAACA,MAAM,EAAE;IACX,OAAOD,eAAe;EACxB;EAEA,MAAMG,OAAO,GAAGR,UAAU,CAAC,CAAC;EAE5B,MAAMS,OAAO,GAAGD,OAAO,GAAG;IAAE,CAACF,MAAM,GAAGE;EAAQ,CAAC,GAAGE,SAAS;EAE3D,OAAOL,eAAe,GAAGM,MAAM,CAACC,MAAM,CAACP,eAAe,EAAEI,OAAO,CAAC,GAAGA,OAAO;AAC5E;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,WAAWA,CAACC,GAAG,EAAE;EAC/B,MAAM;IAAEC;EAAM,CAAC,GAAGd,GAAG,CAACe,MAAM,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAACJ,GAAG,CAAC;EACnD,OAAOC,KAAK,KAAKL,SAAS;AAC5B;;AAEA;AACA;AACA;AACA,OAAO,SAASS,eAAeA,CAACC,OAAO,EAAE;EACvC,MAAM;IAAEC;EAAY,CAAC,GAAGlB,gBAAgB,CAACiB,OAAO,CAACE,MAAM,CAAC;EACxD,OAAOD,WAAW,GAAGD,OAAO,CAACG,KAAK,EAAEH,OAAO,CAACI,GAAG,CAAC,IAAI,OAAO;AAC7D;;AAEA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.js","names":[],"sources":["../../../src/typings/hapi/index.d.ts"],"sourcesContent":["import { type Plugin } from '@hapi/hapi'\nimport { type ServerYar, type Yar } from '@hapi/yar'\nimport { type Logger } from 'pino'\n\nimport {\n type COMPONENT_STATE_ERROR,\n type EXTERNAL_STATE_APPENDAGE,\n type EXTERNAL_STATE_PAYLOAD\n} from '~/src/server/constants.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport {\n type AnyFormRequest,\n type FormSubmissionError,\n type PluginOptions\n} from '~/src/server/plugins/engine/types.ts'\nimport { type CacheService } from '~/src/server/services/index.js'\n\ndeclare module '@hapi/yar' {\n interface YarFlashes {\n [EXTERNAL_STATE_APPENDAGE]: object\n [EXTERNAL_STATE_PAYLOAD]: object\n [COMPONENT_STATE_ERROR]: string\n [key: string]: { errors: FormSubmissionError[] }\n }\n}\n\ndeclare module '@hapi/hapi' {\n // Here we are decorating Hapi interface types with\n // props from plugins which doesn't export @types\n interface PluginProperties {\n crumb: {\n generate?: (request: AnyRequest) => string\n }\n 'forms-engine-plugin': {\n baseLayoutPath: string\n cacheService: CacheService\n viewContext?: (\n request: AnyFormRequest | null\n ) => Record<string, unknown> | Promise<Record<string, unknown>>\n saveAndExit?: PluginOptions['saveAndExit']\n baseUrl: string\n services: PluginOptions['services']\n }\n }\n\n interface Request {\n logger: Logger\n yar: Yar\n }\n\n interface RequestApplicationState {\n model?: FormModel\n }\n\n interface Server {\n logger: Logger\n yar: ServerYar\n }\n\n interface ServerApplicationState {\n model?: FormModel\n models?: Map<string, { model: FormModel; updatedAt: Date }>\n }\n}\n\ndeclare module 'blankie' {\n declare const blankie: {\n plugin: Plugin<Record<string, boolean | string | string[]>>\n }\n\n export = blankie\n}\n\ndeclare module 'blipp' {\n declare const blipp: {\n plugin: Plugin\n }\n\n export = blipp\n}\n\ndeclare module 'hapi-pulse' {\n declare const hapiPulse: {\n plugin: Plugin<{\n timeout: number\n }>\n }\n\n export = hapiPulse\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.d.js","names":[],"sources":["../../../src/typings/hapi/index.d.ts"],"sourcesContent":["import { type Plugin } from '@hapi/hapi'\nimport { type ServerYar, type Yar } from '@hapi/yar'\nimport { type Logger } from 'pino'\n\nimport {\n type COMPONENT_STATE_ERROR,\n type EXTERNAL_STATE_APPENDAGE,\n type EXTERNAL_STATE_PAYLOAD\n} from '~/src/server/constants.js'\nimport { type FormModel } from '~/src/server/plugins/engine/models/index.js'\nimport {\n type AnyFormRequest,\n type FormSubmissionError,\n type PluginOptions\n} from '~/src/server/plugins/engine/types.ts'\nimport { type CacheService } from '~/src/server/services/index.js'\n\ndeclare module '@hapi/yar' {\n interface YarFlashes {\n [EXTERNAL_STATE_APPENDAGE]: object\n [EXTERNAL_STATE_PAYLOAD]: object\n [COMPONENT_STATE_ERROR]: string\n [key: string]: { errors: FormSubmissionError[] }\n }\n}\n\ndeclare module '@hapi/hapi' {\n // Here we are decorating Hapi interface types with\n // props from plugins which doesn't export @types\n interface PluginProperties {\n crumb: {\n generate?: (request: AnyRequest) => string\n }\n 'forms-engine-plugin': {\n baseLayoutPath: string\n cacheService: CacheService\n viewContext?: (\n request: AnyFormRequest | null\n ) => Record<string, unknown> | Promise<Record<string, unknown>>\n saveAndExit?: PluginOptions['saveAndExit']\n getLanguage?: PluginOptions['getLanguage']\n baseUrl: string\n services: PluginOptions['services']\n }\n }\n\n interface Request {\n logger: Logger\n yar: Yar\n }\n\n interface RequestApplicationState {\n model?: FormModel\n }\n\n interface Server {\n logger: Logger\n yar: ServerYar\n }\n\n interface ServerApplicationState {\n model?: FormModel\n models?: Map<string, { model: FormModel; updatedAt: Date }>\n }\n}\n\ndeclare module 'blankie' {\n declare const blankie: {\n plugin: Plugin<Record<string, boolean | string | string[]>>\n }\n\n export = blankie\n}\n\ndeclare module 'blipp' {\n declare const blipp: {\n plugin: Plugin\n }\n\n export = blipp\n}\n\ndeclare module 'hapi-pulse' {\n declare const hapiPulse: {\n plugin: Plugin<{\n timeout: number\n }>\n }\n\n export = hapiPulse\n}\n"],"mappings":"","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defra/forms-engine-plugin",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0-alpha.1",
|
|
4
4
|
"description": "Defra forms engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -83,13 +83,13 @@
|
|
|
83
83
|
},
|
|
84
84
|
"engines": {
|
|
85
85
|
"node": ">=22.11.0 <25.0.0",
|
|
86
|
-
"npm": ">=10.9.0
|
|
86
|
+
"npm": ">=10.9.0 <=11.17.0"
|
|
87
87
|
},
|
|
88
88
|
"license": "SEE LICENSE IN LICENSE",
|
|
89
89
|
"dependencies": {
|
|
90
|
-
"@defra/forms-model": "^3.0.
|
|
90
|
+
"@defra/forms-model": "^3.0.687",
|
|
91
91
|
"@defra/hapi-tracing": "^1.29.0",
|
|
92
|
-
"@defra/interactive-map": "^0.0.
|
|
92
|
+
"@defra/interactive-map": "^0.0.33-alpha",
|
|
93
93
|
"@elastic/ecs-pino-format": "^1.5.0",
|
|
94
94
|
"@hapi/boom": "^10.0.1",
|
|
95
95
|
"@hapi/bourne": "^3.0.0",
|
|
@@ -126,6 +126,7 @@
|
|
|
126
126
|
"highlight.js": "^11.11.1",
|
|
127
127
|
"http-status-codes": "^2.3.0",
|
|
128
128
|
"humanize-duration": "^3.33.1",
|
|
129
|
+
"i18next": "^26.0.5",
|
|
129
130
|
"ioredis": "^5.8.2",
|
|
130
131
|
"joi": "^17.13.3",
|
|
131
132
|
"liquidjs": "^10.24.0",
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
// @ts-expect-error - no types
|
|
2
2
|
import createDatasetsPlugin from '@defra/interactive-map/plugins/datasets'
|
|
3
3
|
// @ts-expect-error - no types
|
|
4
|
-
import { maplibreLayerAdapter } from '@defra/interactive-map/plugins/datasets/adapters/maplibre'
|
|
5
|
-
// @ts-expect-error - no types
|
|
6
4
|
import createDrawPlugin from '@defra/interactive-map/plugins/draw-ml'
|
|
7
5
|
import { bbox } from '@turf/bbox'
|
|
8
6
|
|
|
@@ -11,8 +9,10 @@ import {
|
|
|
11
9
|
createMap,
|
|
12
10
|
defaultConfig,
|
|
13
11
|
getCentroidGridRef,
|
|
14
|
-
getCoordinateGridRef
|
|
12
|
+
getCoordinateGridRef,
|
|
13
|
+
getMapLayers
|
|
15
14
|
} from './map.js'
|
|
15
|
+
import sssiDataset from './sssi-dataset.js'
|
|
16
16
|
import { formatDelimtedList } from './utils.js'
|
|
17
17
|
|
|
18
18
|
const helpPanelConfig = {
|
|
@@ -173,12 +173,12 @@ export function processGeospatial(config, geospatial, index) {
|
|
|
173
173
|
const drawPlugin = createDrawPlugin()
|
|
174
174
|
const plugins = [drawPlugin]
|
|
175
175
|
const country = geospatial.dataset.country
|
|
176
|
+
const mapLayers = getMapLayers(geospatial.dataset.maplayers)
|
|
176
177
|
|
|
177
178
|
if (country) {
|
|
178
179
|
// Add the country bounds as a dataset plugin to show the valid area on the map
|
|
179
180
|
// and provide feedback to the user when they add features outside of the bounds.
|
|
180
|
-
const
|
|
181
|
-
layerAdapter: maplibreLayerAdapter,
|
|
181
|
+
const countriesDatasetPlugin = createDatasetsPlugin({
|
|
182
182
|
datasets: [
|
|
183
183
|
{
|
|
184
184
|
id: 'invalid-area',
|
|
@@ -206,7 +206,11 @@ export function processGeospatial(config, geospatial, index) {
|
|
|
206
206
|
]
|
|
207
207
|
})
|
|
208
208
|
|
|
209
|
-
plugins.push(
|
|
209
|
+
plugins.push(countriesDatasetPlugin)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (mapLayers.includes('sssi')) {
|
|
213
|
+
plugins.push(createDatasetsPlugin(sssiDataset))
|
|
210
214
|
}
|
|
211
215
|
|
|
212
216
|
const initConfig = {
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
// @ts-expect-error - no types
|
|
2
|
+
import createDatasetsPlugin from '@defra/interactive-map/plugins/datasets'
|
|
3
|
+
|
|
1
4
|
import {
|
|
2
5
|
EVENTS,
|
|
3
6
|
centerMap,
|
|
4
7
|
createMap,
|
|
5
8
|
defaultConfig,
|
|
6
9
|
eastingNorthingToLatLong,
|
|
10
|
+
getMapLayers,
|
|
7
11
|
latLongToEastingNorthing,
|
|
8
12
|
latLongToOsGridRef,
|
|
9
13
|
osGridRefToLatLong
|
|
10
14
|
} from './map.js'
|
|
15
|
+
import sssiDataset from './sssi-dataset.js'
|
|
11
16
|
|
|
12
17
|
const LOCATION_FIELD_SELECTOR = 'input.govuk-input'
|
|
13
18
|
|
|
@@ -418,6 +423,12 @@ export function processLocation(config, location, index) {
|
|
|
418
423
|
|
|
419
424
|
locationInputs.after(mapContainer)
|
|
420
425
|
|
|
426
|
+
const mapLayers = getMapLayers(location.dataset.maplayers)
|
|
427
|
+
|
|
428
|
+
if (mapLayers.includes('sssi')) {
|
|
429
|
+
initConfig.plugins = [createDatasetsPlugin(sssiDataset)]
|
|
430
|
+
}
|
|
431
|
+
|
|
421
432
|
const { map, interactPlugin } = createMap(mapId, initConfig, config)
|
|
422
433
|
|
|
423
434
|
map.on(
|
|
@@ -357,6 +357,16 @@ export function centerMap(map, mapProvider, center) {
|
|
|
357
357
|
})
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
+
/**
|
|
361
|
+
* Parse CSV string layers
|
|
362
|
+
* @param {string | undefined} layers
|
|
363
|
+
* @returns {string[]}
|
|
364
|
+
*/
|
|
365
|
+
export function getMapLayers(layers) {
|
|
366
|
+
const trimmed = layers?.trim()
|
|
367
|
+
return trimmed ? trimmed.split(',') : []
|
|
368
|
+
}
|
|
369
|
+
|
|
360
370
|
/**
|
|
361
371
|
* @typedef {object} InteractiveMap - an instance of a InteractiveMap
|
|
362
372
|
* @property {Function} on - register callback listeners to map events
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const style = {
|
|
2
|
+
stroke: '#00897B',
|
|
3
|
+
fillPattern: 'diagonal-cross-hatch',
|
|
4
|
+
fillPatternForegroundColor: '#00897B',
|
|
5
|
+
fillPatternBackgroundColor: 'transparent'
|
|
6
|
+
}
|
|
7
|
+
const minZoom = 12
|
|
8
|
+
|
|
9
|
+
const englandWFS =
|
|
10
|
+
'https://environment.data.gov.uk/geoservices/datasets/ba8dc201-66ef-4983-9d46-7378af21027e/ogc/features/v1/collections/Sites_of_Special_Scientific_Interest_England/items?f=json'
|
|
11
|
+
const walesWFS =
|
|
12
|
+
'https://datamap.gov.wales/geoserver/wfs?service=WFS&version=2.0.0&request=GetFeature&typeNames=inspire-nrw:NRW_SSSI&outputFormat=application/json&srsName=EPSG:4326'
|
|
13
|
+
const scotlandWFS =
|
|
14
|
+
'https://services1.arcgis.com/LM9GyVFsughzHdbO/ArcGIS/rest/services/Sites_of_Special_Scientific_Interest/FeatureServer/0/query?f=geojson&where=1%3D1&geometryType=esriGeometryEnvelope&inSR=4326&spatialRel=esriSpatialRelIntersects&returnGeometry=true&outFields=*'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @type {TransformRequestArgs}
|
|
18
|
+
*/
|
|
19
|
+
export function sssiEnglandRequestTransformer(url, { bbox }) {
|
|
20
|
+
const uri = new URL(url)
|
|
21
|
+
uri.searchParams.set('bbox', bbox.join(','))
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
url: uri.toString()
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @type {TransformRequestArgs}
|
|
30
|
+
*/
|
|
31
|
+
export function sssiWalesRequestTransformer(url, { bbox }) {
|
|
32
|
+
const uri = new URL(url)
|
|
33
|
+
uri.searchParams.set('bbox', `${bbox.join(',')},EPSG:4326`)
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
url: uri.toString()
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @type {TransformRequestArgs}
|
|
42
|
+
*/
|
|
43
|
+
export function sssiScotlandRequestTransformer(url, { bbox }) {
|
|
44
|
+
const uri = new URL(url)
|
|
45
|
+
uri.searchParams.set('geometry', bbox.join(','))
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
url: uri.toString()
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export default {
|
|
53
|
+
datasets: [
|
|
54
|
+
{
|
|
55
|
+
id: 'sssi-england',
|
|
56
|
+
label: 'Sites of Special Scientific Interest',
|
|
57
|
+
dynamicGeoJSON: {
|
|
58
|
+
url: englandWFS,
|
|
59
|
+
idProperty: 'ref_code',
|
|
60
|
+
transformRequest: sssiEnglandRequestTransformer
|
|
61
|
+
},
|
|
62
|
+
minZoom,
|
|
63
|
+
style,
|
|
64
|
+
showInKey: true,
|
|
65
|
+
showInMenu: false
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'sssi-wales',
|
|
69
|
+
label: 'SSSI Wales',
|
|
70
|
+
dynamicGeoJSON: {
|
|
71
|
+
url: walesWFS,
|
|
72
|
+
idProperty: 'id',
|
|
73
|
+
transformRequest: sssiWalesRequestTransformer
|
|
74
|
+
},
|
|
75
|
+
minZoom,
|
|
76
|
+
style,
|
|
77
|
+
showInKey: false,
|
|
78
|
+
showInMenu: false
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'sssi-scotland',
|
|
82
|
+
label: 'SSSI Scotland',
|
|
83
|
+
dynamicGeoJSON: {
|
|
84
|
+
url: scotlandWFS,
|
|
85
|
+
idProperty: 'OBJECTID',
|
|
86
|
+
transformRequest: sssiScotlandRequestTransformer
|
|
87
|
+
},
|
|
88
|
+
minZoom,
|
|
89
|
+
style,
|
|
90
|
+
showInKey: false,
|
|
91
|
+
showInMenu: false
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* @typedef {object} TransformRequestOptions
|
|
98
|
+
* @property {string[]} bbox - the bounding box coordinates
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Transforms the request URL with bounding box parameters
|
|
103
|
+
* @callback TransformRequestArgs
|
|
104
|
+
* @param {string} url - the request URL
|
|
105
|
+
* @param {TransformRequestOptions} options - the bounding box coordinates
|
|
106
|
+
*/
|
|
@@ -5,11 +5,9 @@
|
|
|
5
5
|
@use "location-fields";
|
|
6
6
|
|
|
7
7
|
@use "@defra/interactive-map/css" as core;
|
|
8
|
-
@use "@defra/interactive-map/plugins/interact/css" as interact;
|
|
9
8
|
@use "@defra/interactive-map/plugins/map-styles/css" as mapStyles;
|
|
10
9
|
@use "@defra/interactive-map/plugins/search/css" as search;
|
|
11
10
|
@use "@defra/interactive-map/plugins/scale-bar/css" as scaleBar;
|
|
12
|
-
@use "@defra/interactive-map/plugins/draw-ml/css" as drawMl;
|
|
13
11
|
|
|
14
12
|
// Use default GDS Transport font for autocomplete
|
|
15
13
|
.autocomplete__hint,
|
|
@@ -242,20 +242,6 @@ pages:
|
|
|
242
242
|
content: 'Fill in this field'
|
|
243
243
|
options:
|
|
244
244
|
required: false
|
|
245
|
-
next:
|
|
246
|
-
- path: '/pay-for-your-licence'
|
|
247
|
-
- title: Pay for your licence
|
|
248
|
-
path: '/pay-for-your-licence'
|
|
249
|
-
section: section
|
|
250
|
-
components:
|
|
251
|
-
- name: licencePayment
|
|
252
|
-
title: Unicorn breeder licence fee
|
|
253
|
-
type: PaymentField
|
|
254
|
-
hint: You'll be redirected to GOV.UK Pay to complete your payment
|
|
255
|
-
options:
|
|
256
|
-
required: true
|
|
257
|
-
amount: 50
|
|
258
|
-
description: Unicorn breeder annual licence fee
|
|
259
245
|
next:
|
|
260
246
|
- path: '/summary'
|
|
261
247
|
conditions:
|
|
@@ -3,6 +3,57 @@ name: Page events
|
|
|
3
3
|
engine: V2
|
|
4
4
|
schema: 2
|
|
5
5
|
startPage: '/summary'
|
|
6
|
+
metadata:
|
|
7
|
+
language: en-GB
|
|
8
|
+
translations:
|
|
9
|
+
cy:
|
|
10
|
+
components:
|
|
11
|
+
1fb8e182-c709-4792-8f83-e01d8b1fee1a:
|
|
12
|
+
title: Beth yw eich enw cyntaf?
|
|
13
|
+
shortDescription: Eich enw cyntaf
|
|
14
|
+
b68df7f1-d4f4-4c17-83c8-402f584906c9:
|
|
15
|
+
title: Beth yw eich enw olaf?
|
|
16
|
+
shortDescription: Eich enw olaf
|
|
17
|
+
987c1234-56d7-89e0-1234-56789abcdef0:
|
|
18
|
+
title: Llwytho copi o'ch pasbort
|
|
19
|
+
shortDescription: Llwytho pasbort
|
|
20
|
+
987c1234-56d7-89e0-1234-56789abcdef1:
|
|
21
|
+
title: Llwytho copi o'ch trwydded yrru
|
|
22
|
+
shortDescription: Llwytho trwydded yrru
|
|
23
|
+
00738799-3489-4ab2-a57b-542eecb31bfa:
|
|
24
|
+
title: Pryd yw pen-blwydd {{ applicantFirstName }} {{ applicantLastName }}?
|
|
25
|
+
shortDescription: Eich pen-blwydd
|
|
26
|
+
123e4567-e89b-12d3-a456-426614174000:
|
|
27
|
+
title: Beth yw eich cyfeiriad?
|
|
28
|
+
shortDescription: Eich cyfeiriad
|
|
29
|
+
aabbccdd-1122-3344-5566-778899001123:
|
|
30
|
+
title: Oes gennych chi drwydded yrru?
|
|
31
|
+
shortDescription: Trwydded yrru
|
|
32
|
+
aabbccdd-1122-3344-5566-778899001124:
|
|
33
|
+
title: Sut rydych chi fel arfer yn teithio?
|
|
34
|
+
shortDescription: Eich ffordd o deithio
|
|
35
|
+
listItems:
|
|
36
|
+
aabbccdd-1122-3344-5566-778899001126:
|
|
37
|
+
text: Car
|
|
38
|
+
aabbccdd-1122-3344-5566-778899001127:
|
|
39
|
+
text: Bws
|
|
40
|
+
aabbccdd-1122-3344-5566-778899001128:
|
|
41
|
+
text: Trên
|
|
42
|
+
pages:
|
|
43
|
+
622a35ec-3795-418a-81f3-a45746959045:
|
|
44
|
+
title: Eich enw
|
|
45
|
+
23456789-0abc-def1-2345-67890abcdef1:
|
|
46
|
+
title: Llwytho copi o'ch pasbort
|
|
47
|
+
23456789-0abc-def1-2345-67890abcdef2:
|
|
48
|
+
title: Llwytho copi o'ch trwydded yrru
|
|
49
|
+
da0fbdb4-a2de-4650-be16-9ba552af135f:
|
|
50
|
+
title: Dyddiad geni
|
|
51
|
+
449a45f6-4541-4a46-91bd-8b8931b07b50:
|
|
52
|
+
title: Crynodeb
|
|
53
|
+
123e4567-e89b-12d3-a456-426614174001:
|
|
54
|
+
title: Ble rydych chi'n byw?
|
|
55
|
+
aabbccdd-1122-3344-5566-778899001122:
|
|
56
|
+
title: Amdanoch chi
|
|
6
57
|
pages:
|
|
7
58
|
- title: Your name
|
|
8
59
|
path: '/your-name'
|
|
@@ -36,6 +87,21 @@ pages:
|
|
|
36
87
|
id: e18116e0-7c3e-416a-af42-6f229017c5b1
|
|
37
88
|
next: []
|
|
38
89
|
id: 622a35ec-3795-418a-81f3-a45746959045
|
|
90
|
+
- title: Where do you live?
|
|
91
|
+
path: '/where-you-live'
|
|
92
|
+
components:
|
|
93
|
+
- type: UkAddressField
|
|
94
|
+
title: What is your address?
|
|
95
|
+
name: applicantAddress
|
|
96
|
+
shortDescription: Your address
|
|
97
|
+
hint: ''
|
|
98
|
+
options:
|
|
99
|
+
required: true
|
|
100
|
+
usePostcodeLookup: true
|
|
101
|
+
schema: {}
|
|
102
|
+
id: 123e4567-e89b-12d3-a456-426614174000
|
|
103
|
+
next: []
|
|
104
|
+
id: 123e4567-e89b-12d3-a456-426614174001
|
|
39
105
|
- title: Upload a copy of your passport
|
|
40
106
|
controller: FileUploadPageController
|
|
41
107
|
path: '/upload-passport'
|
|
@@ -46,7 +112,7 @@ pages:
|
|
|
46
112
|
shortDescription: Upload passport
|
|
47
113
|
hint: ''
|
|
48
114
|
options:
|
|
49
|
-
required:
|
|
115
|
+
required: false
|
|
50
116
|
schema: {}
|
|
51
117
|
id: 987c1234-56d7-89e0-1234-56789abcdef0
|
|
52
118
|
id: 23456789-0abc-def1-2345-67890abcdef1
|
|
@@ -60,7 +126,7 @@ pages:
|
|
|
60
126
|
shortDescription: Upload drivers licence
|
|
61
127
|
hint: ''
|
|
62
128
|
options:
|
|
63
|
-
required:
|
|
129
|
+
required: false
|
|
64
130
|
schema: {}
|
|
65
131
|
id: 987c1234-56d7-89e0-1234-56789abcdef1
|
|
66
132
|
id: 23456789-0abc-def1-2345-67890abcdef2
|
|
@@ -78,6 +144,29 @@ pages:
|
|
|
78
144
|
id: '00738799-3489-4ab2-a57b-542eecb31bfa'
|
|
79
145
|
next: []
|
|
80
146
|
id: da0fbdb4-a2de-4650-be16-9ba552af135f
|
|
147
|
+
- title: About you
|
|
148
|
+
path: '/about-you'
|
|
149
|
+
components:
|
|
150
|
+
- type: YesNoField
|
|
151
|
+
title: Do you have a driving licence?
|
|
152
|
+
name: hasDrivingLicence
|
|
153
|
+
shortDescription: Driving licence
|
|
154
|
+
hint: ''
|
|
155
|
+
options: {}
|
|
156
|
+
schema: {}
|
|
157
|
+
id: aabbccdd-1122-3344-5566-778899001123
|
|
158
|
+
- type: RadiosField
|
|
159
|
+
title: How do you usually travel?
|
|
160
|
+
name: travelMethod
|
|
161
|
+
shortDescription: Your travel method
|
|
162
|
+
hint: ''
|
|
163
|
+
options:
|
|
164
|
+
required: true
|
|
165
|
+
schema: {}
|
|
166
|
+
list: aabbccdd-1122-3344-5566-778899001125
|
|
167
|
+
id: aabbccdd-1122-3344-5566-778899001124
|
|
168
|
+
next: []
|
|
169
|
+
id: aabbccdd-1122-3344-5566-778899001122
|
|
81
170
|
- title: ''
|
|
82
171
|
path: '/notification-demo'
|
|
83
172
|
components:
|
|
@@ -103,4 +192,18 @@ pages:
|
|
|
103
192
|
controller: SummaryPageController
|
|
104
193
|
conditions: []
|
|
105
194
|
sections: []
|
|
106
|
-
lists:
|
|
195
|
+
lists:
|
|
196
|
+
- id: aabbccdd-1122-3344-5566-778899001125
|
|
197
|
+
name: travelMethods
|
|
198
|
+
title: Travel methods
|
|
199
|
+
type: string
|
|
200
|
+
items:
|
|
201
|
+
- id: aabbccdd-1122-3344-5566-778899001126
|
|
202
|
+
text: Car
|
|
203
|
+
value: car
|
|
204
|
+
- id: aabbccdd-1122-3344-5566-778899001127
|
|
205
|
+
text: Bus
|
|
206
|
+
value: bus
|
|
207
|
+
- id: aabbccdd-1122-3344-5566-778899001128
|
|
208
|
+
text: Train
|
|
209
|
+
value: train
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { type AutocompleteFieldComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { SelectField } from './SelectField.js'
|
|
4
|
+
import { type RenderContext } from './types.js'
|
|
4
5
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
5
|
-
import {
|
|
6
|
-
type FormPayload,
|
|
7
|
-
type FormSubmissionError
|
|
8
|
-
} from '../types.js'
|
|
9
6
|
|
|
10
7
|
export class AutocompleteField extends SelectField {
|
|
11
8
|
declare options: AutocompleteFieldComponent['options']
|
|
@@ -34,8 +31,8 @@ export class AutocompleteField extends SelectField {
|
|
|
34
31
|
this.formSchema = formSchema
|
|
35
32
|
}
|
|
36
33
|
|
|
37
|
-
getViewModel(
|
|
38
|
-
const viewModel = super.getViewModel(
|
|
34
|
+
getViewModel(context: RenderContext) {
|
|
35
|
+
const viewModel = super.getViewModel(context)
|
|
39
36
|
let { formGroup } = viewModel
|
|
40
37
|
|
|
41
38
|
formGroup ??= {}
|
|
@@ -3,6 +3,7 @@ import joi, { type ArraySchema } from 'joi'
|
|
|
3
3
|
|
|
4
4
|
import { isFormValue } from './FormComponent.js'
|
|
5
5
|
import { SelectionControlField } from './SelectionControlField.js'
|
|
6
|
+
import { type Translator } from '../i18n/types.js'
|
|
6
7
|
import { type FormModel } from '../models/FormModel.js'
|
|
7
8
|
import { type QuestionPageController } from '../pageControllers/QuestionPageController.js'
|
|
8
9
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
@@ -41,9 +42,9 @@ export class CheckboxesField extends SelectionControlField {
|
|
|
41
42
|
.label(this.label)
|
|
42
43
|
.required()
|
|
43
44
|
.messages({
|
|
44
|
-
'array.min': messageTemplate.arrayMin
|
|
45
|
-
'array.max': messageTemplate.arrayMax
|
|
46
|
-
'array.length': messageTemplate.arrayLength
|
|
45
|
+
'array.min': messageTemplate.arrayMin,
|
|
46
|
+
'array.max': messageTemplate.arrayMax,
|
|
47
|
+
'array.length': messageTemplate.arrayLength
|
|
47
48
|
})
|
|
48
49
|
|
|
49
50
|
if (options.required === false) {
|
|
@@ -86,7 +87,8 @@ export class CheckboxesField extends SelectionControlField {
|
|
|
86
87
|
}
|
|
87
88
|
|
|
88
89
|
getDisplayStringFromFormValue(
|
|
89
|
-
selected: (string | number | boolean)[] | undefined
|
|
90
|
+
selected: (string | number | boolean)[] | undefined,
|
|
91
|
+
translator: Translator
|
|
90
92
|
) {
|
|
91
93
|
const { items } = this
|
|
92
94
|
|
|
@@ -94,10 +96,9 @@ export class CheckboxesField extends SelectionControlField {
|
|
|
94
96
|
return ''
|
|
95
97
|
}
|
|
96
98
|
|
|
97
|
-
// Map selected values to text
|
|
98
99
|
return items
|
|
99
100
|
.filter((item) => selected.includes(item.value))
|
|
100
|
-
.map((item) => item.text)
|
|
101
|
+
.map((item) => translator.tListItem(item, 'text') || item.text)
|
|
101
102
|
.join(', ')
|
|
102
103
|
}
|
|
103
104
|
|
|
@@ -118,12 +119,12 @@ export class CheckboxesField extends SelectionControlField {
|
|
|
118
119
|
return values ?? []
|
|
119
120
|
}
|
|
120
121
|
|
|
121
|
-
getDisplayStringFromState(
|
|
122
|
-
|
|
122
|
+
getDisplayStringFromState(
|
|
123
|
+
state: FormSubmissionState,
|
|
124
|
+
translator: Translator
|
|
125
|
+
) {
|
|
123
126
|
const selected = this.getFormValueFromState(state) ?? []
|
|
124
|
-
|
|
125
|
-
// Map selected values to text
|
|
126
|
-
return this.getDisplayStringFromFormValue(selected)
|
|
127
|
+
return this.getDisplayStringFromFormValue(selected, translator)
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
getContextValueFromState(state: FormSubmissionState) {
|