@defra/forms-engine-plugin 5.0.0-alpha.2 → 5.0.0-alpha.20
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/javascripts/application.min.js +1 -1
- package/.public/javascripts/application.min.js.LICENSE.txt +7 -0
- package/.public/javascripts/application.min.js.map +1 -1
- package/.public/javascripts/shared.min.js +1 -1
- package/.public/javascripts/shared.min.js.LICENSE.txt +7 -0
- package/.public/javascripts/shared.min.js.map +1 -1
- package/.public/stylesheets/application.min.css.map +1 -1
- package/.server/client/javascripts/file-upload.js +6 -3
- package/.server/client/javascripts/file-upload.js.map +1 -1
- package/.server/client/javascripts/geospatial-map.d.ts +153 -5
- package/.server/client/javascripts/geospatial-map.js +157 -77
- package/.server/client/javascripts/geospatial-map.js.map +1 -1
- package/.server/client/javascripts/govuk.js +2 -1
- package/.server/client/javascripts/govuk.js.map +1 -1
- package/.server/client/javascripts/location-map.d.ts +44 -0
- package/.server/client/javascripts/location-map.js +54 -5
- package/.server/client/javascripts/location-map.js.map +1 -1
- package/.server/client/javascripts/map-constants.d.ts +3 -0
- package/.server/client/javascripts/map-constants.js +4 -0
- package/.server/client/javascripts/map-constants.js.map +1 -0
- package/.server/client/javascripts/map.d.ts +10 -0
- package/.server/client/javascripts/map.js +42 -0
- package/.server/client/javascripts/map.js.map +1 -1
- package/.server/client/javascripts/maps.d.ts +5 -0
- package/.server/client/javascripts/maps.js +6 -0
- package/.server/client/javascripts/maps.js.map +1 -0
- package/.server/client/javascripts/shared.d.ts +1 -4
- package/.server/client/javascripts/shared.js +1 -4
- package/.server/client/javascripts/shared.js.map +1 -1
- package/.server/client/javascripts/sssi-dataset.d.ts +18 -20
- package/.server/client/javascripts/sssi-dataset.js +37 -39
- package/.server/client/javascripts/sssi-dataset.js.map +1 -1
- package/.server/client/stylesheets/maps.scss +4 -0
- package/.server/client/stylesheets/shared.scss +1 -5
- package/.server/server/constants.d.ts +2 -0
- package/.server/server/constants.js +2 -0
- package/.server/server/constants.js.map +1 -1
- package/.server/server/plugins/engine/__stubs__/definitions.d.ts +29 -0
- package/.server/server/plugins/engine/__stubs__/definitions.js +125 -0
- package/.server/server/plugins/engine/__stubs__/definitions.js.map +1 -0
- package/.server/server/plugins/engine/components/AutocompleteField.d.ts +9 -3
- package/.server/server/plugins/engine/components/AutocompleteField.js +12 -0
- package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
- package/.server/server/plugins/engine/components/CheckboxesField.d.ts +21 -0
- package/.server/server/plugins/engine/components/CheckboxesField.js +30 -5
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentBase.d.ts +1 -0
- package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
- package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js +11 -6
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
- package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
- package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
- package/.server/server/plugins/engine/components/DeclarationField.d.ts +5 -2
- package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
- package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
- package/.server/server/plugins/engine/components/Details.d.ts +1 -0
- package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +33 -2
- package/.server/server/plugins/engine/components/EastingNorthingField.js +110 -54
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
- package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
- package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
- package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +21 -0
- package/.server/server/plugins/engine/components/FileUploadField.js +35 -3
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
- package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
- package/.server/server/plugins/engine/components/FormComponent.js +5 -2
- package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/GeospatialField.d.ts +23 -0
- package/.server/server/plugins/engine/components/GeospatialField.js +33 -9
- package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
- package/.server/server/plugins/engine/components/Html.d.ts +1 -0
- package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
- package/.server/server/plugins/engine/components/LatLongField.d.ts +32 -2
- package/.server/server/plugins/engine/components/LatLongField.js +85 -48
- package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
- package/.server/server/plugins/engine/components/List.d.ts +1 -0
- package/.server/server/plugins/engine/components/ListFormComponent.d.ts +1 -0
- package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
- package/.server/server/plugins/engine/components/LocationFieldBase.js +25 -6
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +12 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +21 -13
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
- package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
- package/.server/server/plugins/engine/components/Markdown.js +1 -1
- package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
- package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
- package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
- package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
- package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
- package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
- package/.server/server/plugins/engine/components/NumberField.js +16 -0
- package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/OsGridRefField.d.ts +103 -1
- package/.server/server/plugins/engine/components/OsGridRefField.js +13 -3
- package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
- package/.server/server/plugins/engine/components/PaymentField.d.ts +3 -0
- package/.server/server/plugins/engine/components/PaymentField.js +17 -6
- package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
- package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
- package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
- package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.d.ts +5 -2
- package/.server/server/plugins/engine/components/YesNoField.js +17 -8
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/components.js +3 -3
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +8 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.js +56 -15
- package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/index.d.ts +7 -0
- package/.server/server/plugins/engine/components/helpers/index.js +13 -1
- package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
- package/.server/server/plugins/engine/components/types.d.ts +1 -0
- package/.server/server/plugins/engine/components/types.js.map +1 -1
- package/.server/server/plugins/engine/errors.d.ts +49 -0
- package/.server/server/plugins/engine/errors.js +75 -0
- package/.server/server/plugins/engine/errors.js.map +1 -0
- package/.server/server/plugins/engine/form-availability.d.ts +3 -2
- package/.server/server/plugins/engine/form-availability.js +3 -2
- package/.server/server/plugins/engine/form-availability.js.map +1 -1
- package/.server/server/plugins/engine/form-context.js +2 -2
- package/.server/server/plugins/engine/form-context.js.map +1 -1
- package/.server/server/plugins/engine/helpers.d.ts +22 -2
- package/.server/server/plugins/engine/helpers.js +44 -5
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +4 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +31 -7
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
- package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
- package/.server/server/plugins/engine/i18n/createFormTranslator.js +33 -4
- package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
- package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
- package/.server/server/plugins/engine/i18n/form.js +35 -0
- package/.server/server/plugins/engine/i18n/form.js.map +1 -0
- package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
- package/.server/server/plugins/engine/i18n/languages.js +19 -0
- package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
- package/.server/server/plugins/engine/i18n/translations/cy.json +192 -9
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +125 -7
- package/.server/server/plugins/engine/i18n/types.d.ts +3 -0
- package/.server/server/plugins/engine/i18n/types.js.map +1 -1
- package/.server/server/plugins/engine/index.d.ts +4 -0
- package/.server/server/plugins/engine/index.js +4 -0
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
- package/.server/server/plugins/engine/models/FormModel.js +19 -17
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/models/unavailable-view-model.d.ts +11 -2
- package/.server/server/plugins/engine/models/unavailable-view-model.js +23 -4
- package/.server/server/plugins/engine/models/unavailable-view-model.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +3 -5
- 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/v2.d.ts +2 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
- package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +7 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +56 -10
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +7 -3
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js +2 -1
- package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js +3 -3
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +24 -3
- package/.server/server/plugins/engine/pageControllers/validationOptions.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 +5 -0
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/unavailable-response.js +5 -2
- package/.server/server/plugins/engine/unavailable-response.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 +1 -1
- package/.server/server/plugins/engine/views/components/geospatialfield.html +1 -0
- package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -1
- package/.server/server/plugins/engine/views/components/osgridreffield.html +4 -1
- package/.server/server/plugins/engine/views/components/paymentfield.html +1 -1
- package/.server/server/plugins/engine/views/components/ukaddressfield.html +1 -1
- package/.server/server/plugins/engine/views/file-upload.html +1 -1
- package/.server/server/plugins/engine/views/partials/preview-banner.html +3 -1
- package/.server/server/plugins/engine/views/unavailable.html +14 -11
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
- package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
- package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
- package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
- package/.server/server/plugins/nunjucks/filters/index.js +1 -0
- package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
- package/.server/server/plugins/payment/helper.d.ts +11 -1
- package/.server/server/plugins/payment/helper.js +18 -2
- package/.server/server/plugins/payment/helper.js.map +1 -1
- package/.server/server/plugins/payment/helper.test.js +2 -1
- package/.server/server/plugins/payment/helper.test.js.map +1 -1
- package/.server/server/plugins/payment/service.d.ts +2 -1
- package/.server/server/plugins/payment/service.js +5 -2
- package/.server/server/plugins/payment/service.js.map +1 -1
- package/.server/server/plugins/payment/service.test.js +7 -3
- package/.server/server/plugins/payment/service.test.js.map +1 -1
- package/.server/server/plugins/payment/types.d.ts +4 -0
- package/.server/server/plugins/payment/types.js +1 -0
- package/.server/server/plugins/payment/types.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
- package/.server/server/plugins/postcode-lookup/models/index.js +87 -33
- package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
- package/.server/server/plugins/postcode-lookup/routes/index.js +47 -15
- package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
- package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
- package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
- package/.server/server/plugins/postcode-lookup/types.js +6 -1
- 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/utils/type-utils.d.ts +1 -2
- package/.server/server/utils/type-utils.js +0 -3
- package/.server/server/utils/type-utils.js.map +1 -1
- package/.server/server/utils/utils.d.ts +6 -0
- package/.server/server/utils/utils.js +18 -1
- package/.server/server/utils/utils.js.map +1 -1
- package/.server/server/utils/utils.test.js +21 -1
- package/.server/server/utils/utils.test.js.map +1 -1
- package/package.json +20 -5
- package/src/client/javascripts/file-upload.js +11 -3
- package/src/client/javascripts/geospatial-map.js +176 -81
- package/src/client/javascripts/govuk.js +2 -0
- package/src/client/javascripts/location-map.js +60 -4
- package/src/client/javascripts/map-constants.js +3 -0
- package/src/client/javascripts/map.js +47 -0
- package/src/client/javascripts/maps.js +5 -0
- package/src/client/javascripts/shared.js +1 -4
- package/src/client/javascripts/sssi-dataset.js +39 -41
- package/src/client/stylesheets/maps.scss +4 -0
- package/src/client/stylesheets/shared.scss +1 -5
- package/src/server/constants.js +2 -0
- package/src/server/plugins/engine/__stubs__/definitions.ts +155 -0
- package/src/server/plugins/engine/components/AutocompleteField.ts +13 -0
- package/src/server/plugins/engine/components/CheckboxesField.ts +38 -5
- package/src/server/plugins/engine/components/ComponentBase.ts +2 -0
- package/src/server/plugins/engine/components/ComponentCollection.ts +16 -11
- package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
- package/src/server/plugins/engine/components/DeclarationField.ts +7 -6
- package/src/server/plugins/engine/components/EastingNorthingField.ts +185 -89
- package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
- package/src/server/plugins/engine/components/FileUploadField.ts +44 -3
- package/src/server/plugins/engine/components/FormComponent.ts +6 -5
- package/src/server/plugins/engine/components/GeospatialField.ts +47 -9
- package/src/server/plugins/engine/components/LatLongField.ts +128 -58
- package/src/server/plugins/engine/components/LocationFieldBase.ts +30 -7
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +28 -14
- package/src/server/plugins/engine/components/Markdown.ts +2 -3
- package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
- package/src/server/plugins/engine/components/NumberField.ts +21 -1
- package/src/server/plugins/engine/components/OsGridRefField.ts +22 -3
- package/src/server/plugins/engine/components/PaymentField.ts +15 -5
- package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
- package/src/server/plugins/engine/components/YesNoField.ts +17 -9
- package/src/server/plugins/engine/components/helpers/components.ts +3 -3
- package/src/server/plugins/engine/components/helpers/geospatial.ts +84 -21
- package/src/server/plugins/engine/components/helpers/index.ts +19 -0
- package/src/server/plugins/engine/components/types.ts +1 -0
- package/src/server/plugins/engine/errors.ts +78 -0
- package/src/server/plugins/engine/form-availability.ts +8 -2
- package/src/server/plugins/engine/form-context.ts +4 -2
- package/src/server/plugins/engine/helpers.ts +52 -5
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +16 -8
- package/src/server/plugins/engine/i18n/createFormTranslator.ts +62 -11
- package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
- package/src/server/plugins/engine/i18n/form.ts +54 -0
- package/src/server/plugins/engine/i18n/languages.ts +19 -0
- package/src/server/plugins/engine/i18n/translations/cy.json +192 -9
- package/src/server/plugins/engine/i18n/translations/en-GB.json +125 -7
- package/src/server/plugins/engine/i18n/types.ts +3 -0
- package/src/server/plugins/engine/index.ts +7 -0
- package/src/server/plugins/engine/models/FormModel.ts +21 -17
- package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
- package/src/server/plugins/engine/models/unavailable-view-model.ts +26 -5
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +3 -6
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
- package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +60 -9
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +10 -5
- package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
- package/src/server/plugins/engine/pageControllers/helpers/pages.ts +2 -1
- package/src/server/plugins/engine/pageControllers/helpers/submission.ts +6 -3
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +29 -4
- package/src/server/plugins/engine/types/schema.ts +1 -0
- package/src/server/plugins/engine/types.ts +5 -0
- package/src/server/plugins/engine/unavailable-response.ts +6 -2
- package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
- package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
- package/src/server/plugins/engine/views/components/geospatialfield.html +1 -0
- package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -1
- package/src/server/plugins/engine/views/components/osgridreffield.html +4 -1
- package/src/server/plugins/engine/views/components/paymentfield.html +1 -1
- package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
- package/src/server/plugins/engine/views/file-upload.html +1 -1
- package/src/server/plugins/engine/views/partials/preview-banner.html +3 -1
- package/src/server/plugins/engine/views/unavailable.html +14 -11
- package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
- package/src/server/plugins/nunjucks/filters/index.js +1 -0
- package/src/server/plugins/payment/helper.js +22 -2
- package/src/server/plugins/payment/service.js +6 -2
- package/src/server/plugins/payment/types.js +1 -0
- package/src/server/plugins/postcode-lookup/models/index.js +75 -43
- package/src/server/plugins/postcode-lookup/routes/index.js +73 -16
- package/src/server/plugins/postcode-lookup/types.js +6 -1
- package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/src/server/utils/type-utils.ts +1 -11
- package/src/server/utils/utils.js +19 -1
|
@@ -114,7 +114,7 @@ export class SummaryPageController extends QuestionPageController {
|
|
|
114
114
|
viewModel.paymentDetails = this.buildPaymentDetails(
|
|
115
115
|
paymentField,
|
|
116
116
|
paymentState,
|
|
117
|
-
|
|
117
|
+
translator
|
|
118
118
|
)
|
|
119
119
|
}
|
|
120
120
|
|
|
@@ -151,8 +151,9 @@ export class SummaryPageController extends QuestionPageController {
|
|
|
151
151
|
paymentState: NonNullable<
|
|
152
152
|
ReturnType<PaymentField['getPaymentStateFromState']>
|
|
153
153
|
>,
|
|
154
|
-
|
|
154
|
+
translator: Translator
|
|
155
155
|
) {
|
|
156
|
+
const { t } = translator
|
|
156
157
|
const rows = [
|
|
157
158
|
{
|
|
158
159
|
key: { text: t('pages.summary.paymentFor') },
|
|
@@ -171,7 +172,12 @@ export class SummaryPageController extends QuestionPageController {
|
|
|
171
172
|
if (paymentState.preAuth?.createdAt) {
|
|
172
173
|
rows.push({
|
|
173
174
|
key: { text: t('pages.summary.dateOfPayment') },
|
|
174
|
-
value: {
|
|
175
|
+
value: {
|
|
176
|
+
text: formatPaymentDate(
|
|
177
|
+
paymentState.preAuth.createdAt,
|
|
178
|
+
translator.language
|
|
179
|
+
)
|
|
180
|
+
}
|
|
175
181
|
})
|
|
176
182
|
}
|
|
177
183
|
|
|
@@ -557,7 +563,12 @@ function submitData(
|
|
|
557
563
|
retrievalKey,
|
|
558
564
|
referenceNumber,
|
|
559
565
|
main: buildMainRecords(items, translator),
|
|
560
|
-
repeaters: buildRepeaterRecords(items, translator)
|
|
566
|
+
repeaters: buildRepeaterRecords(items, translator),
|
|
567
|
+
// Only populate the language property if the form is multi-language enabled
|
|
568
|
+
// @ts-expect-error - dynamic language property
|
|
569
|
+
language: model.def.metadata?.translations?.cy
|
|
570
|
+
? translator.language
|
|
571
|
+
: undefined
|
|
561
572
|
}
|
|
562
573
|
return submit(payload)
|
|
563
574
|
}
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
type Page
|
|
5
5
|
} from '@defra/forms-model'
|
|
6
6
|
|
|
7
|
+
import { UnknownPageControllerError } from '../../errors.js'
|
|
7
8
|
import { type FormModel } from '../../models/index.js'
|
|
8
9
|
import * as PageControllers from '../index.js'
|
|
9
10
|
|
|
@@ -66,7 +67,7 @@ export function createPage(model: FormModel, pageDef: Page) {
|
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
if (typeof controller === 'undefined') {
|
|
69
|
-
throw new
|
|
70
|
+
throw new UnknownPageControllerError(pageDef.controller)
|
|
70
71
|
}
|
|
71
72
|
|
|
72
73
|
return controller
|
|
@@ -36,7 +36,7 @@ export function buildMainRecords(
|
|
|
36
36
|
|
|
37
37
|
for (const item of fieldItems) {
|
|
38
38
|
if (item.field instanceof PaymentField) {
|
|
39
|
-
records.push(...buildPaymentRecords(item))
|
|
39
|
+
records.push(...buildPaymentRecords(item, translator))
|
|
40
40
|
} else if (item.field instanceof GeospatialField) {
|
|
41
41
|
// Stringify of GeoJSON is done here rather than inside `getContextValueFromState`
|
|
42
42
|
// so we don't incur the overhead of JSON.stringify on every request when building context
|
|
@@ -67,7 +67,10 @@ export function buildMainRecords(
|
|
|
67
67
|
*
|
|
68
68
|
* Returns an empty array if no payment state exists.
|
|
69
69
|
*/
|
|
70
|
-
export function buildPaymentRecords(
|
|
70
|
+
export function buildPaymentRecords(
|
|
71
|
+
item: DetailItemField,
|
|
72
|
+
translator: Translator
|
|
73
|
+
): SubmitRecord[] {
|
|
71
74
|
const paymentState = (item.field as PaymentField).getPaymentStateFromState(
|
|
72
75
|
item.state
|
|
73
76
|
)
|
|
@@ -96,7 +99,7 @@ export function buildPaymentRecords(item: DetailItemField): SubmitRecord[] {
|
|
|
96
99
|
name: `${item.name}_paymentDate`,
|
|
97
100
|
title: 'Payment date',
|
|
98
101
|
value: paymentState.preAuth?.createdAt
|
|
99
|
-
? formatPaymentDate(paymentState.preAuth.createdAt)
|
|
102
|
+
? formatPaymentDate(paymentState.preAuth.createdAt, translator.language)
|
|
100
103
|
: ''
|
|
101
104
|
}
|
|
102
105
|
]
|
|
@@ -26,7 +26,7 @@ export const opts = {
|
|
|
26
26
|
* import messageTemplate directly and get the English version.
|
|
27
27
|
*/
|
|
28
28
|
export const messageTemplate: ValidationMessages = buildValidationMessages(
|
|
29
|
-
(key) => t(key, 'en-GB')
|
|
29
|
+
(key, options) => t(key, 'en-GB', options)
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
export const messages: LanguageMessagesExt = {
|
|
@@ -58,14 +58,28 @@ export const messages: LanguageMessagesExt = {
|
|
|
58
58
|
'date.min': messageTemplate.dateMin,
|
|
59
59
|
'date.max': messageTemplate.dateMax,
|
|
60
60
|
|
|
61
|
-
'
|
|
61
|
+
'array.min': messageTemplate.arrayMin,
|
|
62
|
+
'array.max': messageTemplate.arrayMax,
|
|
63
|
+
'array.length': messageTemplate.arrayLength,
|
|
64
|
+
|
|
65
|
+
'features.min': messageTemplate.featuresMin,
|
|
66
|
+
'features.max': messageTemplate.featuresMax,
|
|
67
|
+
'features.length': messageTemplate.featuresLength,
|
|
68
|
+
|
|
69
|
+
'files.min': messageTemplate.filesMin,
|
|
70
|
+
'files.max': messageTemplate.filesMax,
|
|
71
|
+
'filees.length': messageTemplate.filesLength,
|
|
72
|
+
|
|
73
|
+
'object.invalidjson': messageTemplate.format,
|
|
74
|
+
|
|
75
|
+
'phoneNumber.invalid': messageTemplate.format
|
|
62
76
|
}
|
|
63
77
|
|
|
64
78
|
export const messagesPre: LanguageMessages =
|
|
65
79
|
messages as unknown as LanguageMessages
|
|
66
80
|
|
|
67
81
|
export function buildLanguageMessages(
|
|
68
|
-
t: (key: string) => string
|
|
82
|
+
t: (key: string, options?: Record<string, unknown>) => string
|
|
69
83
|
): LanguageMessages {
|
|
70
84
|
const vm = buildValidationMessages(t)
|
|
71
85
|
return {
|
|
@@ -76,6 +90,7 @@ export function buildLanguageMessages(
|
|
|
76
90
|
'string.email': vm.format,
|
|
77
91
|
'string.pattern.base': vm.pattern,
|
|
78
92
|
'string.maxWords': vm.maxWords,
|
|
93
|
+
'string.unicode': vm.unicode,
|
|
79
94
|
'number.base': vm.number,
|
|
80
95
|
'number.precision': vm.numberPrecision,
|
|
81
96
|
'number.integer': vm.numberInteger,
|
|
@@ -91,7 +106,17 @@ export function buildLanguageMessages(
|
|
|
91
106
|
'date.format': vm.dateFormat,
|
|
92
107
|
'date.min': vm.dateMin,
|
|
93
108
|
'date.max': vm.dateMax,
|
|
94
|
-
'
|
|
109
|
+
'array.min': vm.arrayMin,
|
|
110
|
+
'array.max': vm.arrayMax,
|
|
111
|
+
'array.length': vm.arrayLength,
|
|
112
|
+
'features.min': vm.featuresMin,
|
|
113
|
+
'features.max': vm.featuresMax,
|
|
114
|
+
'features.length': vm.featuresLength,
|
|
115
|
+
'files.min': vm.filesMin,
|
|
116
|
+
'files.max': vm.filesMax,
|
|
117
|
+
'files.length': vm.filesLength,
|
|
118
|
+
'object.invalidjson': vm.format,
|
|
119
|
+
'phoneNumber.invalid': vm.format
|
|
95
120
|
} as unknown as LanguageMessages
|
|
96
121
|
}
|
|
97
122
|
|
|
@@ -50,6 +50,7 @@ export const formAdapterSubmissionMessageDataSchema =
|
|
|
50
50
|
reference: Joi.string().required(),
|
|
51
51
|
amount: Joi.number().required(),
|
|
52
52
|
description: Joi.string().required(),
|
|
53
|
+
descriptionInEng: Joi.string().optional(),
|
|
53
54
|
createdAt: Joi.string().required()
|
|
54
55
|
})
|
|
55
56
|
.optional(),
|
|
@@ -245,11 +245,15 @@ export type FileUpload = {
|
|
|
245
245
|
} & (
|
|
246
246
|
| {
|
|
247
247
|
fileStatus: FileStatus.complete | FileStatus.rejected | FileStatus.pending
|
|
248
|
+
errorCode?: string
|
|
248
249
|
errorMessage?: string
|
|
250
|
+
errorParams?: Record<string, number | string | string[]>
|
|
249
251
|
}
|
|
250
252
|
| {
|
|
251
253
|
fileStatus: FileStatus.complete
|
|
254
|
+
errorCode?: string
|
|
252
255
|
errorMessage?: undefined
|
|
256
|
+
errorParams?: Record<string, number | string | string[]>
|
|
253
257
|
}
|
|
254
258
|
)
|
|
255
259
|
|
|
@@ -558,6 +562,7 @@ export interface FormAdapterPayment {
|
|
|
558
562
|
reference: string
|
|
559
563
|
amount: number
|
|
560
564
|
description: string
|
|
565
|
+
descriptionInEng?: string
|
|
561
566
|
createdAt: string
|
|
562
567
|
}
|
|
563
568
|
|
|
@@ -2,6 +2,8 @@ import { type Request, type ResponseToolkit, type Server } from '@hapi/hapi'
|
|
|
2
2
|
|
|
3
3
|
import { isOfflineBoom } from './form-availability.js'
|
|
4
4
|
import { unavailableViewModel } from './models/unavailable-view-model.js'
|
|
5
|
+
import { type AnyFormRequest } from './types.js'
|
|
6
|
+
import { resolveLanguage } from '../../utils/utils.js'
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* Registers a server-wide onPreResponse extension that intercepts the offline
|
|
@@ -17,10 +19,12 @@ export function registerUnavailableResponse(server: Server) {
|
|
|
17
19
|
return h.continue
|
|
18
20
|
}
|
|
19
21
|
|
|
20
|
-
const { metadata } = response.data
|
|
22
|
+
const { metadata, definition } = response.data
|
|
23
|
+
|
|
24
|
+
const language = resolveLanguage(request as unknown as AnyFormRequest)
|
|
21
25
|
|
|
22
26
|
return h
|
|
23
|
-
.view('unavailable', unavailableViewModel(metadata))
|
|
27
|
+
.view('unavailable', unavailableViewModel(metadata, definition, language))
|
|
24
28
|
.header('Cache-Control', 'no-store, no-cache, must-revalidate')
|
|
25
29
|
.header('X-Robots-Tag', 'noindex, nofollow')
|
|
26
30
|
.code(200)
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
{% set detailsHtml %}
|
|
62
62
|
{% if component.model.instructionText %}
|
|
63
63
|
{{ govukDetails({
|
|
64
|
-
summaryText:
|
|
64
|
+
summaryText: component.model.instructionSummary,
|
|
65
65
|
html: component.model.instructionText | markdown | safe,
|
|
66
66
|
classes: "govuk-!-margin-top-3"
|
|
67
67
|
}) }}
|
|
@@ -70,8 +70,10 @@
|
|
|
70
70
|
|
|
71
71
|
{% set hasErrors = showFieldsetError and component.model.errorMessage %}
|
|
72
72
|
|
|
73
|
-
<div class="govuk-form-group app-location-field {{ "govuk-form-group--error" if hasErrors }}"
|
|
73
|
+
<div id="{{component.model.name}}" class="govuk-form-group app-location-field {{ "govuk-form-group--error" if hasErrors }}"
|
|
74
74
|
data-locationtype="{{component.type | lower}}"
|
|
75
|
+
data-country="{{component.model.country}}"
|
|
76
|
+
data-lang="{{component.model.lang}}"
|
|
75
77
|
data-maplayers="{{component.model.mapLayers}}">
|
|
76
78
|
{{ govukFieldset({
|
|
77
79
|
legend: {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
{% macro FileUploadField(component) %}
|
|
4
4
|
{% set upload = component.model.upload %}
|
|
5
5
|
|
|
6
|
-
<div id="uploadedFilesContainer">
|
|
6
|
+
<div id="uploadedFilesContainer" data-uploadinglabel="{{ upload.uploadingLabel }}">
|
|
7
7
|
<h2 class="govuk-heading-m">{{ t('components.fileUploadField.uploadedFilesHeading') }}</h2>
|
|
8
8
|
{% if upload.count %}
|
|
9
9
|
<p class="govuk-body" role="alert">{{ t('components.fileUploadField.filesCount', { count: upload.count }) }}</p>
|
|
@@ -3,7 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
{% macro MultilineTextField(component) %}
|
|
5
5
|
{% if component.model.isCharacterOrWordCount == true %}
|
|
6
|
-
{
|
|
6
|
+
{% set characterParams = component.model | merge({
|
|
7
|
+
charactersUnderLimitText: {
|
|
8
|
+
one: t('components.characterCount.underLimit.one'),
|
|
9
|
+
other: t('components.characterCount.underLimit.other')
|
|
10
|
+
},
|
|
11
|
+
charactersAtLimitText: t('components.characterCount.atLimit'),
|
|
12
|
+
charactersOverLimitText: {
|
|
13
|
+
one: t('components.characterCount.overLimit.one'),
|
|
14
|
+
other: t('components.characterCount.overLimit.other')
|
|
15
|
+
}
|
|
16
|
+
} ) %}
|
|
17
|
+
{{ govukCharacterCount(characterParams) }}
|
|
7
18
|
{% else %}
|
|
8
19
|
{{ govukTextarea(component.model) }}
|
|
9
20
|
{% endif %}
|
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
|
|
4
4
|
{% macro OsGridRefField(component) %}
|
|
5
5
|
{% set hasErrors = component.model.errorMessage %}
|
|
6
|
-
<div class="govuk-form-group app-location-field {{ "govuk-form-group--error" if hasErrors }}"
|
|
6
|
+
<div class="govuk-form-group app-location-field {{ "govuk-form-group--error" if hasErrors }}"
|
|
7
|
+
data-locationtype="{{component.type | lower}}"
|
|
8
|
+
data-lang="{{component.model.lang}}"
|
|
9
|
+
data-maplayers="{{component.model.mapLayers}}">
|
|
7
10
|
<div class="app-location-field-inputs">
|
|
8
11
|
{{ TextField(component) }}
|
|
9
12
|
</div>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<p class="govuk-body">{{ t('components.paymentField.preAuthorisedBody') }}</p>
|
|
17
17
|
{% else %}
|
|
18
18
|
{# No pre-authorisation - show payment form #}
|
|
19
|
-
<h2 class="govuk-heading-m">{{
|
|
19
|
+
<h2 class="govuk-heading-m">{{ t('components.paymentField.detailsRequired') }}</h2>
|
|
20
20
|
|
|
21
21
|
<p class="govuk-body">{{ description }}</p>
|
|
22
22
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
},
|
|
62
62
|
classes: "govuk-button--secondary govuk-!-margin-right-1 govuk-!-margin-bottom-0"
|
|
63
63
|
}) }}
|
|
64
|
-
<p class="govuk-body govuk-!-margin-bottom-0">or <button class="govuk-link govuk-button--link govuk-!-margin-right-1 govuk-!-margin-bottom-0" name="action" value="external-{{component.model.name}}--step:manual">{{ t('components.addressField.enterManually') }}</button></p>
|
|
64
|
+
<p class="govuk-body govuk-!-margin-bottom-0">{{ t('common.or')}} <button class="govuk-link govuk-button--link govuk-!-margin-right-1 govuk-!-margin-bottom-0" name="action" value="external-{{component.model.name}}--step:manual">{{ t('components.addressField.enterManually') }}</button></p>
|
|
65
65
|
</div>
|
|
66
66
|
{# Include a line break if this is the last component #}
|
|
67
67
|
{% if components[components.length - 1] == component %}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
{% if formAction %}
|
|
16
16
|
{{ govukButton({
|
|
17
17
|
text: t('pages.fileUpload.upload'),
|
|
18
|
-
classes: "govuk-button--secondary upload-file-button",
|
|
18
|
+
classes: "govuk-button--secondary upload-file-button js-hidden",
|
|
19
19
|
preventDoubleClick: true,
|
|
20
20
|
disabled: context.isForceAccess
|
|
21
21
|
}) }}
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
</p>
|
|
9
9
|
{%- endmacro -%}
|
|
10
10
|
|
|
11
|
-
{% call govukNotificationBanner(
|
|
11
|
+
{% call govukNotificationBanner({
|
|
12
|
+
titleText: t('pages.preview.bannerTitle')
|
|
13
|
+
}) %}
|
|
12
14
|
{% set previewModeTranslated = t('common.' + previewMode) %}
|
|
13
15
|
{% if not context.isForceAccess %}
|
|
14
16
|
<p class="govuk-notification-banner__heading govuk-!-margin-bottom-0">
|
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
{% extends baseLayoutPath %}
|
|
2
2
|
|
|
3
|
+
{% set t = context.translator.t %}
|
|
4
|
+
{% set tForm = context.translator.tForm %}
|
|
5
|
+
|
|
3
6
|
{% block content %}
|
|
4
7
|
<div class="govuk-grid-row">
|
|
5
8
|
<div class="govuk-grid-column-two-thirds">
|
|
6
|
-
<h1 class="govuk-heading-l">
|
|
7
|
-
<p class="govuk-body">
|
|
8
|
-
<h2 class="govuk-heading-m">
|
|
9
|
+
<h1 class="govuk-heading-l">{{ t('pages.formUnavailable.title') }}</h1>
|
|
10
|
+
<p class="govuk-body">{{ t('pages.formUnavailable.subHeading', { formTitle: formTitle }) }}</p>
|
|
11
|
+
<h2 class="govuk-heading-m">{{ t('pages.formUnavailable.contactDetailsHeading', { organisationName: organisationName }) }}</h2>
|
|
9
12
|
|
|
10
13
|
{% if contact.phone %}
|
|
11
|
-
<h3 class="govuk-heading-s">
|
|
14
|
+
<h3 class="govuk-heading-s">{{ t('pages.formUnavailable.telephone') }}</h3>
|
|
12
15
|
<div class="app-prose-scope">
|
|
13
|
-
{{ contact.phone | markdown(3) | safe }}
|
|
16
|
+
{{ tForm('contact.phone') | markdown(3) | safe }}
|
|
14
17
|
</div>
|
|
15
|
-
<p class="govuk-body"><a href="https://www.gov.uk/call-charges" class="govuk-link govuk-link--no-visited-state">
|
|
18
|
+
<p class="govuk-body"><a href="https://www.gov.uk/call-charges" class="govuk-link govuk-link--no-visited-state">{{ t('pages.formUnavailable.callCharges') }}</a></p>
|
|
16
19
|
{% endif %}
|
|
17
20
|
|
|
18
21
|
{% if contact.email %}
|
|
19
|
-
<h3 class="govuk-heading-s">
|
|
22
|
+
<h3 class="govuk-heading-s">{{ t('pages.formUnavailable.email') }}</h3>
|
|
20
23
|
<ul class="govuk-list">
|
|
21
|
-
<li><a class="govuk-link govuk-link--no-visited-state" href="mailto:{{ contact.email.address }}">{{ contact.email.address }}</a></li>
|
|
22
|
-
<li>{{ contact.email.responseTime }}</li>
|
|
24
|
+
<li><a class="govuk-link govuk-link--no-visited-state" href="mailto:{{ tForm('contact.email.address') }}">{{ tForm('contact.email.address') }}</a></li>
|
|
25
|
+
<li>{{ tForm('contact.email.responseTime') }}</li>
|
|
23
26
|
</ul>
|
|
24
27
|
{% endif %}
|
|
25
28
|
|
|
26
29
|
{% if contact.online %}
|
|
27
|
-
<h3 class="govuk-heading-s">
|
|
30
|
+
<h3 class="govuk-heading-s">{{ t('pages.formUnavailable.onlineContactForm') }}</h3>
|
|
28
31
|
<ul class="govuk-list">
|
|
29
|
-
<li><a class="govuk-link govuk-link--no-visited-state" href="{{ contact.online.url }}">{{ contact.online.text }}</a></li>
|
|
32
|
+
<li><a class="govuk-link govuk-link--no-visited-state" href="{{ tForm('contact.online.url') }}">{{ tForm('contact.online.text') }}</a></li>
|
|
30
33
|
</ul>
|
|
31
34
|
{% endif %}
|
|
32
35
|
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nunjucks filter to add/replace a parameter on a query string of a url.
|
|
3
|
+
* Currently only used in forms-runner.
|
|
4
|
+
* @param {string} urlPath - existing relative url with query string
|
|
5
|
+
* @param {string} paramName - name of parameter
|
|
6
|
+
* @param {string} paramValue - value of parameter
|
|
7
|
+
* @returns {string}
|
|
8
|
+
*/
|
|
9
|
+
export function applyUrlParam(urlPath, paramName, paramValue) {
|
|
10
|
+
if (typeof urlPath !== 'string') {
|
|
11
|
+
return ''
|
|
12
|
+
}
|
|
13
|
+
const url = new URL(urlPath, 'https://dummy')
|
|
14
|
+
url.searchParams.set(paramName, paramValue)
|
|
15
|
+
|
|
16
|
+
return url.pathname + url.search
|
|
17
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { format } from 'date-fns'
|
|
2
2
|
|
|
3
|
+
import { toLanguageLocale } from '../engine/helpers.js'
|
|
3
4
|
import { PaymentService } from './service.js'
|
|
4
5
|
|
|
5
6
|
export const DEFAULT_PAYMENT_HELP_URL =
|
|
@@ -28,10 +29,29 @@ export async function createPaymentService(
|
|
|
28
29
|
/**
|
|
29
30
|
* Formats a payment date for display
|
|
30
31
|
* @param {string} isoString - ISO date string
|
|
32
|
+
* @param {string} language - the target language
|
|
31
33
|
* @returns {string} Formatted date string (e.g., "26 January 2026 5:01pm")
|
|
32
34
|
*/
|
|
33
|
-
export function formatPaymentDate(isoString) {
|
|
34
|
-
return
|
|
35
|
+
export function formatPaymentDate(isoString, language) {
|
|
36
|
+
return formatDateForLanguage(
|
|
37
|
+
new Date(isoString),
|
|
38
|
+
'd MMMM yyyy h:mmaaa',
|
|
39
|
+
language
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Formats a date for display in a specific language.
|
|
45
|
+
* To use additional languages, the appropriate module must be imported from 'date-fns/locale'
|
|
46
|
+
* @param { Date | string } date - the date
|
|
47
|
+
* @param {string} formatMask - the format mask
|
|
48
|
+
* @param {string} language - the target language
|
|
49
|
+
* @returns {string} Formatted date string (e.g., "26 January 2026 5:01pm")
|
|
50
|
+
*/
|
|
51
|
+
export function formatDateForLanguage(date, formatMask, language) {
|
|
52
|
+
return format(date, formatMask, {
|
|
53
|
+
locale: toLanguageLocale(language)
|
|
54
|
+
})
|
|
35
55
|
}
|
|
36
56
|
|
|
37
57
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { StatusCodes } from 'http-status-codes'
|
|
2
2
|
|
|
3
3
|
import { logger } from '../../common/helpers/logging/logger.js'
|
|
4
|
+
import { toPayLanguageCode } from '../engine/helpers.js'
|
|
4
5
|
import {
|
|
5
6
|
buildPaymentInfo,
|
|
6
7
|
convertPenceToPounds
|
|
@@ -38,7 +39,7 @@ export class PaymentService {
|
|
|
38
39
|
* @param {string} returnUrl
|
|
39
40
|
* @param {string} reference
|
|
40
41
|
* @param {boolean} isLivePayment
|
|
41
|
-
* @param {{ formId: string, slug: string } | undefined } metadata
|
|
42
|
+
* @param {{ formId: string, slug: string, language: string } | undefined } metadata
|
|
42
43
|
* @param {string} [email] - optional email to prepopulate on GOV.UK Pay
|
|
43
44
|
*/
|
|
44
45
|
async createPayment(
|
|
@@ -50,6 +51,8 @@ export class PaymentService {
|
|
|
50
51
|
metadata,
|
|
51
52
|
email
|
|
52
53
|
) {
|
|
54
|
+
const language = toPayLanguageCode(metadata?.language)
|
|
55
|
+
|
|
53
56
|
try {
|
|
54
57
|
/** @type {CreatePaymentRequest} */
|
|
55
58
|
const payload = {
|
|
@@ -58,7 +61,8 @@ export class PaymentService {
|
|
|
58
61
|
reference,
|
|
59
62
|
metadata,
|
|
60
63
|
return_url: returnUrl,
|
|
61
|
-
delayed_capture: true
|
|
64
|
+
delayed_capture: true,
|
|
65
|
+
language
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
// Prepopulate email on GOV.UK Pay if provided
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* @property {string} reference - Unique reference for the payment
|
|
19
19
|
* @property {string} description - Human-readable description of the payment
|
|
20
20
|
* @property {string} return_url - URL to redirect the user to after payment
|
|
21
|
+
* @property {string} language - the desired language for translations
|
|
21
22
|
* @property {boolean} [delayed_capture] - Whether to delay capturing the payment
|
|
22
23
|
* @property {{ formId: string, slug: string }} [metadata] - Additional metadata for the payment
|
|
23
24
|
* @property {string} [email] - Email to prepopulate on GOV.UK Pay (max 254 chars)
|