@defra/forms-engine-plugin 5.0.0-alpha.1 → 5.0.0-alpha.11
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.js +10 -31
- 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.js +11 -2
- 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 +37 -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 -3
- package/.server/client/javascripts/shared.js +1 -3
- 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/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 +4 -1
- package/.server/server/plugins/engine/components/CheckboxesField.js +13 -0
- 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 +29 -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 +12 -0
- package/.server/server/plugins/engine/components/FileUploadField.js +23 -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 +1 -0
- package/.server/server/plugins/engine/components/GeospatialField.js +1 -1
- 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 +28 -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 +18 -5
- 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 +13 -12
- 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 +2 -1
- package/.server/server/plugins/engine/components/OsGridRefField.js +4 -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 +1 -2
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +3 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.js +32 -0
- 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/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 +3 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +10 -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 +85 -8
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +55 -6
- package/.server/server/plugins/engine/i18n/types.d.ts +2 -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 +9 -15
- 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/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/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.js +23 -2
- 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/views/components/_location-field-base.html +2 -1
- package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
- package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -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/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 +9 -2
- package/src/client/javascripts/file-upload.js +11 -3
- package/src/client/javascripts/geospatial-map.js +7 -34
- package/src/client/javascripts/govuk.js +2 -0
- package/src/client/javascripts/location-map.js +9 -1
- package/src/client/javascripts/map.js +42 -0
- package/src/client/javascripts/maps.js +5 -0
- package/src/client/javascripts/shared.js +1 -3
- 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/components/AutocompleteField.ts +13 -0
- package/src/server/plugins/engine/components/CheckboxesField.ts +13 -1
- 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 +24 -3
- package/src/server/plugins/engine/components/FormComponent.ts +6 -5
- package/src/server/plugins/engine/components/GeospatialField.ts +6 -1
- package/src/server/plugins/engine/components/LatLongField.ts +128 -58
- package/src/server/plugins/engine/components/LocationFieldBase.ts +23 -6
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +20 -13
- 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 +9 -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 +1 -2
- package/src/server/plugins/engine/components/helpers/geospatial.ts +53 -0
- 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/helpers.ts +52 -5
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +10 -7
- 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 +85 -8
- package/src/server/plugins/engine/i18n/translations/en-GB.json +55 -6
- package/src/server/plugins/engine/i18n/types.ts +2 -0
- package/src/server/plugins/engine/index.ts +7 -0
- package/src/server/plugins/engine/models/FormModel.ts +9 -15
- package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -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/submission.ts +6 -3
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +27 -2
- package/src/server/plugins/engine/types/schema.ts +1 -0
- package/src/server/plugins/engine/types.ts +5 -0
- package/src/server/plugins/engine/views/components/_location-field-base.html +2 -1
- package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
- package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -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/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
|
@@ -406,9 +406,9 @@ export class RepeatPageController extends QuestionPageController {
|
|
|
406
406
|
const { query } = request
|
|
407
407
|
const { isForceAccess, errors } = context
|
|
408
408
|
|
|
409
|
-
const { t } = translator
|
|
409
|
+
const { t, tPage } = translator
|
|
410
410
|
|
|
411
|
-
const
|
|
411
|
+
const title = tPage(this.pageDef, 'repeatTitle') || repeat.options.title
|
|
412
412
|
|
|
413
413
|
const summaryList: SummaryList = {
|
|
414
414
|
classes: 'govuk-summary-list--long-actions',
|
|
@@ -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
|
}
|
|
@@ -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
|
]
|
|
@@ -58,7 +58,21 @@ 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 =
|
|
@@ -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
|
|
|
@@ -70,8 +70,9 @@
|
|
|
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}}"
|
|
75
76
|
data-maplayers="{{component.model.mapLayers}}">
|
|
76
77
|
{{ govukFieldset({
|
|
77
78
|
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 %}
|
|
@@ -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">
|
|
@@ -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)
|
|
@@ -16,6 +16,7 @@ const countyFieldName = 'county'
|
|
|
16
16
|
const postcodeFieldName = 'postcode'
|
|
17
17
|
|
|
18
18
|
const GOVUK_MARGIN_RIGHT_1 = 'govuk-!-margin-right-1'
|
|
19
|
+
const COMMON_BACK = 'common.back'
|
|
19
20
|
|
|
20
21
|
export const steps = {
|
|
21
22
|
// Step 1: Postcode/building name input
|
|
@@ -403,19 +404,20 @@ function getHref(step) {
|
|
|
403
404
|
/**
|
|
404
405
|
* The postcode lookup details form view model
|
|
405
406
|
* @param {PostcodeLookupSessionData} data
|
|
407
|
+
* @param {Translator} translator
|
|
406
408
|
* @param {PostcodeLookupDetailsData} [payload]
|
|
407
409
|
* @param {Error} [err]
|
|
408
410
|
*/
|
|
409
|
-
export function detailsViewModel(data, payload, err) {
|
|
410
|
-
const {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
} = data.initial
|
|
411
|
+
export function detailsViewModel(data, translator, payload, err) {
|
|
412
|
+
const { componentId, componentHint, sourceUrl, languages } = data.initial
|
|
413
|
+
|
|
414
|
+
const { t, tComponent, tForm } = translator
|
|
415
|
+
|
|
416
|
+
const component = /** @type {ComponentDef} */ ({ id: componentId })
|
|
416
417
|
|
|
417
418
|
const backLink = {
|
|
418
|
-
href: sourceUrl
|
|
419
|
+
href: sourceUrl,
|
|
420
|
+
text: t(COMMON_BACK)
|
|
419
421
|
}
|
|
420
422
|
|
|
421
423
|
const { errors, postcodeQueryError, buildingNameQueryError } =
|
|
@@ -425,42 +427,53 @@ export function detailsViewModel(data, payload, err) {
|
|
|
425
427
|
payload ?? data.details,
|
|
426
428
|
postcodeQueryError,
|
|
427
429
|
buildingNameQueryError,
|
|
428
|
-
language
|
|
430
|
+
translator.language
|
|
429
431
|
)
|
|
430
432
|
|
|
433
|
+
const hint = componentHint && {
|
|
434
|
+
text: tComponent(component, 'hint')
|
|
435
|
+
}
|
|
436
|
+
|
|
431
437
|
const continueButton = {
|
|
432
|
-
text:
|
|
438
|
+
text: t('postcodeLookup.findAddress'),
|
|
433
439
|
classes: GOVUK_MARGIN_RIGHT_1
|
|
434
440
|
}
|
|
435
441
|
const manualLink = {
|
|
436
|
-
text:
|
|
442
|
+
text: t('postcodeLookup.enterManually'),
|
|
437
443
|
href: getHref(steps.manual)
|
|
438
444
|
}
|
|
439
445
|
|
|
446
|
+
const selector = languages?.length ? { languages } : {}
|
|
447
|
+
|
|
440
448
|
return {
|
|
441
449
|
step: steps.details,
|
|
442
450
|
showTitle: true,
|
|
443
|
-
name:
|
|
451
|
+
name: tForm('title'),
|
|
444
452
|
serviceUrl: sourceUrl,
|
|
445
|
-
pageTitle,
|
|
453
|
+
pageTitle: tComponent(component, 'title'),
|
|
454
|
+
hint,
|
|
446
455
|
backLink,
|
|
447
456
|
errors,
|
|
448
457
|
fields,
|
|
449
|
-
buttons: { continueButton, manualLink }
|
|
458
|
+
buttons: { continueButton, manualLink },
|
|
459
|
+
t,
|
|
460
|
+
language: translator.language,
|
|
461
|
+
...selector
|
|
450
462
|
}
|
|
451
463
|
}
|
|
452
464
|
|
|
453
465
|
/**
|
|
454
466
|
* The postcode lookup select form view model
|
|
455
467
|
* @param {{ session: PostcodeLookupSessionData, apiKey: string }} data
|
|
468
|
+
* @param {Translator} translator
|
|
456
469
|
* @param {PostcodeLookupSelectPayload} [payload]
|
|
457
470
|
* @param {Error} [err]
|
|
458
471
|
*/
|
|
459
|
-
export async function selectViewModel(data, payload, err) {
|
|
472
|
+
export async function selectViewModel(data, translator, payload, err) {
|
|
460
473
|
const { session, apiKey } = data
|
|
461
474
|
const { details, initial } = session
|
|
462
475
|
const { postcodeQuery, buildingNameQuery } = details
|
|
463
|
-
const language
|
|
476
|
+
const { language, t, tComponent, tForm } = translator
|
|
464
477
|
|
|
465
478
|
const {
|
|
466
479
|
hasAddresses,
|
|
@@ -471,12 +484,18 @@ export async function selectViewModel(data, payload, err) {
|
|
|
471
484
|
} = await getAddresses(postcodeQuery, buildingNameQuery, apiKey)
|
|
472
485
|
|
|
473
486
|
const title = hasAddresses
|
|
474
|
-
?
|
|
475
|
-
|
|
487
|
+
? tComponent(
|
|
488
|
+
/** @type {ComponentDef} */ ({ id: initial.componentId }),
|
|
489
|
+
'title'
|
|
490
|
+
)
|
|
491
|
+
: t('postcodeLookup.noAddressFoundTitle')
|
|
476
492
|
const formPath = initial.sourceUrl
|
|
477
493
|
const href = getHref()
|
|
478
494
|
|
|
479
|
-
const backLink = {
|
|
495
|
+
const backLink = {
|
|
496
|
+
href,
|
|
497
|
+
text: t(COMMON_BACK)
|
|
498
|
+
}
|
|
480
499
|
|
|
481
500
|
const { errors, uprnError } = buildErrors(err)
|
|
482
501
|
|
|
@@ -490,7 +509,7 @@ export async function selectViewModel(data, payload, err) {
|
|
|
490
509
|
language
|
|
491
510
|
)
|
|
492
511
|
|
|
493
|
-
const searchAgainText =
|
|
512
|
+
const searchAgainText = t('postcodeLookup.searchAgain')
|
|
494
513
|
|
|
495
514
|
const searchAgainLink = {
|
|
496
515
|
text: searchAgainText,
|
|
@@ -499,27 +518,29 @@ export async function selectViewModel(data, payload, err) {
|
|
|
499
518
|
|
|
500
519
|
const continueButton = {
|
|
501
520
|
href: hasAddresses ? undefined : href,
|
|
502
|
-
text: hasAddresses
|
|
503
|
-
? i18nT('postcodeLookup.useThisAddress', language)
|
|
504
|
-
: searchAgainText,
|
|
521
|
+
text: hasAddresses ? t('postcodeLookup.useThisAddress') : searchAgainText,
|
|
505
522
|
classes: GOVUK_MARGIN_RIGHT_1
|
|
506
523
|
}
|
|
507
524
|
const manualLink = {
|
|
508
|
-
text:
|
|
525
|
+
text: t('postcodeLookup.enterManually'),
|
|
509
526
|
href: `${href}?step=${steps.manual}`
|
|
510
527
|
}
|
|
511
528
|
|
|
512
529
|
const addressesFoundText = hasAddresses
|
|
513
|
-
?
|
|
530
|
+
? t('postcodeLookup.addressFound', { count: addressCount })
|
|
514
531
|
: undefined
|
|
515
532
|
const noAddressFoundText = !hasAddresses
|
|
516
|
-
?
|
|
533
|
+
? t('postcodeLookup.noAddressFoundBody')
|
|
517
534
|
: undefined
|
|
518
535
|
|
|
536
|
+
const selector = initial.languages?.length
|
|
537
|
+
? { languages: initial.languages }
|
|
538
|
+
: {}
|
|
539
|
+
|
|
519
540
|
return {
|
|
520
541
|
step: steps.select,
|
|
521
542
|
showTitle: true,
|
|
522
|
-
name: title,
|
|
543
|
+
name: tForm('title'),
|
|
523
544
|
serviceUrl: formPath,
|
|
524
545
|
pageTitle: title,
|
|
525
546
|
backLink,
|
|
@@ -533,28 +554,32 @@ export async function selectViewModel(data, payload, err) {
|
|
|
533
554
|
hasMultipleAddresses,
|
|
534
555
|
addressesFoundText,
|
|
535
556
|
noAddressFoundText,
|
|
536
|
-
buttons: { continueButton, manualLink }
|
|
557
|
+
buttons: { continueButton, manualLink },
|
|
558
|
+
t,
|
|
559
|
+
language,
|
|
560
|
+
...selector
|
|
537
561
|
}
|
|
538
562
|
}
|
|
539
563
|
|
|
540
564
|
/**
|
|
541
565
|
* The postcode lookup manual form view model
|
|
542
566
|
* @param {PostcodeLookupSessionData} data
|
|
567
|
+
* @param {Translator} translator
|
|
543
568
|
* @param {PostcodeLookupManualPayload} [payload]
|
|
544
569
|
* @param {Error} [err]
|
|
545
570
|
*/
|
|
546
|
-
export function manualViewModel(data, payload, err) {
|
|
547
|
-
const {
|
|
548
|
-
componentTitle,
|
|
549
|
-
sourceUrl,
|
|
550
|
-
componentHint,
|
|
551
|
-
language = 'en-GB'
|
|
552
|
-
} = data.initial
|
|
571
|
+
export function manualViewModel(data, translator, payload, err) {
|
|
572
|
+
const { componentId, sourceUrl, componentHint, languages } = data.initial
|
|
553
573
|
const formPath = sourceUrl
|
|
554
574
|
const href = getHref()
|
|
555
575
|
|
|
576
|
+
const { t, tComponent, tForm } = translator
|
|
577
|
+
|
|
578
|
+
const component = /** @type {ComponentDef} */ ({ id: componentId })
|
|
579
|
+
|
|
556
580
|
const backLink = {
|
|
557
|
-
href
|
|
581
|
+
href,
|
|
582
|
+
text: t(COMMON_BACK)
|
|
558
583
|
}
|
|
559
584
|
|
|
560
585
|
const {
|
|
@@ -567,7 +592,7 @@ export function manualViewModel(data, payload, err) {
|
|
|
567
592
|
} = buildErrors(err)
|
|
568
593
|
|
|
569
594
|
const hint = componentHint && {
|
|
570
|
-
text:
|
|
595
|
+
text: tComponent(component, 'hint')
|
|
571
596
|
}
|
|
572
597
|
|
|
573
598
|
const fields = getManualFields(
|
|
@@ -577,29 +602,34 @@ export function manualViewModel(data, payload, err) {
|
|
|
577
602
|
townError,
|
|
578
603
|
countyError,
|
|
579
604
|
postcodeError,
|
|
580
|
-
language
|
|
605
|
+
translator.language
|
|
581
606
|
)
|
|
582
607
|
|
|
583
608
|
const continueButton = {
|
|
584
|
-
text:
|
|
609
|
+
text: t('postcodeLookup.useThisAddress'),
|
|
585
610
|
classes: GOVUK_MARGIN_RIGHT_1
|
|
586
611
|
}
|
|
587
612
|
const detailsLink = {
|
|
588
|
-
text:
|
|
613
|
+
text: t('postcodeLookup.findAnAddressInstead'),
|
|
589
614
|
href
|
|
590
615
|
}
|
|
591
616
|
|
|
617
|
+
const selector = languages?.length ? { languages } : {}
|
|
618
|
+
|
|
592
619
|
return {
|
|
593
620
|
step: steps.manual,
|
|
594
621
|
showTitle: true,
|
|
595
|
-
name:
|
|
622
|
+
name: tForm('title'),
|
|
596
623
|
serviceUrl: formPath,
|
|
597
|
-
pageTitle:
|
|
624
|
+
pageTitle: tComponent(component, 'title'),
|
|
598
625
|
backLink,
|
|
599
626
|
errors,
|
|
600
627
|
hint,
|
|
601
628
|
fields,
|
|
602
|
-
buttons: { continueButton, detailsLink }
|
|
629
|
+
buttons: { continueButton, detailsLink },
|
|
630
|
+
t,
|
|
631
|
+
language: translator.language,
|
|
632
|
+
...selector
|
|
603
633
|
}
|
|
604
634
|
}
|
|
605
635
|
|
|
@@ -607,5 +637,7 @@ export function manualViewModel(data, payload, err) {
|
|
|
607
637
|
|
|
608
638
|
/**
|
|
609
639
|
* @import { ObjectSchema, ValidationErrorItem } from 'joi'
|
|
640
|
+
* @import { ComponentDef } from '@defra/forms-model'
|
|
610
641
|
* @import { Address, PostcodeLookupDetailsData, PostcodeLookupDetailsPayload, PostcodeLookupManualPayload, PostcodeLookupSelectPayload, PostcodeLookupSessionData } from '../types.js'
|
|
642
|
+
* @import { Translator } from '../../engine/i18n/types.js'
|
|
611
643
|
*/
|