@defra/forms-engine-plugin 5.0.0-alpha.1 → 5.0.0-alpha.10
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.map +1 -1
- package/.public/javascripts/shared.min.js +1 -1
- 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 +5 -3
- package/.server/client/javascripts/file-upload.js.map +1 -1
- package/.server/client/javascripts/geospatial-map.js +31 -26
- package/.server/client/javascripts/geospatial-map.js.map +1 -1
- package/.server/client/javascripts/location-map.js +9 -1
- package/.server/client/javascripts/location-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 +26 -2
- package/.server/server/plugins/engine/components/EastingNorthingField.js +93 -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 +20 -2
- 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 +26 -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 +5 -2
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +10 -11
- 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/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 +73 -6
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +43 -4
- 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 +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +22 -9
- 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 +1 -0
- package/.server/server/plugins/engine/types.js.map +1 -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/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/package.json +8 -2
- package/src/client/javascripts/file-upload.js +10 -3
- package/src/client/javascripts/geospatial-map.js +32 -30
- package/src/client/javascripts/location-map.js +7 -1
- 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 +154 -89
- package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
- package/src/server/plugins/engine/components/FileUploadField.ts +21 -2
- 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 +14 -11
- 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/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 +73 -6
- package/src/server/plugins/engine/i18n/translations/en-GB.json +43 -4
- 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 +18 -8
- 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 +1 -0
- 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/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
|
@@ -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
|
*/
|
|
@@ -3,6 +3,7 @@ import { StatusCodes } from 'http-status-codes'
|
|
|
3
3
|
import Joi from 'joi'
|
|
4
4
|
|
|
5
5
|
import { EXTERNAL_STATE_APPENDAGE } from '../../../constants.js'
|
|
6
|
+
import { getCachedPluginTranslator } from '../../engine/i18n/form.js'
|
|
6
7
|
import {
|
|
7
8
|
JOURNEY_BASE_URL,
|
|
8
9
|
createDetailsPayloadSchema,
|
|
@@ -15,6 +16,7 @@ import {
|
|
|
15
16
|
steps
|
|
16
17
|
} from '../models/index.js'
|
|
17
18
|
import * as service from '../service.js'
|
|
19
|
+
import { resolveLanguage } from '../../../utils/utils.js'
|
|
18
20
|
|
|
19
21
|
const viewName = 'postcode-lookup-details'
|
|
20
22
|
|
|
@@ -22,7 +24,7 @@ const viewName = 'postcode-lookup-details'
|
|
|
22
24
|
* Get the session state associated with this journey
|
|
23
25
|
* @param {PostcodeLookupRequest} request
|
|
24
26
|
*/
|
|
25
|
-
function getSessionState(request) {
|
|
27
|
+
export function getSessionState(request) {
|
|
26
28
|
/**
|
|
27
29
|
* @type {PostcodeLookupSessionData | null | undefined}
|
|
28
30
|
*/
|
|
@@ -63,6 +65,32 @@ function flashComponentState(request, componentName, address) {
|
|
|
63
65
|
|
|
64
66
|
request.yar.flash(EXTERNAL_STATE_APPENDAGE, appendage, true)
|
|
65
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Get a cached translator, or create a new one if not in the cache
|
|
70
|
+
* @param {PostcodeLookupRequest} request
|
|
71
|
+
* @param {PostcodeLookupDispatchData} initial
|
|
72
|
+
* @param { string | string[] | undefined } language
|
|
73
|
+
*/
|
|
74
|
+
export async function getDispatchTranslator(request, initial, language) {
|
|
75
|
+
const { formId, formStatus } = initial
|
|
76
|
+
|
|
77
|
+
// Override language if passed as a query param
|
|
78
|
+
if (language) {
|
|
79
|
+
request.yar.set('language', language)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const typedReq = /** @type {AnyFormRequest} */ (/** @type {any} */ (request))
|
|
83
|
+
const lang = resolveLanguage(typedReq)
|
|
84
|
+
|
|
85
|
+
const translator = await getCachedPluginTranslator(
|
|
86
|
+
typedReq,
|
|
87
|
+
/** @type {FormMetadata} */ ({ id: formId }),
|
|
88
|
+
formStatus,
|
|
89
|
+
lang
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
return translator
|
|
93
|
+
}
|
|
66
94
|
|
|
67
95
|
/**
|
|
68
96
|
* Initialises and dispatches the request to the postcode lookup journey
|
|
@@ -101,15 +129,21 @@ function getRoute() {
|
|
|
101
129
|
return {
|
|
102
130
|
method: 'GET',
|
|
103
131
|
path: JOURNEY_BASE_URL,
|
|
104
|
-
handler(request, h) {
|
|
132
|
+
async handler(request, h) {
|
|
105
133
|
const { query } = request
|
|
106
|
-
const { step } = query
|
|
134
|
+
const { step, language } = query
|
|
107
135
|
const session = getSessionState(request)
|
|
108
136
|
|
|
137
|
+
const translator = await getDispatchTranslator(
|
|
138
|
+
request,
|
|
139
|
+
session.initial,
|
|
140
|
+
language
|
|
141
|
+
)
|
|
142
|
+
|
|
109
143
|
const model =
|
|
110
144
|
step === steps.manual
|
|
111
|
-
? manualViewModel(session)
|
|
112
|
-
: detailsViewModel(session)
|
|
145
|
+
? manualViewModel(session, translator)
|
|
146
|
+
: detailsViewModel(session, translator)
|
|
113
147
|
|
|
114
148
|
return h.view(viewName, model)
|
|
115
149
|
},
|
|
@@ -117,7 +151,8 @@ function getRoute() {
|
|
|
117
151
|
validate: {
|
|
118
152
|
query: Joi.object()
|
|
119
153
|
.keys({
|
|
120
|
-
step: Joi.string().allow(steps.details, steps.manual).optional()
|
|
154
|
+
step: Joi.string().allow(steps.details, steps.manual).optional(),
|
|
155
|
+
language: Joi.string().allow('en-GB', 'cy').optional()
|
|
121
156
|
})
|
|
122
157
|
.optional()
|
|
123
158
|
}
|
|
@@ -172,7 +207,13 @@ function postRoute(options) {
|
|
|
172
207
|
async function detailsPostHandler(request, h, options) {
|
|
173
208
|
const session = getSessionState(request)
|
|
174
209
|
const { ordnanceSurveyApiKey: apiKey } = options
|
|
175
|
-
const
|
|
210
|
+
const translator = await getDispatchTranslator(
|
|
211
|
+
request,
|
|
212
|
+
session.initial,
|
|
213
|
+
request.query.language
|
|
214
|
+
)
|
|
215
|
+
const language = translator.language
|
|
216
|
+
|
|
176
217
|
const { value: details, error } = createDetailsPayloadSchema(
|
|
177
218
|
language
|
|
178
219
|
).validate(request.payload)
|
|
@@ -180,7 +221,7 @@ async function detailsPostHandler(request, h, options) {
|
|
|
180
221
|
let model
|
|
181
222
|
|
|
182
223
|
if (error) {
|
|
183
|
-
model = detailsViewModel(session, details, error)
|
|
224
|
+
model = detailsViewModel(session, translator, details, error)
|
|
184
225
|
|
|
185
226
|
return h.view(viewName, model)
|
|
186
227
|
}
|
|
@@ -191,7 +232,7 @@ async function detailsPostHandler(request, h, options) {
|
|
|
191
232
|
// Store the updated session
|
|
192
233
|
request.yar.set(JOURNEY_BASE_URL, session)
|
|
193
234
|
|
|
194
|
-
model = await selectViewModel({ session, apiKey })
|
|
235
|
+
model = await selectViewModel({ session, apiKey }, translator)
|
|
195
236
|
|
|
196
237
|
return h.view(viewName, model)
|
|
197
238
|
}
|
|
@@ -205,13 +246,23 @@ async function detailsPostHandler(request, h, options) {
|
|
|
205
246
|
async function selectPostHandler(request, h, options) {
|
|
206
247
|
const session = getSessionState(request)
|
|
207
248
|
const { ordnanceSurveyApiKey: apiKey } = options
|
|
208
|
-
const
|
|
249
|
+
const translator = await getDispatchTranslator(
|
|
250
|
+
request,
|
|
251
|
+
session.initial,
|
|
252
|
+
request.query.language
|
|
253
|
+
)
|
|
254
|
+
const language = translator.language
|
|
209
255
|
const { value: select, error } = createSelectPayloadSchema(language).validate(
|
|
210
256
|
request.payload
|
|
211
257
|
)
|
|
212
258
|
|
|
213
259
|
if (error) {
|
|
214
|
-
const model = await selectViewModel(
|
|
260
|
+
const model = await selectViewModel(
|
|
261
|
+
{ session, apiKey },
|
|
262
|
+
translator,
|
|
263
|
+
select,
|
|
264
|
+
error
|
|
265
|
+
)
|
|
215
266
|
|
|
216
267
|
return h.view(viewName, model)
|
|
217
268
|
}
|
|
@@ -235,9 +286,14 @@ async function selectPostHandler(request, h, options) {
|
|
|
235
286
|
* @param {PostcodeLookupPostRequest} request
|
|
236
287
|
* @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h
|
|
237
288
|
*/
|
|
238
|
-
function manualPostHandler(request, h) {
|
|
289
|
+
async function manualPostHandler(request, h) {
|
|
239
290
|
const session = getSessionState(request)
|
|
240
|
-
const
|
|
291
|
+
const translator = await getDispatchTranslator(
|
|
292
|
+
request,
|
|
293
|
+
session.initial,
|
|
294
|
+
request.query.language
|
|
295
|
+
)
|
|
296
|
+
const language = translator.language
|
|
241
297
|
|
|
242
298
|
const { value: manual, error } = createManualPayloadSchema(language).validate(
|
|
243
299
|
request.payload,
|
|
@@ -247,7 +303,7 @@ function manualPostHandler(request, h) {
|
|
|
247
303
|
)
|
|
248
304
|
|
|
249
305
|
if (error) {
|
|
250
|
-
const model = manualViewModel(session, manual, error)
|
|
306
|
+
const model = manualViewModel(session, translator, manual, error)
|
|
251
307
|
|
|
252
308
|
return h.view(viewName, model)
|
|
253
309
|
}
|
|
@@ -261,7 +317,8 @@ function manualPostHandler(request, h) {
|
|
|
261
317
|
|
|
262
318
|
/**
|
|
263
319
|
* @import { ResponseToolkit, ServerRoute } from '@hapi/hapi'
|
|
264
|
-
* @import {
|
|
320
|
+
* @import { FormMetadata } from '@defra/forms-model'
|
|
321
|
+
* @import { PostcodeLookupManualPayload, Address, PostcodeLookupGetRequestRefs, PostcodeLookupPostRequestRefs, PostcodeLookupRequest, PostcodeLookupPostRequest, PostcodeLookupConfiguration, PostcodeLookupDispatchData, PostcodeLookupSessionData } from '../types.js'
|
|
265
322
|
* @import { FormRequestPayload, FormResponseToolkit } from '../../../routes/types.js'
|
|
266
|
-
* @import { ExternalStateAppendage } from '../../engine/types.js'
|
|
323
|
+
* @import { AnyFormRequest, ExternalStateAppendage } from '../../engine/types.js'
|
|
267
324
|
*/
|
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
/**
|
|
15
15
|
* @typedef {{
|
|
16
16
|
* sourceUrl: string,
|
|
17
|
+
* formId: string
|
|
17
18
|
* formName: string
|
|
19
|
+
* formStatus: FormStatus
|
|
20
|
+
* componentId: string
|
|
18
21
|
* componentName: string
|
|
19
22
|
* componentTitle: string,
|
|
20
23
|
* componentHint?: string
|
|
21
24
|
* step?: string
|
|
22
25
|
* language?: string
|
|
26
|
+
* languages?: { name: string, code: string}[]
|
|
23
27
|
* }} PostcodeLookupDispatchData
|
|
24
28
|
*/
|
|
25
29
|
|
|
@@ -49,6 +53,7 @@
|
|
|
49
53
|
* Postcode lookup query params
|
|
50
54
|
* @typedef {object} PostcodeLookupQuery
|
|
51
55
|
* @property {string} [step] - step
|
|
56
|
+
* @property {string} [language] - language
|
|
52
57
|
*/
|
|
53
58
|
|
|
54
59
|
/**
|
|
@@ -140,5 +145,5 @@
|
|
|
140
145
|
|
|
141
146
|
/**
|
|
142
147
|
* @import { Request } from '@hapi/hapi'
|
|
143
|
-
* @import {
|
|
148
|
+
* @import { FormStatus } from '@defra/forms-model'
|
|
144
149
|
*/
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<!-- Postcode lookup select -->
|
|
34
34
|
<!-- Postcode lookup details display -->
|
|
35
35
|
{%- set detailsHtml -%}
|
|
36
|
-
<strong>{{ details.postcodeQuery }}</strong>{% if details.buildingNameQuery %} and <strong>{{ details.buildingNameQuery }}</strong>{% endif %}
|
|
36
|
+
<strong>{{ details.postcodeQuery }}</strong>{% if details.buildingNameQuery %} {{ t('common.and')}} <strong>{{ details.buildingNameQuery }}</strong>{% endif %}
|
|
37
37
|
{%- endset -%}
|
|
38
38
|
|
|
39
39
|
{% if hasAddresses %}
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
{{ govukButton(buttons.continueButton) }}
|
|
73
73
|
|
|
74
74
|
{% if buttons.manualLink %}
|
|
75
|
-
<p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.manualLink.href }}">{{buttons.manualLink.text}}</a></p>
|
|
75
|
+
<p class="govuk-body">{{ t('common.or')}} <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.manualLink.href }}">{{buttons.manualLink.text}}</a></p>
|
|
76
76
|
{% elif buttons.detailsLink %}
|
|
77
|
-
<p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.detailsLink.href }}">{{buttons.detailsLink.text}}</a></p>
|
|
77
|
+
<p class="govuk-body">{{ t('common.or')}} <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.detailsLink.href }}">{{buttons.detailsLink.text}}</a></p>
|
|
78
78
|
{% endif %}
|
|
79
79
|
</div>
|
|
80
80
|
</form>
|
|
@@ -1,14 +1,4 @@
|
|
|
1
|
-
import Joi, {
|
|
2
|
-
type JoiExpression,
|
|
3
|
-
type LanguageMessages,
|
|
4
|
-
type LanguageMessagesExt
|
|
5
|
-
} from 'joi'
|
|
6
|
-
|
|
7
|
-
export function convertToLanguageMessages(
|
|
8
|
-
extLanguageMessages: LanguageMessagesExt
|
|
9
|
-
): LanguageMessages {
|
|
10
|
-
return extLanguageMessages as unknown as LanguageMessages
|
|
11
|
-
}
|
|
1
|
+
import Joi, { type JoiExpression } from 'joi'
|
|
12
2
|
|
|
13
3
|
export function createJoiExpression(expr: string): JoiExpression {
|
|
14
4
|
return Joi.expression(expr) as unknown as JoiExpression
|