@defra/forms-engine-plugin 4.23.0 → 5.0.0-alpha
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/.server/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
- package/.server/server/forms/simple-form.yaml +106 -3
- package/.server/server/plugins/engine/components/AutocompleteField.d.ts +11 -11
- package/.server/server/plugins/engine/components/AutocompleteField.js +2 -2
- package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
- package/.server/server/plugins/engine/components/CheckboxesField.d.ts +3 -2
- package/.server/server/plugins/engine/components/CheckboxesField.js +4 -9
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.d.ts +8 -7
- package/.server/server/plugins/engine/components/ComponentCollection.js +106 -51
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/DatePartsField.d.ts +8 -6
- package/.server/server/plugins/engine/components/DatePartsField.js +27 -9
- package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
- package/.server/server/plugins/engine/components/DeclarationField.d.ts +13 -11
- package/.server/server/plugins/engine/components/DeclarationField.js +31 -9
- package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
- package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +6 -5
- package/.server/server/plugins/engine/components/EastingNorthingField.js +42 -22
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
- package/.server/server/plugins/engine/components/EmailAddressField.d.ts +11 -14
- package/.server/server/plugins/engine/components/EmailAddressField.js +2 -2
- package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +14 -12
- package/.server/server/plugins/engine/components/FileUploadField.js +22 -12
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
- package/.server/server/plugins/engine/components/FormComponent.d.ts +21 -12
- package/.server/server/plugins/engine/components/FormComponent.js +33 -14
- package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/GeospatialField.d.ts +14 -12
- package/.server/server/plugins/engine/components/GeospatialField.js +19 -13
- package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
- package/.server/server/plugins/engine/components/LatLongField.d.ts +6 -5
- package/.server/server/plugins/engine/components/LatLongField.js +32 -20
- package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
- package/.server/server/plugins/engine/components/ListFormComponent.d.ts +7 -6
- package/.server/server/plugins/engine/components/ListFormComponent.js +19 -7
- package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +17 -16
- package/.server/server/plugins/engine/components/LocationFieldBase.js +2 -2
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +3 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +2 -2
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
- package/.server/server/plugins/engine/components/Markdown.d.ts +8 -7
- package/.server/server/plugins/engine/components/Markdown.js +5 -2
- package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
- package/.server/server/plugins/engine/components/MonthYearField.d.ts +9 -7
- package/.server/server/plugins/engine/components/MonthYearField.js +26 -8
- package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
- package/.server/server/plugins/engine/components/MultilineTextField.d.ts +10 -9
- package/.server/server/plugins/engine/components/MultilineTextField.js +2 -2
- package/.server/server/plugins/engine/components/MultilineTextField.js.map +1 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +14 -6
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/NumberField.d.ts +10 -9
- package/.server/server/plugins/engine/components/NumberField.js +2 -2
- package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
- package/.server/server/plugins/engine/components/OsGridRefField.js +14 -6
- package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
- package/.server/server/plugins/engine/components/PaymentField.d.ts +12 -10
- package/.server/server/plugins/engine/components/PaymentField.js +21 -8
- package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectField.d.ts +11 -11
- package/.server/server/plugins/engine/components/SelectField.js +2 -2
- package/.server/server/plugins/engine/components/SelectField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectionControlField.d.ts +4 -4
- package/.server/server/plugins/engine/components/SelectionControlField.js +2 -2
- package/.server/server/plugins/engine/components/SelectionControlField.js.map +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +10 -9
- package/.server/server/plugins/engine/components/TelephoneNumberField.js +2 -2
- package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +12 -10
- package/.server/server/plugins/engine/components/UkAddressField.js +29 -17
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.d.ts +3 -0
- package/.server/server/plugins/engine/components/YesNoField.js +9 -0
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/components.d.ts +3 -2
- package/.server/server/plugins/engine/components/helpers/components.js +11 -8
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/types.d.ts +8 -1
- package/.server/server/plugins/engine/components/types.js.map +1 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js +8 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -1
- package/.server/server/plugins/engine/form-context.d.ts +1 -0
- package/.server/server/plugins/engine/form-context.js +4 -2
- package/.server/server/plugins/engine/form-context.js.map +1 -1
- package/.server/server/plugins/engine/helpers.d.ts +1 -1
- package/.server/server/plugins/engine/helpers.js +8 -13
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +39 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +50 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +5 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.js +18 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -0
- package/.server/server/plugins/engine/i18n/createTranslator.d.ts +9 -0
- package/.server/server/plugins/engine/i18n/createTranslator.js +51 -0
- package/.server/server/plugins/engine/i18n/createTranslator.js.map +1 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +5 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +57 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -0
- package/.server/server/plugins/engine/i18n/index.d.ts +18 -0
- package/.server/server/plugins/engine/i18n/index.js +71 -0
- package/.server/server/plugins/engine/i18n/index.js.map +1 -0
- package/.server/server/plugins/engine/i18n/translations/cy.json +271 -0
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +271 -0
- package/.server/server/plugins/engine/i18n/types.d.ts +41 -0
- package/.server/server/plugins/engine/i18n/types.js +2 -0
- package/.server/server/plugins/engine/i18n/types.js.map +1 -0
- package/.server/server/plugins/engine/index.js +3 -2
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +9 -1
- package/.server/server/plugins/engine/models/FormModel.js +44 -18
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +5 -2
- package/.server/server/plugins/engine/models/SummaryViewModel.js +44 -18
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/options.js +2 -1
- package/.server/server/plugins/engine/options.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +4 -0
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js +7 -6
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +2 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +6 -3
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/PageController.d.ts +3 -1
- package/.server/server/plugins/engine/pageControllers/PageController.js +11 -1
- package/.server/server/plugins/engine/pageControllers/PageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +4 -2
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +52 -21
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +3 -2
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +63 -26
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +3 -1
- package/.server/server/plugins/engine/pageControllers/StartPageController.js +2 -2
- package/.server/server/plugins/engine/pageControllers/StartPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js +12 -2
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +4 -3
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +44 -28
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.d.ts +2 -0
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js +24 -0
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/errors.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/errors.js +3 -2
- package/.server/server/plugins/engine/pageControllers/errors.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +3 -2
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js +4 -4
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +7 -3
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +34 -33
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/plugin.js +2 -0
- package/.server/server/plugins/engine/plugin.js.map +1 -1
- package/.server/server/plugins/engine/routes/index.js +4 -1
- package/.server/server/plugins/engine/routes/index.js.map +1 -1
- package/.server/server/plugins/engine/routes/questions.js +5 -2
- package/.server/server/plugins/engine/routes/questions.js.map +1 -1
- package/.server/server/plugins/engine/types/index.d.ts +1 -0
- package/.server/server/plugins/engine/types/index.js.map +1 -1
- package/.server/server/plugins/engine/types/schema.js +1 -0
- package/.server/server/plugins/engine/types/schema.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +12 -1
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/views/components/_location-field-base.html +1 -1
- package/.server/server/plugins/engine/views/components/fileuploadfield.html +3 -3
- package/.server/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
- package/.server/server/plugins/engine/views/components/osgridreffield.html +1 -1
- package/.server/server/plugins/engine/views/components/paymentfield.html +8 -8
- package/.server/server/plugins/engine/views/components/ukaddressfield.html +4 -4
- package/.server/server/plugins/engine/views/confirmation.html +4 -4
- package/.server/server/plugins/engine/views/exit.html +4 -4
- package/.server/server/plugins/engine/views/file-upload.html +3 -3
- package/.server/server/plugins/engine/views/index.html +3 -3
- package/.server/server/plugins/engine/views/item-delete.html +1 -1
- package/.server/server/plugins/engine/views/partials/form.html +3 -3
- package/.server/server/plugins/engine/views/partials/preview-banner.html +4 -4
- package/.server/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
- package/.server/server/plugins/engine/views/repeat-list-summary.html +4 -4
- package/.server/server/plugins/engine/views/summary.html +14 -7
- package/.server/server/plugins/nunjucks/enviroment.test.js +10 -0
- package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/environment.d.ts +8 -0
- package/.server/server/plugins/nunjucks/environment.js +13 -0
- package/.server/server/plugins/nunjucks/environment.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.js +9 -1
- package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.test.js +13 -2
- package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
- package/.server/server/plugins/postcode-lookup/models/index.d.ts +24 -19
- package/.server/server/plugins/postcode-lookup/models/index.js +83 -76
- package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.js +7 -13
- package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/types.d.ts +1 -0
- package/.server/server/plugins/postcode-lookup/types.js +1 -0
- package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/.server/server/types.d.ts +2 -1
- package/.server/server/types.js.map +1 -1
- package/.server/server/utils/utils.d.ts +5 -0
- package/.server/server/utils/utils.js +16 -0
- package/.server/server/utils/utils.js.map +1 -1
- package/.server/typings/hapi/index.d.js.map +1 -1
- package/package.json +3 -2
- package/src/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
- package/src/server/forms/simple-form.yaml +106 -3
- package/src/server/plugins/engine/components/AutocompleteField.ts +3 -6
- package/src/server/plugins/engine/components/CheckboxesField.ts +12 -11
- package/src/server/plugins/engine/components/ComponentCollection.ts +143 -61
- package/src/server/plugins/engine/components/DatePartsField.ts +33 -11
- package/src/server/plugins/engine/components/DeclarationField.ts +37 -14
- package/src/server/plugins/engine/components/EastingNorthingField.ts +83 -22
- package/src/server/plugins/engine/components/EmailAddressField.ts +4 -7
- package/src/server/plugins/engine/components/FileUploadField.ts +28 -22
- package/src/server/plugins/engine/components/FormComponent.ts +49 -12
- package/src/server/plugins/engine/components/GeospatialField.ts +36 -21
- package/src/server/plugins/engine/components/LatLongField.ts +52 -21
- package/src/server/plugins/engine/components/ListFormComponent.ts +26 -10
- package/src/server/plugins/engine/components/LocationFieldBase.ts +5 -8
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +3 -3
- package/src/server/plugins/engine/components/Markdown.ts +7 -3
- package/src/server/plugins/engine/components/MonthYearField.ts +32 -10
- package/src/server/plugins/engine/components/MultilineTextField.ts +5 -8
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +25 -11
- package/src/server/plugins/engine/components/NumberField.ts +3 -4
- package/src/server/plugins/engine/components/OsGridRefField.ts +25 -9
- package/src/server/plugins/engine/components/PaymentField.ts +22 -12
- package/src/server/plugins/engine/components/SelectField.ts +3 -6
- package/src/server/plugins/engine/components/SelectionControlField.ts +7 -8
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +4 -7
- package/src/server/plugins/engine/components/UkAddressField.ts +33 -18
- package/src/server/plugins/engine/components/YesNoField.ts +10 -0
- package/src/server/plugins/engine/components/helpers/components.ts +13 -6
- package/src/server/plugins/engine/components/types.ts +9 -0
- package/src/server/plugins/engine/configureEnginePlugin.ts +12 -1
- package/src/server/plugins/engine/form-context.ts +8 -2
- package/src/server/plugins/engine/helpers.ts +10 -18
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +69 -0
- package/src/server/plugins/engine/i18n/createFormTranslator.ts +33 -0
- package/src/server/plugins/engine/i18n/createTranslator.ts +61 -0
- package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +61 -0
- package/src/server/plugins/engine/i18n/index.ts +80 -0
- package/src/server/plugins/engine/i18n/translations/cy.json +271 -0
- package/src/server/plugins/engine/i18n/translations/en-GB.json +271 -0
- package/src/server/plugins/engine/i18n/types.ts +62 -0
- package/src/server/plugins/engine/index.ts +4 -2
- package/src/server/plugins/engine/models/FormModel.ts +59 -23
- package/src/server/plugins/engine/models/SummaryViewModel.ts +68 -25
- package/src/server/plugins/engine/options.js +2 -1
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +5 -0
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -3
- package/src/server/plugins/engine/outputFormatters/machine/v1.ts +9 -8
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +7 -3
- package/src/server/plugins/engine/pageControllers/PageController.ts +12 -1
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +53 -21
- package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +66 -29
- package/src/server/plugins/engine/pageControllers/StartPageController.ts +7 -2
- package/src/server/plugins/engine/pageControllers/StatusPageController.ts +10 -2
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +48 -22
- package/src/server/plugins/engine/pageControllers/__stubs__/translator.ts +28 -0
- package/src/server/plugins/engine/pageControllers/errors.ts +4 -2
- package/src/server/plugins/engine/pageControllers/helpers/submission.ts +11 -4
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +43 -53
- package/src/server/plugins/engine/plugin.ts +2 -0
- package/src/server/plugins/engine/routes/index.ts +9 -1
- package/src/server/plugins/engine/routes/questions.ts +5 -1
- package/src/server/plugins/engine/types/index.ts +5 -0
- package/src/server/plugins/engine/types/schema.ts +1 -0
- package/src/server/plugins/engine/types.ts +10 -0
- package/src/server/plugins/engine/views/components/_location-field-base.html +1 -1
- package/src/server/plugins/engine/views/components/fileuploadfield.html +3 -3
- package/src/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
- package/src/server/plugins/engine/views/components/osgridreffield.html +1 -1
- package/src/server/plugins/engine/views/components/paymentfield.html +8 -8
- package/src/server/plugins/engine/views/components/ukaddressfield.html +4 -4
- package/src/server/plugins/engine/views/confirmation.html +4 -4
- package/src/server/plugins/engine/views/exit.html +4 -4
- package/src/server/plugins/engine/views/file-upload.html +3 -3
- package/src/server/plugins/engine/views/index.html +3 -3
- package/src/server/plugins/engine/views/item-delete.html +1 -1
- package/src/server/plugins/engine/views/partials/form.html +3 -3
- package/src/server/plugins/engine/views/partials/preview-banner.html +4 -4
- package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
- package/src/server/plugins/engine/views/repeat-list-summary.html +4 -4
- package/src/server/plugins/engine/views/summary.html +14 -7
- package/src/server/plugins/nunjucks/environment.js +14 -0
- package/src/server/plugins/nunjucks/filters/answer.js +12 -1
- package/src/server/plugins/postcode-lookup/models/index.js +144 -87
- package/src/server/plugins/postcode-lookup/routes/index.js +13 -16
- package/src/server/plugins/postcode-lookup/types.js +1 -0
- package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/src/server/types.ts +2 -0
- package/src/server/utils/utils.js +14 -0
- package/src/typings/hapi/index.d.ts +1 -0
- package/.server/server/plugins/engine/components/constants.d.ts +0 -1
- package/.server/server/plugins/engine/components/constants.js +0 -2
- package/.server/server/plugins/engine/components/constants.js.map +0 -1
- package/src/server/plugins/engine/components/constants.ts +0 -1
|
@@ -13,7 +13,12 @@ import {
|
|
|
13
13
|
} from './LocationFieldHelpers.js'
|
|
14
14
|
import { NumberField } from './NumberField.js'
|
|
15
15
|
import { createLowerFirstExpression } from './helpers/index.js'
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
type LatLongState,
|
|
18
|
+
type RenderContext
|
|
19
|
+
} from './types.js'
|
|
20
|
+
import { t as tPlugin } from '../i18n/index.js'
|
|
21
|
+
import { type Translator } from '../i18n/types.js'
|
|
17
22
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
18
23
|
import {
|
|
19
24
|
type ErrorMessageTemplateList,
|
|
@@ -51,31 +56,50 @@ export class LatLongField extends FormComponent {
|
|
|
51
56
|
const longitudeMin = schema?.longitude?.min ?? -13.687
|
|
52
57
|
const longitudeMax = schema?.longitude?.max ?? 1.767
|
|
53
58
|
|
|
54
|
-
const
|
|
55
|
-
const longitudeRequired = 'Enter longitude'
|
|
59
|
+
const fieldLabel = lowerFirst(this.label)
|
|
56
60
|
|
|
57
61
|
const customValidationMessages: LanguageMessages =
|
|
58
62
|
convertToLanguageMessages({
|
|
59
|
-
'number.precision':
|
|
60
|
-
'
|
|
61
|
-
|
|
63
|
+
'number.precision': tPlugin(
|
|
64
|
+
'components.latLongField.precision',
|
|
65
|
+
'en-GB'
|
|
66
|
+
),
|
|
67
|
+
'number.unsafe': tPlugin('components.latLongField.notANumber', 'en-GB')
|
|
62
68
|
})
|
|
63
69
|
|
|
64
|
-
const latitudeRangeMessage =
|
|
65
|
-
|
|
70
|
+
const latitudeRangeMessage = tPlugin(
|
|
71
|
+
'components.latLongField.latitudeRange',
|
|
72
|
+
'en-GB',
|
|
73
|
+
{ fieldLabel, min: latitudeMin, max: latitudeMax }
|
|
74
|
+
)
|
|
75
|
+
const longitudeRangeMessage = tPlugin(
|
|
76
|
+
'components.latLongField.longitudeRange',
|
|
77
|
+
'en-GB',
|
|
78
|
+
{ fieldLabel, min: longitudeMin, max: longitudeMax }
|
|
79
|
+
)
|
|
66
80
|
|
|
67
81
|
const latitudeMessages: LanguageMessages = convertToLanguageMessages({
|
|
68
82
|
...customValidationMessages,
|
|
69
|
-
'any.required':
|
|
70
|
-
|
|
83
|
+
'any.required': tPlugin(
|
|
84
|
+
'components.latLongField.latitudeRequired',
|
|
85
|
+
'en-GB'
|
|
86
|
+
),
|
|
87
|
+
'number.base': tPlugin('components.latLongField.latitudeBase', 'en-GB', {
|
|
88
|
+
fieldLabel
|
|
89
|
+
}),
|
|
71
90
|
'number.min': latitudeRangeMessage,
|
|
72
91
|
'number.max': latitudeRangeMessage
|
|
73
92
|
})
|
|
74
93
|
|
|
75
94
|
const longitudeMessages: LanguageMessages = convertToLanguageMessages({
|
|
76
95
|
...customValidationMessages,
|
|
77
|
-
'any.required':
|
|
78
|
-
|
|
96
|
+
'any.required': tPlugin(
|
|
97
|
+
'components.latLongField.longitudeRequired',
|
|
98
|
+
'en-GB'
|
|
99
|
+
),
|
|
100
|
+
'number.base': tPlugin('components.latLongField.longitudeBase', 'en-GB', {
|
|
101
|
+
fieldLabel
|
|
102
|
+
}),
|
|
79
103
|
'number.min': longitudeRangeMessage,
|
|
80
104
|
'number.max': longitudeRangeMessage
|
|
81
105
|
})
|
|
@@ -85,7 +109,7 @@ export class LatLongField extends FormComponent {
|
|
|
85
109
|
{
|
|
86
110
|
type: ComponentType.NumberField,
|
|
87
111
|
name: `${name}__latitude`,
|
|
88
|
-
title: '
|
|
112
|
+
title: 'components.latLongField.latitude',
|
|
89
113
|
schema: {
|
|
90
114
|
min: latitudeMin,
|
|
91
115
|
max: latitudeMax,
|
|
@@ -102,7 +126,7 @@ export class LatLongField extends FormComponent {
|
|
|
102
126
|
{
|
|
103
127
|
type: ComponentType.NumberField,
|
|
104
128
|
name: `${name}__longitude`,
|
|
105
|
-
title: '
|
|
129
|
+
title: 'components.latLongField.longitude',
|
|
106
130
|
schema: {
|
|
107
131
|
min: longitudeMin,
|
|
108
132
|
max: longitudeMax,
|
|
@@ -133,7 +157,10 @@ export class LatLongField extends FormComponent {
|
|
|
133
157
|
return LatLongField.isLatLong(value) ? value : undefined
|
|
134
158
|
}
|
|
135
159
|
|
|
136
|
-
getDisplayStringFromFormValue(
|
|
160
|
+
getDisplayStringFromFormValue(
|
|
161
|
+
value: LatLongState | undefined,
|
|
162
|
+
_translator: Translator
|
|
163
|
+
): string {
|
|
137
164
|
if (!value) {
|
|
138
165
|
return ''
|
|
139
166
|
}
|
|
@@ -142,10 +169,13 @@ export class LatLongField extends FormComponent {
|
|
|
142
169
|
return `${value.latitude}, ${value.longitude}`
|
|
143
170
|
}
|
|
144
171
|
|
|
145
|
-
getDisplayStringFromState(
|
|
172
|
+
getDisplayStringFromState(
|
|
173
|
+
state: FormSubmissionState,
|
|
174
|
+
translator: Translator
|
|
175
|
+
) {
|
|
146
176
|
const value = this.getFormValueFromState(state)
|
|
147
177
|
|
|
148
|
-
return this.getDisplayStringFromFormValue(value)
|
|
178
|
+
return this.getDisplayStringFromFormValue(value, translator)
|
|
149
179
|
}
|
|
150
180
|
|
|
151
181
|
getContextValueFromFormValue(value: LatLongState | undefined): string | null {
|
|
@@ -163,15 +193,16 @@ export class LatLongField extends FormComponent {
|
|
|
163
193
|
return this.getContextValueFromFormValue(value)
|
|
164
194
|
}
|
|
165
195
|
|
|
166
|
-
getViewModel(
|
|
167
|
-
const viewModel = super.getViewModel(
|
|
168
|
-
return getLocationFieldViewModel(this, viewModel,
|
|
196
|
+
getViewModel(context: RenderContext) {
|
|
197
|
+
const viewModel = super.getViewModel(context)
|
|
198
|
+
return getLocationFieldViewModel(this, viewModel, context)
|
|
169
199
|
}
|
|
170
200
|
|
|
171
201
|
getViewErrors(
|
|
202
|
+
translator: Translator,
|
|
172
203
|
errors?: FormSubmissionError[]
|
|
173
204
|
): FormSubmissionError[] | undefined {
|
|
174
|
-
const allErrors = this.getErrors(errors)
|
|
205
|
+
const allErrors = this.getErrors(translator, errors)
|
|
175
206
|
return deduplicateErrorsByHref(allErrors)
|
|
176
207
|
}
|
|
177
208
|
|
|
@@ -13,12 +13,14 @@ import joi, {
|
|
|
13
13
|
} from 'joi'
|
|
14
14
|
|
|
15
15
|
import { FormComponent } from './FormComponent.js'
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
type ListItem,
|
|
18
|
+
type RenderContext
|
|
19
|
+
} from './types.js'
|
|
20
|
+
import { type Translator } from '../i18n/types.js'
|
|
17
21
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
18
22
|
import {
|
|
19
23
|
type ErrorMessageTemplateList,
|
|
20
|
-
type FormPayload,
|
|
21
|
-
type FormSubmissionError,
|
|
22
24
|
type FormSubmissionState
|
|
23
25
|
} from '../types.js'
|
|
24
26
|
|
|
@@ -100,7 +102,8 @@ export class ListFormComponent extends FormComponent {
|
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
getDisplayStringFromFormValue(
|
|
103
|
-
value: string | number | boolean | Item['value'][] | undefined
|
|
105
|
+
value: string | number | boolean | Item['value'][] | undefined,
|
|
106
|
+
translator: Translator
|
|
104
107
|
): string {
|
|
105
108
|
const { items } = this
|
|
106
109
|
|
|
@@ -108,29 +111,42 @@ export class ListFormComponent extends FormComponent {
|
|
|
108
111
|
|
|
109
112
|
return items
|
|
110
113
|
.filter((item) => values.includes(item.value))
|
|
111
|
-
.map((item) => item.text)
|
|
114
|
+
.map((item) => translator.tListItem(item, 'text') || item.text)
|
|
112
115
|
.join(', ')
|
|
113
116
|
}
|
|
114
117
|
|
|
115
|
-
getDisplayStringFromState(
|
|
118
|
+
getDisplayStringFromState(
|
|
119
|
+
state: FormSubmissionState,
|
|
120
|
+
translator: Translator
|
|
121
|
+
) {
|
|
116
122
|
// Allow for array values via subclass
|
|
117
123
|
const value = this.getFormValueFromState(state)
|
|
118
124
|
|
|
119
|
-
return this.getDisplayStringFromFormValue(value)
|
|
125
|
+
return this.getDisplayStringFromFormValue(value, translator)
|
|
120
126
|
}
|
|
121
127
|
|
|
122
|
-
getViewModel(
|
|
128
|
+
getViewModel(context: RenderContext) {
|
|
123
129
|
const { items: listItems } = this
|
|
124
130
|
|
|
125
|
-
const viewModel = super.getViewModel(
|
|
131
|
+
const viewModel = super.getViewModel(context)
|
|
126
132
|
const { value } = viewModel
|
|
127
133
|
|
|
128
134
|
// Support multiple values for checkboxes
|
|
129
135
|
const values = this.isValue(value) ? [value].flat() : []
|
|
130
136
|
|
|
137
|
+
const { tListItem } = context.translator
|
|
138
|
+
|
|
131
139
|
const items = listItems.map((item) => {
|
|
132
140
|
const selected = values.includes(item.value)
|
|
133
|
-
const
|
|
141
|
+
const resolvedText = tListItem(item, 'text') || item.text
|
|
142
|
+
const resolvedHint = tListItem(item, 'hint') || item.hint?.text
|
|
143
|
+
const hintAttr = resolvedHint ? { hint: { text: resolvedHint } } : {}
|
|
144
|
+
const itemModel: ListItem = {
|
|
145
|
+
...item,
|
|
146
|
+
text: resolvedText,
|
|
147
|
+
selected,
|
|
148
|
+
...hintAttr
|
|
149
|
+
}
|
|
134
150
|
|
|
135
151
|
if ('id' in itemModel) {
|
|
136
152
|
delete itemModel.id
|
|
@@ -10,13 +10,12 @@ import {
|
|
|
10
10
|
isFormValue
|
|
11
11
|
} from './FormComponent.js'
|
|
12
12
|
import { addClassOptionIfNone } from './helpers/index.js'
|
|
13
|
+
import { type RenderContext } from './types.js'
|
|
13
14
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
14
15
|
import {
|
|
15
16
|
type ErrorMessageTemplateList,
|
|
16
|
-
type FormPayload,
|
|
17
17
|
type FormState,
|
|
18
18
|
type FormStateValue,
|
|
19
|
-
type FormSubmissionError,
|
|
20
19
|
type FormSubmissionState
|
|
21
20
|
} from '../types.js'
|
|
22
21
|
import { convertToLanguageMessages } from '../../../utils/type-utils.js'
|
|
@@ -63,8 +62,7 @@ export abstract class LocationFieldBase extends FormComponent {
|
|
|
63
62
|
addClassOptionIfNone(locationOptions, 'govuk-input--width-10')
|
|
64
63
|
|
|
65
64
|
const config = this.getValidationConfig()
|
|
66
|
-
const requiredMessage =
|
|
67
|
-
config.requiredMessage ?? (messageTemplate.required as string)
|
|
65
|
+
const requiredMessage = config.requiredMessage ?? messageTemplate.required
|
|
68
66
|
|
|
69
67
|
const messages = convertToLanguageMessages({
|
|
70
68
|
'any.required': requiredMessage,
|
|
@@ -120,8 +118,8 @@ export abstract class LocationFieldBase extends FormComponent {
|
|
|
120
118
|
return LocationFieldBase.isText(value)
|
|
121
119
|
}
|
|
122
120
|
|
|
123
|
-
getViewModel(
|
|
124
|
-
const viewModel = super.getViewModel(
|
|
121
|
+
getViewModel(context: RenderContext) {
|
|
122
|
+
const viewModel = super.getViewModel(context)
|
|
125
123
|
|
|
126
124
|
if (this.instructionText) {
|
|
127
125
|
return {
|
|
@@ -140,8 +138,7 @@ export abstract class LocationFieldBase extends FormComponent {
|
|
|
140
138
|
baseErrors: [
|
|
141
139
|
{
|
|
142
140
|
type: 'required',
|
|
143
|
-
template:
|
|
144
|
-
config.requiredMessage ?? (messageTemplate.required as string)
|
|
141
|
+
template: config.requiredMessage ?? messageTemplate.required
|
|
145
142
|
},
|
|
146
143
|
...this.getErrorTemplates()
|
|
147
144
|
],
|
|
@@ -6,6 +6,7 @@ import { type LatLongField } from './LatLongField.js'
|
|
|
6
6
|
import {
|
|
7
7
|
type DateInputItem,
|
|
8
8
|
type Label,
|
|
9
|
+
type RenderContext,
|
|
9
10
|
type ViewModel
|
|
10
11
|
} from './types.js'
|
|
11
12
|
import {
|
|
@@ -94,13 +95,12 @@ export function getLocationFieldViewModel(
|
|
|
94
95
|
name: string
|
|
95
96
|
value: FormValue
|
|
96
97
|
},
|
|
97
|
-
|
|
98
|
-
errors?: FormSubmissionError[]
|
|
98
|
+
context: RenderContext
|
|
99
99
|
) {
|
|
100
100
|
const { collection } = component
|
|
101
101
|
const { fieldset: existingFieldset, label } = viewModel
|
|
102
102
|
|
|
103
|
-
const subViewModels = collection.getViewModel(
|
|
103
|
+
const subViewModels = collection.getViewModel(context)
|
|
104
104
|
|
|
105
105
|
const fieldErrors: string[] = []
|
|
106
106
|
subViewModels.forEach(({ model }) => {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type MarkdownComponent } from '@defra/forms-model'
|
|
1
|
+
import { type ComponentDef, type MarkdownComponent } from '@defra/forms-model'
|
|
2
2
|
|
|
3
3
|
import { ComponentBase } from './ComponentBase.js'
|
|
4
|
+
import { type RenderContext } from './types.js'
|
|
4
5
|
|
|
5
6
|
export class Markdown extends ComponentBase {
|
|
6
7
|
declare options: MarkdownComponent['options']
|
|
@@ -20,12 +21,15 @@ export class Markdown extends ComponentBase {
|
|
|
20
21
|
this.headerStartLevel = 2
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
getViewModel() {
|
|
24
|
+
getViewModel(context: RenderContext) {
|
|
24
25
|
const { content, viewModel } = this
|
|
25
26
|
|
|
27
|
+
const { tComponent } = context.translator
|
|
28
|
+
|
|
26
29
|
return {
|
|
27
30
|
...viewModel,
|
|
28
|
-
content
|
|
31
|
+
content:
|
|
32
|
+
tComponent(this as unknown as ComponentDef, 'content') || content,
|
|
29
33
|
headerStartLevel: this.headerStartLevel
|
|
30
34
|
}
|
|
31
35
|
}
|
|
@@ -16,16 +16,18 @@ import {
|
|
|
16
16
|
import { NumberField } from './NumberField.js'
|
|
17
17
|
import {
|
|
18
18
|
type DateInputItem,
|
|
19
|
-
type MonthYearState
|
|
19
|
+
type MonthYearState,
|
|
20
|
+
type RenderContext
|
|
20
21
|
} from './types.js'
|
|
21
22
|
import { parseStrictDate } from '../date-helper.js'
|
|
23
|
+
import { buildValidationMessages } from '../i18n/buildValidationMessages.js'
|
|
24
|
+
import { type Translator } from '../i18n/types.js'
|
|
22
25
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
23
26
|
import {
|
|
24
27
|
type ErrorMessageTemplateList,
|
|
25
28
|
type FormPayload,
|
|
26
29
|
type FormState,
|
|
27
30
|
type FormStateValue,
|
|
28
|
-
type FormSubmissionError,
|
|
29
31
|
type FormSubmissionState
|
|
30
32
|
} from '../types.js'
|
|
31
33
|
import { convertToLanguageMessages } from '../../../utils/type-utils.js'
|
|
@@ -62,7 +64,7 @@ export class MonthYearField extends FormComponent {
|
|
|
62
64
|
{
|
|
63
65
|
type: ComponentType.NumberField,
|
|
64
66
|
name: `${name}__month`,
|
|
65
|
-
title: '
|
|
67
|
+
title: 'components.monthYearField.month',
|
|
66
68
|
schema: { min: 1, max: 12, precision: 0 },
|
|
67
69
|
options: {
|
|
68
70
|
required: isRequired,
|
|
@@ -74,7 +76,7 @@ export class MonthYearField extends FormComponent {
|
|
|
74
76
|
{
|
|
75
77
|
type: ComponentType.NumberField,
|
|
76
78
|
name: `${name}__year`,
|
|
77
|
-
title: '
|
|
79
|
+
title: 'components.monthYearField.year',
|
|
78
80
|
schema: { min: 1000, max: 3000, precision: 0 },
|
|
79
81
|
options: {
|
|
80
82
|
required: isRequired,
|
|
@@ -101,7 +103,10 @@ export class MonthYearField extends FormComponent {
|
|
|
101
103
|
return MonthYearField.isMonthYear(value) ? value : undefined
|
|
102
104
|
}
|
|
103
105
|
|
|
104
|
-
getDisplayStringFromFormValue(
|
|
106
|
+
getDisplayStringFromFormValue(
|
|
107
|
+
value: MonthYearState | undefined,
|
|
108
|
+
_translator: Translator
|
|
109
|
+
): string {
|
|
105
110
|
if (!value) {
|
|
106
111
|
return ''
|
|
107
112
|
}
|
|
@@ -113,10 +118,13 @@ export class MonthYearField extends FormComponent {
|
|
|
113
118
|
return `${monthString} ${value.year}`
|
|
114
119
|
}
|
|
115
120
|
|
|
116
|
-
getDisplayStringFromState(
|
|
121
|
+
getDisplayStringFromState(
|
|
122
|
+
state: FormSubmissionState,
|
|
123
|
+
translator: Translator
|
|
124
|
+
) {
|
|
117
125
|
const value = this.getFormValueFromState(state)
|
|
118
126
|
|
|
119
|
-
return this.getDisplayStringFromFormValue(value)
|
|
127
|
+
return this.getDisplayStringFromFormValue(value, translator)
|
|
120
128
|
}
|
|
121
129
|
|
|
122
130
|
getContextValueFromFormValue(
|
|
@@ -145,10 +153,24 @@ export class MonthYearField extends FormComponent {
|
|
|
145
153
|
return this.getContextValueFromFormValue(value)
|
|
146
154
|
}
|
|
147
155
|
|
|
148
|
-
|
|
156
|
+
getValidationMessagesOverride(translator: Translator) {
|
|
157
|
+
const { t } = translator
|
|
158
|
+
return convertToLanguageMessages({
|
|
159
|
+
'any.required': buildValidationMessages(t).objectMissing,
|
|
160
|
+
'number.base': buildValidationMessages(t).objectMissing,
|
|
161
|
+
'number.precision': buildValidationMessages(t).dateFormat,
|
|
162
|
+
'number.integer': buildValidationMessages(t).dateFormat,
|
|
163
|
+
'number.unsafe': buildValidationMessages(t).dateFormat,
|
|
164
|
+
'number.min': buildValidationMessages(t).dateFormat,
|
|
165
|
+
'number.max': buildValidationMessages(t).dateFormat
|
|
166
|
+
})
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
getViewModel(context: RenderContext) {
|
|
170
|
+
const { errors } = context
|
|
149
171
|
const { collection, name } = this
|
|
150
172
|
|
|
151
|
-
const viewModel = super.getViewModel(
|
|
173
|
+
const viewModel = super.getViewModel(context)
|
|
152
174
|
let { fieldset, label } = viewModel
|
|
153
175
|
|
|
154
176
|
// Check for component errors only
|
|
@@ -156,7 +178,7 @@ export class MonthYearField extends FormComponent {
|
|
|
156
178
|
|
|
157
179
|
// Use the component collection to generate the subitems
|
|
158
180
|
const items: DateInputItem[] = collection
|
|
159
|
-
.getViewModel(
|
|
181
|
+
.getViewModel(context)
|
|
160
182
|
.map(({ model }) => {
|
|
161
183
|
let { label, type, value, classes, errorMessage } = model
|
|
162
184
|
|
|
@@ -3,12 +3,9 @@ import Joi, { type CustomValidator, type StringSchema } from 'joi'
|
|
|
3
3
|
|
|
4
4
|
import { type ComponentBase } from './ComponentBase.js'
|
|
5
5
|
import { FormComponent } from './FormComponent.js'
|
|
6
|
+
import { type RenderContext } from './types.js'
|
|
6
7
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
7
|
-
import {
|
|
8
|
-
type ErrorMessageTemplateList,
|
|
9
|
-
type FormPayload,
|
|
10
|
-
type FormSubmissionError
|
|
11
|
-
} from '../types.js'
|
|
8
|
+
import { type ErrorMessageTemplateList } from '../types.js'
|
|
12
9
|
|
|
13
10
|
export class MultilineTextField extends FormComponent {
|
|
14
11
|
declare options: MultilineTextFieldComponent['options']
|
|
@@ -94,10 +91,10 @@ export class MultilineTextField extends FormComponent {
|
|
|
94
91
|
this.schema = schema
|
|
95
92
|
}
|
|
96
93
|
|
|
97
|
-
getViewModel(
|
|
94
|
+
getViewModel(context: RenderContext) {
|
|
98
95
|
const { schema, options, isCharacterOrWordCount } = this
|
|
99
96
|
|
|
100
|
-
const viewModel = super.getViewModel(
|
|
97
|
+
const viewModel = super.getViewModel(context)
|
|
101
98
|
let { maxlength, maxwords, rows } = viewModel
|
|
102
99
|
|
|
103
100
|
if (schema.max) {
|
|
@@ -122,7 +119,7 @@ export class MultilineTextField extends FormComponent {
|
|
|
122
119
|
}
|
|
123
120
|
|
|
124
121
|
buildMinMaxText(min?: number, max?: number): string {
|
|
125
|
-
const minMaxError = messageTemplate.minMax
|
|
122
|
+
const minMaxError = messageTemplate.minMax
|
|
126
123
|
return minMaxError
|
|
127
124
|
.replace('{{#min}}', min ? min.toString() : '[min length]')
|
|
128
125
|
.replace('{{#max}}', max ? max.toString() : '[max length]')
|
|
@@ -2,6 +2,8 @@ import { type NationalGridFieldNumberFieldComponent } from '@defra/forms-model'
|
|
|
2
2
|
|
|
3
3
|
import { LocationFieldBase } from './LocationFieldBase.js'
|
|
4
4
|
import { createLowerFirstExpression } from './helpers/index.js'
|
|
5
|
+
import { t } from '../i18n/index.js'
|
|
6
|
+
import { type ErrorMessageTemplateList } from '../types.js'
|
|
5
7
|
|
|
6
8
|
export class NationalGridFieldNumberField extends LocationFieldBase {
|
|
7
9
|
declare options: NationalGridFieldNumberFieldComponent['options']
|
|
@@ -13,14 +15,13 @@ export class NationalGridFieldNumberField extends LocationFieldBase {
|
|
|
13
15
|
const pattern =
|
|
14
16
|
/^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))\s?([0-9]{4})\s?([0-9]{4})$/
|
|
15
17
|
|
|
16
|
-
const patternTemplate =
|
|
17
|
-
'Enter a valid National Grid field number for {{lowerFirst(#title)}} like NG 1234 5678'
|
|
18
|
-
|
|
19
18
|
return {
|
|
20
19
|
pattern,
|
|
21
|
-
patternErrorMessage: createLowerFirstExpression(
|
|
20
|
+
patternErrorMessage: createLowerFirstExpression(
|
|
21
|
+
t('components.nationalGridField.pattern', 'en-GB')
|
|
22
|
+
),
|
|
22
23
|
requiredMessage: createLowerFirstExpression(
|
|
23
|
-
'
|
|
24
|
+
t('components.nationalGridField.required', 'en-GB')
|
|
24
25
|
)
|
|
25
26
|
}
|
|
26
27
|
}
|
|
@@ -30,7 +31,7 @@ export class NationalGridFieldNumberField extends LocationFieldBase {
|
|
|
30
31
|
{
|
|
31
32
|
type: 'pattern',
|
|
32
33
|
template: createLowerFirstExpression(
|
|
33
|
-
'
|
|
34
|
+
t('components.nationalGridField.pattern', 'en-GB')
|
|
34
35
|
)
|
|
35
36
|
}
|
|
36
37
|
]
|
|
@@ -39,10 +40,23 @@ export class NationalGridFieldNumberField extends LocationFieldBase {
|
|
|
39
40
|
/**
|
|
40
41
|
* Static version of getAllPossibleErrors that doesn't require a component instance.
|
|
41
42
|
*/
|
|
42
|
-
static getAllPossibleErrors() {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
static getAllPossibleErrors(): ErrorMessageTemplateList {
|
|
44
|
+
return {
|
|
45
|
+
baseErrors: [
|
|
46
|
+
{
|
|
47
|
+
type: 'required',
|
|
48
|
+
template: createLowerFirstExpression(
|
|
49
|
+
t('components.nationalGridField.required', 'en-GB')
|
|
50
|
+
)
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: 'pattern',
|
|
54
|
+
template: createLowerFirstExpression(
|
|
55
|
+
t('components.nationalGridField.pattern', 'en-GB')
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
advancedSettingsErrors: []
|
|
60
|
+
}
|
|
47
61
|
}
|
|
48
62
|
}
|
|
@@ -5,13 +5,12 @@ import {
|
|
|
5
5
|
FormComponent,
|
|
6
6
|
isFormValue
|
|
7
7
|
} from './FormComponent.js'
|
|
8
|
+
import { type RenderContext } from './types.js'
|
|
8
9
|
import { messageTemplate } from '../pageControllers/validationOptions.js'
|
|
9
10
|
import {
|
|
10
11
|
type ErrorMessageTemplateList,
|
|
11
|
-
type FormPayload,
|
|
12
12
|
type FormState,
|
|
13
13
|
type FormStateValue,
|
|
14
|
-
type FormSubmissionError,
|
|
15
14
|
type FormSubmissionState
|
|
16
15
|
} from '../types.js'
|
|
17
16
|
|
|
@@ -88,10 +87,10 @@ export class NumberField extends FormComponent {
|
|
|
88
87
|
return this.isValue(value) ? value : undefined
|
|
89
88
|
}
|
|
90
89
|
|
|
91
|
-
getViewModel(
|
|
90
|
+
getViewModel(context: RenderContext) {
|
|
92
91
|
const { options, schema } = this
|
|
93
92
|
|
|
94
|
-
const viewModel = super.getViewModel(
|
|
93
|
+
const viewModel = super.getViewModel(context)
|
|
95
94
|
let { attributes, prefix, suffix, value } = viewModel
|
|
96
95
|
|
|
97
96
|
if (typeof schema.precision === 'undefined' || schema.precision <= 0) {
|
|
@@ -2,6 +2,8 @@ import { type OsGridRefFieldComponent } from '@defra/forms-model'
|
|
|
2
2
|
|
|
3
3
|
import { LocationFieldBase } from './LocationFieldBase.js'
|
|
4
4
|
import { createLowerFirstExpression } from './helpers/index.js'
|
|
5
|
+
import { t } from '../i18n/index.js'
|
|
6
|
+
import { type ErrorMessageTemplateList } from '../types.js'
|
|
5
7
|
|
|
6
8
|
export class OsGridRefField extends LocationFieldBase {
|
|
7
9
|
declare options: OsGridRefFieldComponent['options']
|
|
@@ -16,14 +18,13 @@ export class OsGridRefField extends LocationFieldBase {
|
|
|
16
18
|
const pattern =
|
|
17
19
|
/^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))\s?(([0-9]{3})\s?([0-9]{3})|([0-9]{4})\s?([0-9]{4})|([0-9]{5})\s?([0-9]{5}))$/
|
|
18
20
|
|
|
19
|
-
const patternTemplate =
|
|
20
|
-
'Enter a valid OS grid reference for {{lowerFirst(#title)}} like TQ123456'
|
|
21
|
-
|
|
22
21
|
return {
|
|
23
22
|
pattern,
|
|
24
|
-
patternErrorMessage: createLowerFirstExpression(
|
|
23
|
+
patternErrorMessage: createLowerFirstExpression(
|
|
24
|
+
t('components.osGridRefField.pattern', 'en-GB')
|
|
25
|
+
),
|
|
25
26
|
requiredMessage: createLowerFirstExpression(
|
|
26
|
-
'
|
|
27
|
+
t('components.osGridRefField.required', 'en-GB')
|
|
27
28
|
)
|
|
28
29
|
}
|
|
29
30
|
}
|
|
@@ -33,7 +34,7 @@ export class OsGridRefField extends LocationFieldBase {
|
|
|
33
34
|
{
|
|
34
35
|
type: 'pattern',
|
|
35
36
|
template: createLowerFirstExpression(
|
|
36
|
-
'
|
|
37
|
+
t('components.osGridRefField.pattern', 'en-GB')
|
|
37
38
|
)
|
|
38
39
|
}
|
|
39
40
|
]
|
|
@@ -42,8 +43,23 @@ export class OsGridRefField extends LocationFieldBase {
|
|
|
42
43
|
/**
|
|
43
44
|
* Static version of getAllPossibleErrors that doesn't require a component instance.
|
|
44
45
|
*/
|
|
45
|
-
static getAllPossibleErrors() {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
static getAllPossibleErrors(): ErrorMessageTemplateList {
|
|
47
|
+
return {
|
|
48
|
+
baseErrors: [
|
|
49
|
+
{
|
|
50
|
+
type: 'required',
|
|
51
|
+
template: createLowerFirstExpression(
|
|
52
|
+
t('components.osGridRefField.required', 'en-GB')
|
|
53
|
+
)
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
type: 'pattern',
|
|
57
|
+
template: createLowerFirstExpression(
|
|
58
|
+
t('components.osGridRefField.pattern', 'en-GB')
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
advancedSettingsErrors: []
|
|
63
|
+
}
|
|
48
64
|
}
|
|
49
65
|
}
|