@defra/forms-engine-plugin 4.23.0 → 5.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.public/assets-manifest.json +3 -5
- package/.public/javascripts/im-core.min.js +2 -0
- package/.public/javascripts/im-core.min.js.map +1 -0
- package/.public/javascripts/shared.min.js +1 -1
- package/.public/javascripts/shared.min.js.map +1 -1
- package/.public/javascripts/vendor/@defra.min.js +1 -1
- package/.public/javascripts/vendor/@defra.min.js.map +1 -1
- package/.public/stylesheets/application.min.css +1 -1
- package/.public/stylesheets/application.min.css.map +1 -1
- package/.server/client/javascripts/geospatial-map.js +8 -6
- package/.server/client/javascripts/geospatial-map.js.map +1 -1
- package/.server/client/javascripts/location-map.js +8 -1
- package/.server/client/javascripts/location-map.js.map +1 -1
- package/.server/client/javascripts/map.d.ts +6 -0
- package/.server/client/javascripts/map.js +10 -0
- package/.server/client/javascripts/map.js.map +1 -1
- package/.server/client/javascripts/sssi-dataset.d.ts +34 -0
- package/.server/client/javascripts/sssi-dataset.js +101 -0
- package/.server/client/javascripts/sssi-dataset.js.map +1 -0
- package/.server/client/stylesheets/shared.scss +0 -2
- package/.server/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
- package/.server/server/forms/simple-form.yaml +106 -3
- package/.server/server/plugins/engine/components/AutocompleteField.d.ts +11 -11
- package/.server/server/plugins/engine/components/AutocompleteField.js +2 -2
- package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
- package/.server/server/plugins/engine/components/CheckboxesField.d.ts +3 -2
- package/.server/server/plugins/engine/components/CheckboxesField.js +4 -9
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.d.ts +8 -7
- package/.server/server/plugins/engine/components/ComponentCollection.js +106 -51
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/DatePartsField.d.ts +8 -6
- package/.server/server/plugins/engine/components/DatePartsField.js +27 -9
- package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
- package/.server/server/plugins/engine/components/DeclarationField.d.ts +13 -11
- package/.server/server/plugins/engine/components/DeclarationField.js +31 -9
- package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
- package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +8 -5
- package/.server/server/plugins/engine/components/EastingNorthingField.js +42 -22
- package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
- package/.server/server/plugins/engine/components/EmailAddressField.d.ts +11 -14
- package/.server/server/plugins/engine/components/EmailAddressField.js +2 -2
- package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/FileUploadField.d.ts +14 -12
- package/.server/server/plugins/engine/components/FileUploadField.js +22 -12
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
- package/.server/server/plugins/engine/components/FormComponent.d.ts +21 -12
- package/.server/server/plugins/engine/components/FormComponent.js +33 -14
- package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/GeospatialField.d.ts +15 -12
- package/.server/server/plugins/engine/components/GeospatialField.js +21 -13
- package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
- package/.server/server/plugins/engine/components/LatLongField.d.ts +8 -5
- package/.server/server/plugins/engine/components/LatLongField.js +32 -20
- package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
- package/.server/server/plugins/engine/components/ListFormComponent.d.ts +7 -6
- package/.server/server/plugins/engine/components/ListFormComponent.js +19 -7
- package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +17 -16
- package/.server/server/plugins/engine/components/LocationFieldBase.js +2 -2
- package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
- package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +8 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js +14 -3
- package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
- package/.server/server/plugins/engine/components/Markdown.d.ts +8 -7
- package/.server/server/plugins/engine/components/Markdown.js +5 -2
- package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
- package/.server/server/plugins/engine/components/MonthYearField.d.ts +9 -7
- package/.server/server/plugins/engine/components/MonthYearField.js +26 -8
- package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
- package/.server/server/plugins/engine/components/MultilineTextField.d.ts +10 -9
- package/.server/server/plugins/engine/components/MultilineTextField.js +2 -2
- package/.server/server/plugins/engine/components/MultilineTextField.js.map +1 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +14 -6
- package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/NumberField.d.ts +10 -9
- package/.server/server/plugins/engine/components/NumberField.js +2 -2
- package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
- package/.server/server/plugins/engine/components/OsGridRefField.js +14 -6
- package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
- package/.server/server/plugins/engine/components/PaymentField.d.ts +12 -10
- package/.server/server/plugins/engine/components/PaymentField.js +21 -8
- package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectField.d.ts +11 -11
- package/.server/server/plugins/engine/components/SelectField.js +2 -2
- package/.server/server/plugins/engine/components/SelectField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectionControlField.d.ts +4 -4
- package/.server/server/plugins/engine/components/SelectionControlField.js +2 -2
- package/.server/server/plugins/engine/components/SelectionControlField.js.map +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +10 -9
- package/.server/server/plugins/engine/components/TelephoneNumberField.js +2 -2
- package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/UkAddressField.d.ts +12 -10
- package/.server/server/plugins/engine/components/UkAddressField.js +29 -17
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.d.ts +3 -0
- package/.server/server/plugins/engine/components/YesNoField.js +9 -0
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/components.d.ts +3 -2
- package/.server/server/plugins/engine/components/helpers/components.js +11 -8
- package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
- package/.server/server/plugins/engine/components/types.d.ts +8 -1
- package/.server/server/plugins/engine/components/types.js.map +1 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js +8 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -1
- package/.server/server/plugins/engine/form-context.d.ts +1 -0
- package/.server/server/plugins/engine/form-context.js +4 -2
- package/.server/server/plugins/engine/form-context.js.map +1 -1
- package/.server/server/plugins/engine/helpers.d.ts +1 -1
- package/.server/server/plugins/engine/helpers.js +8 -13
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +39 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js +50 -0
- package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +5 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.js +18 -0
- package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -0
- package/.server/server/plugins/engine/i18n/createTranslator.d.ts +9 -0
- package/.server/server/plugins/engine/i18n/createTranslator.js +51 -0
- package/.server/server/plugins/engine/i18n/createTranslator.js.map +1 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +5 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +57 -0
- package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -0
- package/.server/server/plugins/engine/i18n/index.d.ts +18 -0
- package/.server/server/plugins/engine/i18n/index.js +71 -0
- package/.server/server/plugins/engine/i18n/index.js.map +1 -0
- package/.server/server/plugins/engine/i18n/translations/cy.json +271 -0
- package/.server/server/plugins/engine/i18n/translations/en-GB.json +271 -0
- package/.server/server/plugins/engine/i18n/types.d.ts +41 -0
- package/.server/server/plugins/engine/i18n/types.js +2 -0
- package/.server/server/plugins/engine/i18n/types.js.map +1 -0
- package/.server/server/plugins/engine/index.js +3 -2
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.d.ts +9 -1
- package/.server/server/plugins/engine/models/FormModel.js +44 -18
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +5 -2
- package/.server/server/plugins/engine/models/SummaryViewModel.js +44 -18
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/options.js +2 -1
- package/.server/server/plugins/engine/options.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +4 -0
- package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js +7 -6
- package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +2 -1
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +6 -3
- package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/PageController.d.ts +3 -1
- package/.server/server/plugins/engine/pageControllers/PageController.js +11 -1
- package/.server/server/plugins/engine/pageControllers/PageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +4 -2
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +52 -21
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +3 -2
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +63 -26
- package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +3 -1
- package/.server/server/plugins/engine/pageControllers/StartPageController.js +2 -2
- package/.server/server/plugins/engine/pageControllers/StartPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js +12 -2
- package/.server/server/plugins/engine/pageControllers/StatusPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +4 -3
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +44 -28
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.d.ts +2 -0
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js +24 -0
- package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js.map +1 -0
- package/.server/server/plugins/engine/pageControllers/errors.d.ts +1 -1
- package/.server/server/plugins/engine/pageControllers/errors.js +3 -2
- package/.server/server/plugins/engine/pageControllers/errors.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +3 -2
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js +4 -4
- package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +7 -3
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +34 -33
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/plugin.js +2 -0
- package/.server/server/plugins/engine/plugin.js.map +1 -1
- package/.server/server/plugins/engine/routes/index.js +4 -1
- package/.server/server/plugins/engine/routes/index.js.map +1 -1
- package/.server/server/plugins/engine/routes/questions.js +5 -2
- package/.server/server/plugins/engine/routes/questions.js.map +1 -1
- package/.server/server/plugins/engine/types/index.d.ts +1 -0
- package/.server/server/plugins/engine/types/index.js.map +1 -1
- package/.server/server/plugins/engine/types/schema.js +1 -0
- package/.server/server/plugins/engine/types/schema.js.map +1 -1
- package/.server/server/plugins/engine/types.d.ts +12 -1
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/views/components/_location-field-base.html +4 -2
- package/.server/server/plugins/engine/views/components/fileuploadfield.html +3 -3
- package/.server/server/plugins/engine/views/components/geospatialfield.html +4 -1
- package/.server/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
- package/.server/server/plugins/engine/views/components/osgridreffield.html +1 -1
- package/.server/server/plugins/engine/views/components/paymentfield.html +8 -8
- package/.server/server/plugins/engine/views/components/ukaddressfield.html +4 -4
- package/.server/server/plugins/engine/views/confirmation.html +4 -4
- package/.server/server/plugins/engine/views/exit.html +4 -4
- package/.server/server/plugins/engine/views/file-upload.html +3 -3
- package/.server/server/plugins/engine/views/index.html +3 -3
- package/.server/server/plugins/engine/views/item-delete.html +1 -1
- package/.server/server/plugins/engine/views/partials/form.html +3 -3
- package/.server/server/plugins/engine/views/partials/preview-banner.html +4 -4
- package/.server/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
- package/.server/server/plugins/engine/views/repeat-list-summary.html +4 -4
- package/.server/server/plugins/engine/views/summary.html +14 -7
- package/.server/server/plugins/map/routes/index.js +1 -1
- package/.server/server/plugins/map/routes/index.js.map +1 -1
- package/.server/server/plugins/map/types.d.ts +1 -25
- package/.server/server/plugins/map/types.js +1 -16
- package/.server/server/plugins/map/types.js.map +1 -1
- package/.server/server/plugins/nunjucks/enviroment.test.js +10 -0
- package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/environment.d.ts +8 -0
- package/.server/server/plugins/nunjucks/environment.js +13 -0
- package/.server/server/plugins/nunjucks/environment.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.js +9 -1
- package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/answer.test.js +13 -2
- package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
- package/.server/server/plugins/postcode-lookup/models/index.d.ts +24 -19
- package/.server/server/plugins/postcode-lookup/models/index.js +83 -76
- package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.js +7 -13
- package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/types.d.ts +1 -0
- package/.server/server/plugins/postcode-lookup/types.js +1 -0
- package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/.server/server/types.d.ts +2 -1
- package/.server/server/types.js.map +1 -1
- package/.server/server/utils/utils.d.ts +5 -0
- package/.server/server/utils/utils.js +16 -0
- package/.server/server/utils/utils.js.map +1 -1
- package/.server/typings/hapi/index.d.js.map +1 -1
- package/package.json +5 -4
- package/src/client/javascripts/geospatial-map.js +10 -6
- package/src/client/javascripts/location-map.js +11 -0
- package/src/client/javascripts/map.js +10 -0
- package/src/client/javascripts/sssi-dataset.js +106 -0
- package/src/client/stylesheets/shared.scss +0 -2
- package/src/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
- package/src/server/forms/simple-form.yaml +106 -3
- package/src/server/plugins/engine/components/AutocompleteField.ts +3 -6
- package/src/server/plugins/engine/components/CheckboxesField.ts +12 -11
- package/src/server/plugins/engine/components/ComponentCollection.ts +143 -61
- package/src/server/plugins/engine/components/DatePartsField.ts +33 -11
- package/src/server/plugins/engine/components/DeclarationField.ts +37 -14
- package/src/server/plugins/engine/components/EastingNorthingField.ts +83 -22
- package/src/server/plugins/engine/components/EmailAddressField.ts +4 -7
- package/src/server/plugins/engine/components/FileUploadField.ts +28 -22
- package/src/server/plugins/engine/components/FormComponent.ts +49 -12
- package/src/server/plugins/engine/components/GeospatialField.ts +38 -21
- package/src/server/plugins/engine/components/LatLongField.ts +52 -21
- package/src/server/plugins/engine/components/ListFormComponent.ts +26 -10
- package/src/server/plugins/engine/components/LocationFieldBase.ts +5 -8
- package/src/server/plugins/engine/components/LocationFieldHelpers.ts +24 -4
- package/src/server/plugins/engine/components/Markdown.ts +7 -3
- package/src/server/plugins/engine/components/MonthYearField.ts +32 -10
- package/src/server/plugins/engine/components/MultilineTextField.ts +5 -8
- package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +25 -11
- package/src/server/plugins/engine/components/NumberField.ts +3 -4
- package/src/server/plugins/engine/components/OsGridRefField.ts +25 -9
- package/src/server/plugins/engine/components/PaymentField.ts +22 -12
- package/src/server/plugins/engine/components/SelectField.ts +3 -6
- package/src/server/plugins/engine/components/SelectionControlField.ts +7 -8
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +4 -7
- package/src/server/plugins/engine/components/UkAddressField.ts +33 -18
- package/src/server/plugins/engine/components/YesNoField.ts +10 -0
- package/src/server/plugins/engine/components/helpers/components.ts +13 -6
- package/src/server/plugins/engine/components/types.ts +9 -0
- package/src/server/plugins/engine/configureEnginePlugin.ts +12 -1
- package/src/server/plugins/engine/form-context.ts +8 -2
- package/src/server/plugins/engine/helpers.ts +10 -18
- package/src/server/plugins/engine/i18n/buildValidationMessages.ts +69 -0
- package/src/server/plugins/engine/i18n/createFormTranslator.ts +33 -0
- package/src/server/plugins/engine/i18n/createTranslator.ts +61 -0
- package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +61 -0
- package/src/server/plugins/engine/i18n/index.ts +80 -0
- package/src/server/plugins/engine/i18n/translations/cy.json +271 -0
- package/src/server/plugins/engine/i18n/translations/en-GB.json +271 -0
- package/src/server/plugins/engine/i18n/types.ts +62 -0
- package/src/server/plugins/engine/index.ts +4 -2
- package/src/server/plugins/engine/models/FormModel.ts +59 -23
- package/src/server/plugins/engine/models/SummaryViewModel.ts +68 -25
- package/src/server/plugins/engine/options.js +2 -1
- package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +5 -0
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -3
- package/src/server/plugins/engine/outputFormatters/machine/v1.ts +9 -8
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +7 -3
- package/src/server/plugins/engine/pageControllers/PageController.ts +12 -1
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +53 -21
- package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +66 -29
- package/src/server/plugins/engine/pageControllers/StartPageController.ts +7 -2
- package/src/server/plugins/engine/pageControllers/StatusPageController.ts +10 -2
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +48 -22
- package/src/server/plugins/engine/pageControllers/__stubs__/translator.ts +28 -0
- package/src/server/plugins/engine/pageControllers/errors.ts +4 -2
- package/src/server/plugins/engine/pageControllers/helpers/submission.ts +11 -4
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +43 -53
- package/src/server/plugins/engine/plugin.ts +2 -0
- package/src/server/plugins/engine/routes/index.ts +9 -1
- package/src/server/plugins/engine/routes/questions.ts +5 -1
- package/src/server/plugins/engine/types/index.ts +5 -0
- package/src/server/plugins/engine/types/schema.ts +1 -0
- package/src/server/plugins/engine/types.ts +10 -0
- package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
- package/src/server/plugins/engine/views/components/fileuploadfield.html +3 -3
- package/src/server/plugins/engine/views/components/geospatialfield.html +4 -1
- package/src/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
- package/src/server/plugins/engine/views/components/osgridreffield.html +1 -1
- package/src/server/plugins/engine/views/components/paymentfield.html +8 -8
- package/src/server/plugins/engine/views/components/ukaddressfield.html +4 -4
- package/src/server/plugins/engine/views/confirmation.html +4 -4
- package/src/server/plugins/engine/views/exit.html +4 -4
- package/src/server/plugins/engine/views/file-upload.html +3 -3
- package/src/server/plugins/engine/views/index.html +3 -3
- package/src/server/plugins/engine/views/item-delete.html +1 -1
- package/src/server/plugins/engine/views/partials/form.html +3 -3
- package/src/server/plugins/engine/views/partials/preview-banner.html +4 -4
- package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
- package/src/server/plugins/engine/views/repeat-list-summary.html +4 -4
- package/src/server/plugins/engine/views/summary.html +14 -7
- package/src/server/plugins/map/routes/index.js +1 -1
- package/src/server/plugins/map/types.js +1 -16
- package/src/server/plugins/nunjucks/environment.js +14 -0
- package/src/server/plugins/nunjucks/filters/answer.js +12 -1
- package/src/server/plugins/postcode-lookup/models/index.js +144 -87
- package/src/server/plugins/postcode-lookup/routes/index.js +13 -16
- package/src/server/plugins/postcode-lookup/types.js +1 -0
- package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
- package/src/server/types.ts +2 -0
- package/src/server/utils/utils.js +14 -0
- package/src/typings/hapi/index.d.ts +1 -0
- package/.public/javascripts/im-search-plugin.min.js +0 -2
- package/.public/javascripts/im-search-plugin.min.js.map +0 -1
- package/.public/javascripts/vendor/preact.min.js +0 -2
- package/.public/javascripts/vendor/preact.min.js.map +0 -1
- package/.server/server/plugins/engine/components/constants.d.ts +0 -1
- package/.server/server/plugins/engine/components/constants.js +0 -2
- package/.server/server/plugins/engine/components/constants.js.map +0 -1
- package/src/server/plugins/engine/components/constants.ts +0 -1
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { type DeclarationFieldComponent, type Item } from '@defra/forms-model';
|
|
2
|
-
import { type ArraySchema, type BooleanSchema, type StringSchema } from 'joi';
|
|
2
|
+
import { type ArraySchema, type BooleanSchema, type LanguageMessages, type StringSchema } from 'joi';
|
|
3
3
|
import { FormComponent } from '../../../../server/plugins/engine/components/FormComponent.js';
|
|
4
|
-
import { type
|
|
4
|
+
import { type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
5
|
+
import { type Translator } from '../../../../server/plugins/engine/i18n/types.js';
|
|
6
|
+
import { type ErrorMessageTemplateList, type FormPayload, type FormState, type FormStateValue, type FormSubmissionState, type FormValue } from '../../../../server/plugins/engine/types.js';
|
|
5
7
|
export declare class DeclarationField extends FormComponent {
|
|
6
|
-
private readonly DEFAULT_DECLARATION_LABEL;
|
|
7
8
|
options: DeclarationFieldComponent['options'];
|
|
8
|
-
declarationConfirmationLabel: string;
|
|
9
|
+
declarationConfirmationLabel: string | undefined;
|
|
9
10
|
formSchema: ArraySchema<StringSchema[]>;
|
|
10
11
|
stateSchema: BooleanSchema;
|
|
11
12
|
content: string;
|
|
@@ -16,14 +17,15 @@ export declare class DeclarationField extends FormComponent {
|
|
|
16
17
|
getStateFromValidForm(payload: FormPayload): FormState;
|
|
17
18
|
getContextValueFromFormValue(value: FormValue | FormPayload): boolean;
|
|
18
19
|
getFormValue(value?: FormStateValue | FormState): (string | number | boolean)[] | undefined;
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
getValidationMessagesOverride(translator: Translator): LanguageMessages;
|
|
21
|
+
getDisplayStringFromFormValue(value: FormValue | FormPayload, translator: Translator): string;
|
|
22
|
+
getViewModel(context: RenderContext): {
|
|
21
23
|
hint: {
|
|
22
24
|
text: string;
|
|
23
25
|
} | undefined;
|
|
24
26
|
fieldset: {
|
|
25
27
|
attributes?: string | Record<string, string>;
|
|
26
|
-
legend?: import("
|
|
28
|
+
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
27
29
|
};
|
|
28
30
|
content: string;
|
|
29
31
|
items: {
|
|
@@ -39,11 +41,11 @@ export declare class DeclarationField extends FormComponent {
|
|
|
39
41
|
name: string;
|
|
40
42
|
value: FormValue;
|
|
41
43
|
type?: string;
|
|
42
|
-
prefix?: import("
|
|
43
|
-
suffix?: import("
|
|
44
|
+
prefix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
45
|
+
suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
44
46
|
classes?: string;
|
|
45
47
|
condition?: string;
|
|
46
|
-
errors?: FormSubmissionError[];
|
|
48
|
+
errors?: import("../../../../server/plugins/engine/types.js").FormSubmissionError[];
|
|
47
49
|
errorMessage?: {
|
|
48
50
|
text: string;
|
|
49
51
|
};
|
|
@@ -64,7 +66,7 @@ export declare class DeclarationField extends FormComponent {
|
|
|
64
66
|
attributes?: string | Record<string, string>;
|
|
65
67
|
};
|
|
66
68
|
showFieldsetError?: boolean;
|
|
67
|
-
components?: import("
|
|
69
|
+
components?: import("../../../../server/plugins/engine/components/types.js").ComponentViewModel[];
|
|
68
70
|
upload?: {
|
|
69
71
|
count: number;
|
|
70
72
|
summaryList: import("../../../../server/plugins/engine/types.js").SummaryList;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ComponentType, hasFormComponents, isFormType } from '@defra/forms-model';
|
|
2
2
|
import joi from 'joi';
|
|
3
3
|
import { FormComponent, isFormValue } from "./FormComponent.js";
|
|
4
|
+
import { buildValidationMessages } from "../i18n/buildValidationMessages.js";
|
|
4
5
|
import { messageTemplate } from "../pageControllers/validationOptions.js";
|
|
5
6
|
export class DeclarationField extends FormComponent {
|
|
6
|
-
DEFAULT_DECLARATION_LABEL = 'I understand and agree';
|
|
7
7
|
headerStartLevel;
|
|
8
8
|
constructor(def, props) {
|
|
9
9
|
super(def, props);
|
|
@@ -24,7 +24,9 @@ export class DeclarationField extends FormComponent {
|
|
|
24
24
|
this.stateSchema = joi.boolean().cast('string').label(this.label).required();
|
|
25
25
|
this.options = options;
|
|
26
26
|
this.content = content;
|
|
27
|
-
|
|
27
|
+
// Store only the form-authored label (if provided). If absent, getViewModel
|
|
28
|
+
// resolves the default via t() at render time so the correct language is used.
|
|
29
|
+
this.declarationConfirmationLabel = options.declarationConfirmationLabel;
|
|
28
30
|
const formComponents = hasFormComponents(props.page?.pageDef) ? props.page.pageDef.components : [];
|
|
29
31
|
const numOfQuestionsOnPage = formComponents.filter(q => isFormType(q.type)).length;
|
|
30
32
|
const hasGuidance = formComponents.some((comp, idx) => comp.type === ComponentType.Markdown && idx === 0);
|
|
@@ -62,17 +64,37 @@ export class DeclarationField extends FormComponent {
|
|
|
62
64
|
getFormValue(value) {
|
|
63
65
|
return this.isValue(value) ? value : undefined;
|
|
64
66
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
getValidationMessagesOverride(translator) {
|
|
68
|
+
const {
|
|
69
|
+
declarationRequired
|
|
70
|
+
} = buildValidationMessages(translator.t);
|
|
71
|
+
const msg = declarationRequired;
|
|
72
|
+
return {
|
|
73
|
+
'any.required': msg,
|
|
74
|
+
'any.unknown': msg,
|
|
75
|
+
'array.includesRequiredUnknowns': msg
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
getDisplayStringFromFormValue(value, translator) {
|
|
79
|
+
const {
|
|
80
|
+
t
|
|
81
|
+
} = translator;
|
|
82
|
+
return value === 'true' ? this.declarationConfirmationLabel ?? t('components.declarationField.defaultLabel') : t('components.declarationField.notProvided');
|
|
67
83
|
}
|
|
68
|
-
getViewModel(
|
|
69
|
-
const
|
|
84
|
+
getViewModel(context) {
|
|
85
|
+
const {
|
|
86
|
+
payload
|
|
87
|
+
} = context;
|
|
88
|
+
const {
|
|
89
|
+
t,
|
|
90
|
+
tComponent
|
|
91
|
+
} = context.translator;
|
|
70
92
|
const {
|
|
71
93
|
hint,
|
|
72
|
-
|
|
73
|
-
declarationConfirmationLabel = defaultDeclarationConfirmationLabel
|
|
94
|
+
declarationConfirmationLabel = t('components.declarationField.defaultLabel')
|
|
74
95
|
} = this;
|
|
75
|
-
const
|
|
96
|
+
const content = tComponent(this, 'content');
|
|
97
|
+
const viewModel = super.getViewModel(context);
|
|
76
98
|
let {
|
|
77
99
|
fieldset,
|
|
78
100
|
label
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeclarationField.js","names":["ComponentType","hasFormComponents","isFormType","joi","FormComponent","isFormValue","messageTemplate","DeclarationField","DEFAULT_DECLARATION_LABEL","headerStartLevel","constructor","def","props","options","content","checkboxSchema","string","valid","required","formSchema","array","items","strip","label","single","messages","declarationRequired","stateSchema","boolean","cast","declarationConfirmationLabel","formComponents","page","pageDef","components","numOfQuestionsOnPage","filter","q","type","length","hasGuidance","some","comp","idx","Markdown","getFormValueFromState","state","name","getFormDataFromState","getStateFromValidForm","payload","payloadValue","value","isValue","every","v","getContextValueFromFormValue","getFormValue","undefined","getDisplayStringFromFormValue","getViewModel","errors","defaultDeclarationConfirmationLabel","hint","viewModel","fieldset","legend","text","classes","isChecked","Array","isArray","x","checked","getAllPossibleErrors","baseErrors","template","advancedSettingsErrors","isBool"],"sources":["../../../../../src/server/plugins/engine/components/DeclarationField.ts"],"sourcesContent":["import {\n ComponentType,\n hasFormComponents,\n isFormType,\n type DeclarationFieldComponent,\n type Item\n} from '@defra/forms-model'\nimport joi, {\n type ArraySchema,\n type BooleanSchema,\n type StringSchema\n} from 'joi'\n\nimport {\n FormComponent,\n isFormValue\n} from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport {\n type ErrorMessageTemplateList,\n type FormPayload,\n type FormState,\n type FormStateValue,\n type FormSubmissionError,\n type FormSubmissionState,\n type FormValue\n} from '~/src/server/plugins/engine/types.js'\n\nexport class DeclarationField extends FormComponent {\n private readonly DEFAULT_DECLARATION_LABEL = 'I understand and agree'\n\n declare options: DeclarationFieldComponent['options']\n\n declare declarationConfirmationLabel: string\n\n declare formSchema: ArraySchema<StringSchema[]>\n declare stateSchema: BooleanSchema\n declare content: string\n headerStartLevel: number\n\n constructor(\n def: DeclarationFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { options, content } = def\n\n let checkboxSchema = joi.string().valid('true')\n\n if (options.required !== false) {\n checkboxSchema = checkboxSchema.required()\n }\n\n const formSchema = joi\n .array()\n .items(checkboxSchema, joi.string().valid('unchecked').strip())\n .label(this.label)\n .single()\n .messages({\n 'any.required': messageTemplate.declarationRequired as string,\n 'any.unknown': messageTemplate.declarationRequired as string,\n 'array.includesRequiredUnknowns':\n messageTemplate.declarationRequired as string\n }) as ArraySchema<StringSchema[]>\n\n this.formSchema = formSchema\n this.stateSchema = joi.boolean().cast('string').label(this.label).required()\n\n this.options = options\n this.content = content\n this.declarationConfirmationLabel =\n options.declarationConfirmationLabel ?? this.DEFAULT_DECLARATION_LABEL\n const formComponents = hasFormComponents(props.page?.pageDef)\n ? props.page.pageDef.components\n : []\n const numOfQuestionsOnPage = formComponents.filter((q) =>\n isFormType(q.type)\n ).length\n const hasGuidance = formComponents.some(\n (comp, idx) => comp.type === ComponentType.Markdown && idx === 0\n )\n this.headerStartLevel = numOfQuestionsOnPage < 2 && !hasGuidance ? 2 : 3\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const { name } = this\n return state[name] === true ? 'true' : 'false'\n }\n\n getFormDataFromState(state: FormSubmissionState): FormPayload {\n const { name } = this\n return { [name]: state[name] === true ? 'true' : 'false' }\n }\n\n getStateFromValidForm(payload: FormPayload): FormState {\n const { name } = this\n const payloadValue = payload[name]\n const value =\n this.isValue(payloadValue) &&\n payloadValue.length > 0 &&\n payloadValue.every((v) => {\n return v === 'true'\n })\n\n return { [name]: value }\n }\n\n getContextValueFromFormValue(value: FormValue | FormPayload): boolean {\n return value === 'true'\n }\n\n getFormValue(value?: FormStateValue | FormState) {\n return this.isValue(value) ? value : undefined\n }\n\n getDisplayStringFromFormValue(value: FormValue | FormPayload): string {\n return value === 'true' ? this.declarationConfirmationLabel : 'Not provided'\n }\n\n getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {\n const defaultDeclarationConfirmationLabel =\n 'I confirm that I understand and accept this declaration'\n const {\n hint,\n content,\n declarationConfirmationLabel = defaultDeclarationConfirmationLabel\n } = this\n\n const viewModel = super.getViewModel(payload, errors)\n let { fieldset, label } = viewModel\n\n fieldset ??= {\n legend: {\n text: label.text,\n classes: 'govuk-fieldset__legend--m'\n }\n }\n\n const payloadValue = payload[this.name]\n const isChecked =\n payloadValue === 'true' ||\n payloadValue === true ||\n (Array.isArray(payloadValue) && payloadValue.some((x) => x === 'true'))\n\n return {\n ...viewModel,\n hint: hint ? { text: hint } : undefined,\n fieldset,\n content,\n items: [\n {\n text: declarationConfirmationLabel,\n value: 'true',\n checked: isChecked\n }\n ],\n headerStartLevel: this.headerStartLevel\n }\n }\n\n isValue(value?: FormStateValue | FormState): value is Item['value'][] {\n if (!Array.isArray(value)) {\n return false\n }\n\n // Skip checks when empty\n if (!value.length) {\n return true\n }\n\n return value.every(isFormValue)\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return DeclarationField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: messageTemplate.declarationRequired }\n ],\n advancedSettingsErrors: []\n }\n }\n\n static isBool(value?: FormStateValue | FormState): value is boolean {\n return isFormValue(value) && typeof value === 'boolean'\n }\n}\n"],"mappings":"AAAA,SACEA,aAAa,EACbC,iBAAiB,EACjBC,UAAU,QAGL,oBAAoB;AAC3B,OAAOC,GAAG,MAIH,KAAK;AAEZ,SACEC,aAAa,EACbC,WAAW;AAEb,SAASC,eAAe;AAWxB,OAAO,MAAMC,gBAAgB,SAASH,aAAa,CAAC;EACjCI,yBAAyB,GAAG,wBAAwB;EASrEC,gBAAgB;EAEhBC,WAAWA,CACTC,GAA8B,EAC9BC,KAAqD,EACrD;IACA,KAAK,CAACD,GAAG,EAAEC,KAAK,CAAC;IAEjB,MAAM;MAAEC,OAAO;MAAEC;IAAQ,CAAC,GAAGH,GAAG;IAEhC,IAAII,cAAc,GAAGZ,GAAG,CAACa,MAAM,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,CAAC;IAE/C,IAAIJ,OAAO,CAACK,QAAQ,KAAK,KAAK,EAAE;MAC9BH,cAAc,GAAGA,cAAc,CAACG,QAAQ,CAAC,CAAC;IAC5C;IAEA,MAAMC,UAAU,GAAGhB,GAAG,CACnBiB,KAAK,CAAC,CAAC,CACPC,KAAK,CAACN,cAAc,EAAEZ,GAAG,CAACa,MAAM,CAAC,CAAC,CAACC,KAAK,CAAC,WAAW,CAAC,CAACK,KAAK,CAAC,CAAC,CAAC,CAC9DC,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC,CACjBC,MAAM,CAAC,CAAC,CACRC,QAAQ,CAAC;MACR,cAAc,EAAEnB,eAAe,CAACoB,mBAA6B;MAC7D,aAAa,EAAEpB,eAAe,CAACoB,mBAA6B;MAC5D,gCAAgC,EAC9BpB,eAAe,CAACoB;IACpB,CAAC,CAAgC;IAEnC,IAAI,CAACP,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACQ,WAAW,GAAGxB,GAAG,CAACyB,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,QAAQ,CAAC,CAACN,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC,CAACL,QAAQ,CAAC,CAAC;IAE5E,IAAI,CAACL,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACgB,4BAA4B,GAC/BjB,OAAO,CAACiB,4BAA4B,IAAI,IAAI,CAACtB,yBAAyB;IACxE,MAAMuB,cAAc,GAAG9B,iBAAiB,CAACW,KAAK,CAACoB,IAAI,EAAEC,OAAO,CAAC,GACzDrB,KAAK,CAACoB,IAAI,CAACC,OAAO,CAACC,UAAU,GAC7B,EAAE;IACN,MAAMC,oBAAoB,GAAGJ,cAAc,CAACK,MAAM,CAAEC,CAAC,IACnDnC,UAAU,CAACmC,CAAC,CAACC,IAAI,CACnB,CAAC,CAACC,MAAM;IACR,MAAMC,WAAW,GAAGT,cAAc,CAACU,IAAI,CACrC,CAACC,IAAI,EAAEC,GAAG,KAAKD,IAAI,CAACJ,IAAI,KAAKtC,aAAa,CAAC4C,QAAQ,IAAID,GAAG,KAAK,CACjE,CAAC;IACD,IAAI,CAAClC,gBAAgB,GAAG0B,oBAAoB,GAAG,CAAC,IAAI,CAACK,WAAW,GAAG,CAAC,GAAG,CAAC;EAC1E;EAEAK,qBAAqBA,CAACC,KAA0B,EAAE;IAChD,MAAM;MAAEC;IAAK,CAAC,GAAG,IAAI;IACrB,OAAOD,KAAK,CAACC,IAAI,CAAC,KAAK,IAAI,GAAG,MAAM,GAAG,OAAO;EAChD;EAEAC,oBAAoBA,CAACF,KAA0B,EAAe;IAC5D,MAAM;MAAEC;IAAK,CAAC,GAAG,IAAI;IACrB,OAAO;MAAE,CAACA,IAAI,GAAGD,KAAK,CAACC,IAAI,CAAC,KAAK,IAAI,GAAG,MAAM,GAAG;IAAQ,CAAC;EAC5D;EAEAE,qBAAqBA,CAACC,OAAoB,EAAa;IACrD,MAAM;MAAEH;IAAK,CAAC,GAAG,IAAI;IACrB,MAAMI,YAAY,GAAGD,OAAO,CAACH,IAAI,CAAC;IAClC,MAAMK,KAAK,GACT,IAAI,CAACC,OAAO,CAACF,YAAY,CAAC,IAC1BA,YAAY,CAACZ,MAAM,GAAG,CAAC,IACvBY,YAAY,CAACG,KAAK,CAAEC,CAAC,IAAK;MACxB,OAAOA,CAAC,KAAK,MAAM;IACrB,CAAC,CAAC;IAEJ,OAAO;MAAE,CAACR,IAAI,GAAGK;IAAM,CAAC;EAC1B;EAEAI,4BAA4BA,CAACJ,KAA8B,EAAW;IACpE,OAAOA,KAAK,KAAK,MAAM;EACzB;EAEAK,YAAYA,CAACL,KAAkC,EAAE;IAC/C,OAAO,IAAI,CAACC,OAAO,CAACD,KAAK,CAAC,GAAGA,KAAK,GAAGM,SAAS;EAChD;EAEAC,6BAA6BA,CAACP,KAA8B,EAAU;IACpE,OAAOA,KAAK,KAAK,MAAM,GAAG,IAAI,CAACtB,4BAA4B,GAAG,cAAc;EAC9E;EAEA8B,YAAYA,CAACV,OAAoB,EAAEW,MAA8B,EAAE;IACjE,MAAMC,mCAAmC,GACvC,yDAAyD;IAC3D,MAAM;MACJC,IAAI;MACJjD,OAAO;MACPgB,4BAA4B,GAAGgC;IACjC,CAAC,GAAG,IAAI;IAER,MAAME,SAAS,GAAG,KAAK,CAACJ,YAAY,CAACV,OAAO,EAAEW,MAAM,CAAC;IACrD,IAAI;MAAEI,QAAQ;MAAE1C;IAAM,CAAC,GAAGyC,SAAS;IAEnCC,QAAQ,KAAK;MACXC,MAAM,EAAE;QACNC,IAAI,EAAE5C,KAAK,CAAC4C,IAAI;QAChBC,OAAO,EAAE;MACX;IACF,CAAC;IAED,MAAMjB,YAAY,GAAGD,OAAO,CAAC,IAAI,CAACH,IAAI,CAAC;IACvC,MAAMsB,SAAS,GACblB,YAAY,KAAK,MAAM,IACvBA,YAAY,KAAK,IAAI,IACpBmB,KAAK,CAACC,OAAO,CAACpB,YAAY,CAAC,IAAIA,YAAY,CAACV,IAAI,CAAE+B,CAAC,IAAKA,CAAC,KAAK,MAAM,CAAE;IAEzE,OAAO;MACL,GAAGR,SAAS;MACZD,IAAI,EAAEA,IAAI,GAAG;QAAEI,IAAI,EAAEJ;MAAK,CAAC,GAAGL,SAAS;MACvCO,QAAQ;MACRnD,OAAO;MACPO,KAAK,EAAE,CACL;QACE8C,IAAI,EAAErC,4BAA4B;QAClCsB,KAAK,EAAE,MAAM;QACbqB,OAAO,EAAEJ;MACX,CAAC,CACF;MACD5D,gBAAgB,EAAE,IAAI,CAACA;IACzB,CAAC;EACH;EAEA4C,OAAOA,CAACD,KAAkC,EAA4B;IACpE,IAAI,CAACkB,KAAK,CAACC,OAAO,CAACnB,KAAK,CAAC,EAAE;MACzB,OAAO,KAAK;IACd;;IAEA;IACA,IAAI,CAACA,KAAK,CAACb,MAAM,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,OAAOa,KAAK,CAACE,KAAK,CAACjD,WAAW,CAAC;EACjC;;EAEA;AACF;AACA;EACEqE,oBAAoBA,CAAA,EAA6B;IAC/C,OAAOnE,gBAAgB,CAACmE,oBAAoB,CAAC,CAAC;EAChD;;EAEA;AACF;AACA;EACE,OAAOA,oBAAoBA,CAAA,EAA6B;IACtD,OAAO;MACLC,UAAU,EAAE,CACV;QAAErC,IAAI,EAAE,UAAU;QAAEsC,QAAQ,EAAEtE,eAAe,CAACoB;MAAoB,CAAC,CACpE;MACDmD,sBAAsB,EAAE;IAC1B,CAAC;EACH;EAEA,OAAOC,MAAMA,CAAC1B,KAAkC,EAAoB;IAClE,OAAO/C,WAAW,CAAC+C,KAAK,CAAC,IAAI,OAAOA,KAAK,KAAK,SAAS;EACzD;AACF","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DeclarationField.js","names":["ComponentType","hasFormComponents","isFormType","joi","FormComponent","isFormValue","buildValidationMessages","messageTemplate","DeclarationField","headerStartLevel","constructor","def","props","options","content","checkboxSchema","string","valid","required","formSchema","array","items","strip","label","single","messages","declarationRequired","stateSchema","boolean","cast","declarationConfirmationLabel","formComponents","page","pageDef","components","numOfQuestionsOnPage","filter","q","type","length","hasGuidance","some","comp","idx","Markdown","getFormValueFromState","state","name","getFormDataFromState","getStateFromValidForm","payload","payloadValue","value","isValue","every","v","getContextValueFromFormValue","getFormValue","undefined","getValidationMessagesOverride","translator","t","msg","getDisplayStringFromFormValue","getViewModel","context","tComponent","hint","viewModel","fieldset","legend","text","classes","isChecked","Array","isArray","x","checked","getAllPossibleErrors","baseErrors","template","advancedSettingsErrors","isBool"],"sources":["../../../../../src/server/plugins/engine/components/DeclarationField.ts"],"sourcesContent":["import {\n ComponentType,\n hasFormComponents,\n isFormType,\n type ComponentDef,\n type DeclarationFieldComponent,\n type Item\n} from '@defra/forms-model'\nimport joi, {\n type ArraySchema,\n type BooleanSchema,\n type LanguageMessages,\n type StringSchema\n} from 'joi'\n\nimport {\n FormComponent,\n isFormValue\n} from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { type RenderContext } from '~/src/server/plugins/engine/components/types.js'\nimport { buildValidationMessages } from '~/src/server/plugins/engine/i18n/buildValidationMessages.js'\nimport { type Translator } from '~/src/server/plugins/engine/i18n/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport {\n type ErrorMessageTemplateList,\n type FormPayload,\n type FormState,\n type FormStateValue,\n type FormSubmissionState,\n type FormValue\n} from '~/src/server/plugins/engine/types.js'\n\nexport class DeclarationField extends FormComponent {\n declare options: DeclarationFieldComponent['options']\n\n declare declarationConfirmationLabel: string | undefined\n\n declare formSchema: ArraySchema<StringSchema[]>\n declare stateSchema: BooleanSchema\n declare content: string\n headerStartLevel: number\n\n constructor(\n def: DeclarationFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { options, content } = def\n\n let checkboxSchema = joi.string().valid('true')\n\n if (options.required !== false) {\n checkboxSchema = checkboxSchema.required()\n }\n\n const formSchema = joi\n .array()\n .items(checkboxSchema, joi.string().valid('unchecked').strip())\n .label(this.label)\n .single()\n .messages({\n 'any.required': messageTemplate.declarationRequired as string,\n 'any.unknown': messageTemplate.declarationRequired as string,\n 'array.includesRequiredUnknowns':\n messageTemplate.declarationRequired as string\n }) as ArraySchema<StringSchema[]>\n\n this.formSchema = formSchema\n this.stateSchema = joi.boolean().cast('string').label(this.label).required()\n\n this.options = options\n this.content = content\n // Store only the form-authored label (if provided). If absent, getViewModel\n // resolves the default via t() at render time so the correct language is used.\n this.declarationConfirmationLabel = options.declarationConfirmationLabel\n const formComponents = hasFormComponents(props.page?.pageDef)\n ? props.page.pageDef.components\n : []\n const numOfQuestionsOnPage = formComponents.filter((q) =>\n isFormType(q.type)\n ).length\n const hasGuidance = formComponents.some(\n (comp, idx) => comp.type === ComponentType.Markdown && idx === 0\n )\n this.headerStartLevel = numOfQuestionsOnPage < 2 && !hasGuidance ? 2 : 3\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const { name } = this\n return state[name] === true ? 'true' : 'false'\n }\n\n getFormDataFromState(state: FormSubmissionState): FormPayload {\n const { name } = this\n return { [name]: state[name] === true ? 'true' : 'false' }\n }\n\n getStateFromValidForm(payload: FormPayload): FormState {\n const { name } = this\n const payloadValue = payload[name]\n const value =\n this.isValue(payloadValue) &&\n payloadValue.length > 0 &&\n payloadValue.every((v) => {\n return v === 'true'\n })\n\n return { [name]: value }\n }\n\n getContextValueFromFormValue(value: FormValue | FormPayload): boolean {\n return value === 'true'\n }\n\n getFormValue(value?: FormStateValue | FormState) {\n return this.isValue(value) ? value : undefined\n }\n\n getValidationMessagesOverride(translator: Translator) {\n const { declarationRequired } = buildValidationMessages(translator.t)\n const msg = declarationRequired as unknown as string\n return {\n 'any.required': msg,\n 'any.unknown': msg,\n 'array.includesRequiredUnknowns': msg\n } as unknown as LanguageMessages\n }\n\n getDisplayStringFromFormValue(\n value: FormValue | FormPayload,\n translator: Translator\n ): string {\n const { t } = translator\n return value === 'true'\n ? (this.declarationConfirmationLabel ??\n t('components.declarationField.defaultLabel'))\n : t('components.declarationField.notProvided')\n }\n\n getViewModel(context: RenderContext) {\n const { payload } = context\n const { t, tComponent } = context.translator\n\n const {\n hint,\n declarationConfirmationLabel = t(\n 'components.declarationField.defaultLabel'\n )\n } = this\n const content = tComponent(this as unknown as ComponentDef, 'content')\n\n const viewModel = super.getViewModel(context)\n let { fieldset, label } = viewModel\n\n fieldset ??= {\n legend: {\n text: label.text,\n classes: 'govuk-fieldset__legend--m'\n }\n }\n\n const payloadValue = payload[this.name]\n const isChecked =\n payloadValue === 'true' ||\n payloadValue === true ||\n (Array.isArray(payloadValue) && payloadValue.some((x) => x === 'true'))\n\n return {\n ...viewModel,\n hint: hint ? { text: hint } : undefined,\n fieldset,\n content,\n items: [\n {\n text: declarationConfirmationLabel,\n value: 'true',\n checked: isChecked\n }\n ],\n headerStartLevel: this.headerStartLevel\n }\n }\n\n isValue(value?: FormStateValue | FormState): value is Item['value'][] {\n if (!Array.isArray(value)) {\n return false\n }\n\n // Skip checks when empty\n if (!value.length) {\n return true\n }\n\n return value.every(isFormValue)\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return DeclarationField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: messageTemplate.declarationRequired }\n ],\n advancedSettingsErrors: []\n }\n }\n\n static isBool(value?: FormStateValue | FormState): value is boolean {\n return isFormValue(value) && typeof value === 'boolean'\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,8 @@ import { type EastingNorthingFieldComponent } from '@defra/forms-model';
|
|
|
2
2
|
import { type ObjectSchema } from 'joi';
|
|
3
3
|
import { ComponentCollection } from '../../../../server/plugins/engine/components/ComponentCollection.js';
|
|
4
4
|
import { FormComponent } from '../../../../server/plugins/engine/components/FormComponent.js';
|
|
5
|
-
import { type EastingNorthingState } from '../../../../server/plugins/engine/components/types.js';
|
|
5
|
+
import { type EastingNorthingState, type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
6
|
+
import { type Translator } from '../../../../server/plugins/engine/i18n/types.js';
|
|
6
7
|
import { type ErrorMessageTemplateList, type FormPayload, type FormState, type FormStateValue, type FormSubmissionError, type FormSubmissionState } from '../../../../server/plugins/engine/types.js';
|
|
7
8
|
export declare class EastingNorthingField extends FormComponent {
|
|
8
9
|
options: EastingNorthingFieldComponent['options'];
|
|
@@ -11,16 +12,17 @@ export declare class EastingNorthingField extends FormComponent {
|
|
|
11
12
|
collection: ComponentCollection;
|
|
12
13
|
constructor(def: EastingNorthingFieldComponent, props: ConstructorParameters<typeof FormComponent>[1]);
|
|
13
14
|
getFormValueFromState(state: FormSubmissionState): EastingNorthingState | undefined;
|
|
14
|
-
getDisplayStringFromFormValue(value: EastingNorthingState | undefined): string;
|
|
15
|
-
getDisplayStringFromState(state: FormSubmissionState): string;
|
|
15
|
+
getDisplayStringFromFormValue(value: EastingNorthingState | undefined, _translator: Translator): string;
|
|
16
|
+
getDisplayStringFromState(state: FormSubmissionState, translator: Translator): string;
|
|
16
17
|
getContextValueFromFormValue(value: EastingNorthingState | undefined): string | null;
|
|
17
18
|
getContextValueFromState(state: FormSubmissionState): string | null;
|
|
18
|
-
getViewModel(
|
|
19
|
+
getViewModel(context: RenderContext): {
|
|
19
20
|
fieldset: {
|
|
20
21
|
attributes?: string | Record<string, string>;
|
|
21
22
|
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
22
23
|
};
|
|
23
24
|
items: import("../../../../server/plugins/engine/components/types.js").DateInputItem[];
|
|
25
|
+
mapLayers: string;
|
|
24
26
|
label: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
25
27
|
type?: string;
|
|
26
28
|
id: string;
|
|
@@ -68,6 +70,7 @@ export declare class EastingNorthingField extends FormComponent {
|
|
|
68
70
|
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
69
71
|
};
|
|
70
72
|
items: import("../../../../server/plugins/engine/components/types.js").DateInputItem[];
|
|
73
|
+
mapLayers: string;
|
|
71
74
|
label: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
72
75
|
type?: string;
|
|
73
76
|
id: string;
|
|
@@ -109,7 +112,7 @@ export declare class EastingNorthingField extends FormComponent {
|
|
|
109
112
|
summaryList: import("../../../../server/plugins/engine/types.js").SummaryList;
|
|
110
113
|
};
|
|
111
114
|
};
|
|
112
|
-
getViewErrors(errors?: FormSubmissionError[]): FormSubmissionError[] | undefined;
|
|
115
|
+
getViewErrors(translator: Translator, errors?: FormSubmissionError[]): FormSubmissionError[] | undefined;
|
|
113
116
|
isState(value?: FormStateValue | FormState): value is EastingNorthingState;
|
|
114
117
|
/**
|
|
115
118
|
* For error preview page that shows all possible errors on a component
|
|
@@ -5,6 +5,7 @@ import { FormComponent, isFormState } from "./FormComponent.js";
|
|
|
5
5
|
import { deduplicateErrorsByHref, getLocationFieldViewModel } from "./LocationFieldHelpers.js";
|
|
6
6
|
import { NumberField } from "./NumberField.js";
|
|
7
7
|
import { createLowerFirstExpression } from "./helpers/index.js";
|
|
8
|
+
import { t as tPlugin } from "../i18n/index.js";
|
|
8
9
|
import { messageTemplate } from "../pageControllers/validationOptions.js";
|
|
9
10
|
import { convertToLanguageMessages } from "../../../utils/type-utils.js";
|
|
10
11
|
|
|
@@ -26,24 +27,43 @@ export class EastingNorthingField extends FormComponent {
|
|
|
26
27
|
const eastingMax = schema?.easting?.max ?? DEFAULT_EASTING_MAX;
|
|
27
28
|
const northingMin = schema?.northing?.min ?? DEFAULT_NORTHING_MIN;
|
|
28
29
|
const northingMax = schema?.northing?.max ?? DEFAULT_NORTHING_MAX;
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const fieldLabel = lowerFirst(this.label);
|
|
31
|
+
const eastingDigitsMessage = tPlugin('components.eastingNorthingField.eastingDigits', 'en-GB', {
|
|
32
|
+
fieldLabel
|
|
33
|
+
});
|
|
34
|
+
const northingDigitsMessage = tPlugin('components.eastingNorthingField.northingDigits', 'en-GB', {
|
|
35
|
+
fieldLabel
|
|
36
|
+
});
|
|
33
37
|
const customValidationMessages = convertToLanguageMessages({
|
|
34
|
-
'any.required': eastingRequired,
|
|
35
|
-
'number.base': eastingRequired,
|
|
36
|
-
'number.min':
|
|
37
|
-
|
|
38
|
+
'any.required': tPlugin('components.eastingNorthingField.eastingRequired', 'en-GB'),
|
|
39
|
+
'number.base': tPlugin('components.eastingNorthingField.eastingRequired', 'en-GB'),
|
|
40
|
+
'number.min': tPlugin('components.eastingNorthingField.eastingRange', 'en-GB', {
|
|
41
|
+
fieldLabel,
|
|
42
|
+
min: eastingMin,
|
|
43
|
+
max: eastingMax
|
|
44
|
+
}),
|
|
45
|
+
'number.max': tPlugin('components.eastingNorthingField.eastingRange', 'en-GB', {
|
|
46
|
+
fieldLabel,
|
|
47
|
+
min: eastingMin,
|
|
48
|
+
max: eastingMax
|
|
49
|
+
}),
|
|
38
50
|
'number.precision': eastingDigitsMessage,
|
|
39
51
|
'number.integer': eastingDigitsMessage,
|
|
40
52
|
'number.unsafe': eastingDigitsMessage
|
|
41
53
|
});
|
|
42
54
|
const northingValidationMessages = convertToLanguageMessages({
|
|
43
|
-
'any.required': northingRequired,
|
|
44
|
-
'number.base': northingRequired,
|
|
45
|
-
'number.min':
|
|
46
|
-
|
|
55
|
+
'any.required': tPlugin('components.eastingNorthingField.northingRequired', 'en-GB'),
|
|
56
|
+
'number.base': tPlugin('components.eastingNorthingField.northingRequired', 'en-GB'),
|
|
57
|
+
'number.min': tPlugin('components.eastingNorthingField.northingRange', 'en-GB', {
|
|
58
|
+
fieldLabel,
|
|
59
|
+
min: northingMin,
|
|
60
|
+
max: northingMax
|
|
61
|
+
}),
|
|
62
|
+
'number.max': tPlugin('components.eastingNorthingField.northingRange', 'en-GB', {
|
|
63
|
+
fieldLabel,
|
|
64
|
+
min: northingMin,
|
|
65
|
+
max: northingMax
|
|
66
|
+
}),
|
|
47
67
|
'number.precision': northingDigitsMessage,
|
|
48
68
|
'number.integer': northingDigitsMessage,
|
|
49
69
|
'number.unsafe': northingDigitsMessage
|
|
@@ -51,7 +71,7 @@ export class EastingNorthingField extends FormComponent {
|
|
|
51
71
|
this.collection = new ComponentCollection([{
|
|
52
72
|
type: ComponentType.NumberField,
|
|
53
73
|
name: `${name}__easting`,
|
|
54
|
-
title: '
|
|
74
|
+
title: 'components.eastingNorthingField.easting',
|
|
55
75
|
schema: {
|
|
56
76
|
min: eastingMin,
|
|
57
77
|
max: eastingMax,
|
|
@@ -66,7 +86,7 @@ export class EastingNorthingField extends FormComponent {
|
|
|
66
86
|
}, {
|
|
67
87
|
type: ComponentType.NumberField,
|
|
68
88
|
name: `${name}__northing`,
|
|
69
|
-
title: '
|
|
89
|
+
title: 'components.eastingNorthingField.northing',
|
|
70
90
|
schema: {
|
|
71
91
|
min: northingMin,
|
|
72
92
|
max: northingMax,
|
|
@@ -92,7 +112,7 @@ export class EastingNorthingField extends FormComponent {
|
|
|
92
112
|
const value = super.getFormValueFromState(state);
|
|
93
113
|
return EastingNorthingField.isEastingNorthing(value) ? value : undefined;
|
|
94
114
|
}
|
|
95
|
-
getDisplayStringFromFormValue(value) {
|
|
115
|
+
getDisplayStringFromFormValue(value, _translator) {
|
|
96
116
|
if (!value) {
|
|
97
117
|
return '';
|
|
98
118
|
}
|
|
@@ -100,9 +120,9 @@ export class EastingNorthingField extends FormComponent {
|
|
|
100
120
|
// CYA page format: <<eastingvalue, northingvalue>>
|
|
101
121
|
return `${value.easting}, ${value.northing}`;
|
|
102
122
|
}
|
|
103
|
-
getDisplayStringFromState(state) {
|
|
123
|
+
getDisplayStringFromState(state, translator) {
|
|
104
124
|
const value = this.getFormValueFromState(state);
|
|
105
|
-
return this.getDisplayStringFromFormValue(value);
|
|
125
|
+
return this.getDisplayStringFromFormValue(value, translator);
|
|
106
126
|
}
|
|
107
127
|
getContextValueFromFormValue(value) {
|
|
108
128
|
if (!value) {
|
|
@@ -114,12 +134,12 @@ export class EastingNorthingField extends FormComponent {
|
|
|
114
134
|
const value = this.getFormValueFromState(state);
|
|
115
135
|
return this.getContextValueFromFormValue(value);
|
|
116
136
|
}
|
|
117
|
-
getViewModel(
|
|
118
|
-
const viewModel = super.getViewModel(
|
|
119
|
-
return getLocationFieldViewModel(this, viewModel,
|
|
137
|
+
getViewModel(context) {
|
|
138
|
+
const viewModel = super.getViewModel(context);
|
|
139
|
+
return getLocationFieldViewModel(this, viewModel, context);
|
|
120
140
|
}
|
|
121
|
-
getViewErrors(errors) {
|
|
122
|
-
const allErrors = this.getErrors(errors);
|
|
141
|
+
getViewErrors(translator, errors) {
|
|
142
|
+
const allErrors = this.getErrors(translator, errors);
|
|
123
143
|
return deduplicateErrorsByHref(allErrors);
|
|
124
144
|
}
|
|
125
145
|
isState(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EastingNorthingField.js","names":["ComponentType","lowerFirst","ComponentCollection","FormComponent","isFormState","deduplicateErrorsByHref","getLocationFieldViewModel","NumberField","createLowerFirstExpression","messageTemplate","convertToLanguageMessages","DEFAULT_EASTING_MIN","DEFAULT_EASTING_MAX","DEFAULT_NORTHING_MIN","DEFAULT_NORTHING_MAX","EastingNorthingField","constructor","def","props","name","options","schema","isRequired","required","eastingMin","easting","min","eastingMax","max","northingMin","northing","northingMax","eastingRequired","northingRequired","eastingDigitsMessage","label","northingDigitsMessage","customValidationMessages","northingValidationMessages","collection","type","title","precision","optionalText","classes","parent","peers","formSchema","stateSchema","getFormValueFromState","state","value","isEastingNorthing","undefined","getDisplayStringFromFormValue","getDisplayStringFromState","getContextValueFromFormValue","getContextValueFromState","getViewModel","payload","errors","viewModel","getViewErrors","allErrors","getErrors","isState","getAllPossibleErrors","baseErrors","template","advancedSettingsErrors","isNumber"],"sources":["../../../../../src/server/plugins/engine/components/EastingNorthingField.ts"],"sourcesContent":["import {\n ComponentType,\n type EastingNorthingFieldComponent\n} from '@defra/forms-model'\nimport { type LanguageMessages, type ObjectSchema } from 'joi'\nimport lowerFirst from 'lodash/lowerFirst.js'\n\nimport { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'\nimport {\n FormComponent,\n isFormState\n} from '~/src/server/plugins/engine/components/FormComponent.js'\nimport {\n deduplicateErrorsByHref,\n getLocationFieldViewModel\n} from '~/src/server/plugins/engine/components/LocationFieldHelpers.js'\nimport { NumberField } from '~/src/server/plugins/engine/components/NumberField.js'\nimport { createLowerFirstExpression } from '~/src/server/plugins/engine/components/helpers/index.js'\nimport { type EastingNorthingState } from '~/src/server/plugins/engine/components/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport {\n type ErrorMessageTemplateList,\n type FormPayload,\n type FormState,\n type FormStateValue,\n type FormSubmissionError,\n type FormSubmissionState\n} from '~/src/server/plugins/engine/types.js'\nimport { convertToLanguageMessages } from '~/src/server/utils/type-utils.js'\n\n// British National Grid coordinate limits\nconst DEFAULT_EASTING_MIN = 0\nconst DEFAULT_EASTING_MAX = 700000\nconst DEFAULT_NORTHING_MIN = 0\nconst DEFAULT_NORTHING_MAX = 1300000\n\nexport class EastingNorthingField extends FormComponent {\n declare options: EastingNorthingFieldComponent['options']\n declare formSchema: ObjectSchema<FormPayload>\n declare stateSchema: ObjectSchema<FormState>\n declare collection: ComponentCollection\n\n constructor(\n def: EastingNorthingFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { name, options, schema } = def\n\n const isRequired = options.required !== false\n\n const eastingMin = schema?.easting?.min ?? DEFAULT_EASTING_MIN\n const eastingMax = schema?.easting?.max ?? DEFAULT_EASTING_MAX\n const northingMin = schema?.northing?.min ?? DEFAULT_NORTHING_MIN\n const northingMax = schema?.northing?.max ?? DEFAULT_NORTHING_MAX\n\n const eastingRequired = 'Enter easting'\n const northingRequired = 'Enter northing'\n\n const eastingDigitsMessage = `{{#label}} for ${lowerFirst(this.label)} must be between 1 and 6 digits`\n const northingDigitsMessage = `{{#label}} for ${lowerFirst(this.label)} must be between 1 and 7 digits`\n\n const customValidationMessages: LanguageMessages =\n convertToLanguageMessages({\n 'any.required': eastingRequired,\n 'number.base': eastingRequired,\n 'number.min': `{{#label}} for ${lowerFirst(this.label)} must be between {{#limit}} and ${eastingMax}`,\n 'number.max': `{{#label}} for ${lowerFirst(this.label)} must be between ${eastingMin} and {{#limit}}`,\n 'number.precision': eastingDigitsMessage,\n 'number.integer': eastingDigitsMessage,\n 'number.unsafe': eastingDigitsMessage\n })\n\n const northingValidationMessages: LanguageMessages =\n convertToLanguageMessages({\n 'any.required': northingRequired,\n 'number.base': northingRequired,\n 'number.min': `{{#label}} for ${lowerFirst(this.label)} must be between {{#limit}} and ${northingMax}`,\n 'number.max': `{{#label}} for ${lowerFirst(this.label)} must be between ${northingMin} and {{#limit}}`,\n 'number.precision': northingDigitsMessage,\n 'number.integer': northingDigitsMessage,\n 'number.unsafe': northingDigitsMessage\n })\n\n this.collection = new ComponentCollection(\n [\n {\n type: ComponentType.NumberField,\n name: `${name}__easting`,\n title: 'Easting',\n schema: {\n min: eastingMin,\n max: eastingMax,\n precision: 0\n },\n options: {\n required: isRequired,\n optionalText: true,\n classes: 'govuk-input--width-10',\n customValidationMessages\n }\n },\n {\n type: ComponentType.NumberField,\n name: `${name}__northing`,\n title: 'Northing',\n schema: {\n min: northingMin,\n max: northingMax,\n precision: 0\n },\n options: {\n required: isRequired,\n optionalText: true,\n classes: 'govuk-input--width-10',\n customValidationMessages: northingValidationMessages\n }\n }\n ],\n { ...props, parent: this },\n {\n peers: [`${name}__easting`, `${name}__northing`]\n }\n )\n\n this.options = options\n this.formSchema = this.collection.formSchema\n this.stateSchema = this.collection.stateSchema\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const value = super.getFormValueFromState(state)\n return EastingNorthingField.isEastingNorthing(value) ? value : undefined\n }\n\n getDisplayStringFromFormValue(\n value: EastingNorthingState | undefined\n ): string {\n if (!value) {\n return ''\n }\n\n // CYA page format: <<eastingvalue, northingvalue>>\n return `${value.easting}, ${value.northing}`\n }\n\n getDisplayStringFromState(state: FormSubmissionState) {\n const value = this.getFormValueFromState(state)\n\n return this.getDisplayStringFromFormValue(value)\n }\n\n getContextValueFromFormValue(\n value: EastingNorthingState | undefined\n ): string | null {\n if (!value) {\n return null\n }\n\n return `Easting: ${value.easting}\\nNorthing: ${value.northing}`\n }\n\n getContextValueFromState(state: FormSubmissionState) {\n const value = this.getFormValueFromState(state)\n\n return this.getContextValueFromFormValue(value)\n }\n\n getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {\n const viewModel = super.getViewModel(payload, errors)\n return getLocationFieldViewModel(this, viewModel, payload, errors)\n }\n\n getViewErrors(\n errors?: FormSubmissionError[]\n ): FormSubmissionError[] | undefined {\n const allErrors = this.getErrors(errors)\n return deduplicateErrorsByHref(allErrors)\n }\n\n isState(value?: FormStateValue | FormState) {\n return EastingNorthingField.isEastingNorthing(value)\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return EastingNorthingField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: messageTemplate.required },\n {\n type: 'eastingFormat',\n template: createLowerFirstExpression(\n 'Easting for {{lowerFirst(#title)}} must be between 1 and 6 digits'\n )\n },\n {\n type: 'northingFormat',\n template: createLowerFirstExpression(\n 'Northing for {{lowerFirst(#title)}} must be between 1 and 7 digits'\n )\n }\n ],\n advancedSettingsErrors: [\n {\n type: 'eastingMin',\n template: createLowerFirstExpression(\n `Easting for {{lowerFirst(#title)}} must be between ${DEFAULT_EASTING_MIN} and ${DEFAULT_EASTING_MAX}`\n )\n },\n {\n type: 'eastingMax',\n template: createLowerFirstExpression(\n `Easting for {{lowerFirst(#title)}} must be between ${DEFAULT_EASTING_MIN} and ${DEFAULT_EASTING_MAX}`\n )\n },\n {\n type: 'northingMin',\n template: createLowerFirstExpression(\n `Northing for {{lowerFirst(#title)}} must be between ${DEFAULT_NORTHING_MIN} and ${DEFAULT_NORTHING_MAX}`\n )\n },\n {\n type: 'northingMax',\n template: createLowerFirstExpression(\n `Northing for {{lowerFirst(#title)}} must be between ${DEFAULT_NORTHING_MIN} and ${DEFAULT_NORTHING_MAX}`\n )\n }\n ]\n }\n }\n\n static isEastingNorthing(\n value?: FormStateValue | FormState\n ): value is EastingNorthingState {\n return (\n isFormState(value) &&\n NumberField.isNumber(value.easting) &&\n NumberField.isNumber(value.northing)\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"EastingNorthingField.js","names":["ComponentType","lowerFirst","ComponentCollection","FormComponent","isFormState","deduplicateErrorsByHref","getLocationFieldViewModel","NumberField","createLowerFirstExpression","t","tPlugin","messageTemplate","convertToLanguageMessages","DEFAULT_EASTING_MIN","DEFAULT_EASTING_MAX","DEFAULT_NORTHING_MIN","DEFAULT_NORTHING_MAX","EastingNorthingField","constructor","def","props","name","options","schema","isRequired","required","eastingMin","easting","min","eastingMax","max","northingMin","northing","northingMax","fieldLabel","label","eastingDigitsMessage","northingDigitsMessage","customValidationMessages","northingValidationMessages","collection","type","title","precision","optionalText","classes","parent","peers","formSchema","stateSchema","getFormValueFromState","state","value","isEastingNorthing","undefined","getDisplayStringFromFormValue","_translator","getDisplayStringFromState","translator","getContextValueFromFormValue","getContextValueFromState","getViewModel","context","viewModel","getViewErrors","errors","allErrors","getErrors","isState","getAllPossibleErrors","baseErrors","template","advancedSettingsErrors","isNumber"],"sources":["../../../../../src/server/plugins/engine/components/EastingNorthingField.ts"],"sourcesContent":["import {\n ComponentType,\n type EastingNorthingFieldComponent\n} from '@defra/forms-model'\nimport { type LanguageMessages, type ObjectSchema } from 'joi'\nimport lowerFirst from 'lodash/lowerFirst.js'\n\nimport { ComponentCollection } from '~/src/server/plugins/engine/components/ComponentCollection.js'\nimport {\n FormComponent,\n isFormState\n} from '~/src/server/plugins/engine/components/FormComponent.js'\nimport {\n deduplicateErrorsByHref,\n getLocationFieldViewModel\n} from '~/src/server/plugins/engine/components/LocationFieldHelpers.js'\nimport { NumberField } from '~/src/server/plugins/engine/components/NumberField.js'\nimport { createLowerFirstExpression } from '~/src/server/plugins/engine/components/helpers/index.js'\nimport {\n type EastingNorthingState,\n type RenderContext\n} from '~/src/server/plugins/engine/components/types.js'\nimport { t as tPlugin } from '~/src/server/plugins/engine/i18n/index.js'\nimport { type Translator } from '~/src/server/plugins/engine/i18n/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport {\n type ErrorMessageTemplateList,\n type FormPayload,\n type FormState,\n type FormStateValue,\n type FormSubmissionError,\n type FormSubmissionState\n} from '~/src/server/plugins/engine/types.js'\nimport { convertToLanguageMessages } from '~/src/server/utils/type-utils.js'\n\n// British National Grid coordinate limits\nconst DEFAULT_EASTING_MIN = 0\nconst DEFAULT_EASTING_MAX = 700000\nconst DEFAULT_NORTHING_MIN = 0\nconst DEFAULT_NORTHING_MAX = 1300000\n\nexport class EastingNorthingField extends FormComponent {\n declare options: EastingNorthingFieldComponent['options']\n declare formSchema: ObjectSchema<FormPayload>\n declare stateSchema: ObjectSchema<FormState>\n declare collection: ComponentCollection\n\n constructor(\n def: EastingNorthingFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { name, options, schema } = def\n\n const isRequired = options.required !== false\n\n const eastingMin = schema?.easting?.min ?? DEFAULT_EASTING_MIN\n const eastingMax = schema?.easting?.max ?? DEFAULT_EASTING_MAX\n const northingMin = schema?.northing?.min ?? DEFAULT_NORTHING_MIN\n const northingMax = schema?.northing?.max ?? DEFAULT_NORTHING_MAX\n\n const fieldLabel = lowerFirst(this.label)\n\n const eastingDigitsMessage = tPlugin(\n 'components.eastingNorthingField.eastingDigits',\n 'en-GB',\n { fieldLabel }\n )\n const northingDigitsMessage = tPlugin(\n 'components.eastingNorthingField.northingDigits',\n 'en-GB',\n { fieldLabel }\n )\n\n const customValidationMessages: LanguageMessages =\n convertToLanguageMessages({\n 'any.required': tPlugin(\n 'components.eastingNorthingField.eastingRequired',\n 'en-GB'\n ),\n 'number.base': tPlugin(\n 'components.eastingNorthingField.eastingRequired',\n 'en-GB'\n ),\n 'number.min': tPlugin(\n 'components.eastingNorthingField.eastingRange',\n 'en-GB',\n {\n fieldLabel,\n min: eastingMin,\n max: eastingMax\n }\n ),\n 'number.max': tPlugin(\n 'components.eastingNorthingField.eastingRange',\n 'en-GB',\n {\n fieldLabel,\n min: eastingMin,\n max: eastingMax\n }\n ),\n 'number.precision': eastingDigitsMessage,\n 'number.integer': eastingDigitsMessage,\n 'number.unsafe': eastingDigitsMessage\n })\n\n const northingValidationMessages: LanguageMessages =\n convertToLanguageMessages({\n 'any.required': tPlugin(\n 'components.eastingNorthingField.northingRequired',\n 'en-GB'\n ),\n 'number.base': tPlugin(\n 'components.eastingNorthingField.northingRequired',\n 'en-GB'\n ),\n 'number.min': tPlugin(\n 'components.eastingNorthingField.northingRange',\n 'en-GB',\n {\n fieldLabel,\n min: northingMin,\n max: northingMax\n }\n ),\n 'number.max': tPlugin(\n 'components.eastingNorthingField.northingRange',\n 'en-GB',\n {\n fieldLabel,\n min: northingMin,\n max: northingMax\n }\n ),\n 'number.precision': northingDigitsMessage,\n 'number.integer': northingDigitsMessage,\n 'number.unsafe': northingDigitsMessage\n })\n\n this.collection = new ComponentCollection(\n [\n {\n type: ComponentType.NumberField,\n name: `${name}__easting`,\n title: 'components.eastingNorthingField.easting',\n schema: {\n min: eastingMin,\n max: eastingMax,\n precision: 0\n },\n options: {\n required: isRequired,\n optionalText: true,\n classes: 'govuk-input--width-10',\n customValidationMessages\n }\n },\n {\n type: ComponentType.NumberField,\n name: `${name}__northing`,\n title: 'components.eastingNorthingField.northing',\n schema: {\n min: northingMin,\n max: northingMax,\n precision: 0\n },\n options: {\n required: isRequired,\n optionalText: true,\n classes: 'govuk-input--width-10',\n customValidationMessages: northingValidationMessages\n }\n }\n ],\n { ...props, parent: this },\n {\n peers: [`${name}__easting`, `${name}__northing`]\n }\n )\n\n this.options = options\n this.formSchema = this.collection.formSchema\n this.stateSchema = this.collection.stateSchema\n }\n\n getFormValueFromState(state: FormSubmissionState) {\n const value = super.getFormValueFromState(state)\n return EastingNorthingField.isEastingNorthing(value) ? value : undefined\n }\n\n getDisplayStringFromFormValue(\n value: EastingNorthingState | undefined,\n _translator: Translator\n ): string {\n if (!value) {\n return ''\n }\n\n // CYA page format: <<eastingvalue, northingvalue>>\n return `${value.easting}, ${value.northing}`\n }\n\n getDisplayStringFromState(\n state: FormSubmissionState,\n translator: Translator\n ) {\n const value = this.getFormValueFromState(state)\n\n return this.getDisplayStringFromFormValue(value, translator)\n }\n\n getContextValueFromFormValue(\n value: EastingNorthingState | undefined\n ): string | null {\n if (!value) {\n return null\n }\n\n return `Easting: ${value.easting}\\nNorthing: ${value.northing}`\n }\n\n getContextValueFromState(state: FormSubmissionState) {\n const value = this.getFormValueFromState(state)\n\n return this.getContextValueFromFormValue(value)\n }\n\n getViewModel(context: RenderContext) {\n const viewModel = super.getViewModel(context)\n return getLocationFieldViewModel(this, viewModel, context)\n }\n\n getViewErrors(\n translator: Translator,\n errors?: FormSubmissionError[]\n ): FormSubmissionError[] | undefined {\n const allErrors = this.getErrors(translator, errors)\n return deduplicateErrorsByHref(allErrors)\n }\n\n isState(value?: FormStateValue | FormState) {\n return EastingNorthingField.isEastingNorthing(value)\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return EastingNorthingField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: messageTemplate.required },\n {\n type: 'eastingFormat',\n template: createLowerFirstExpression(\n 'Easting for {{lowerFirst(#title)}} must be between 1 and 6 digits'\n )\n },\n {\n type: 'northingFormat',\n template: createLowerFirstExpression(\n 'Northing for {{lowerFirst(#title)}} must be between 1 and 7 digits'\n )\n }\n ],\n advancedSettingsErrors: [\n {\n type: 'eastingMin',\n template: createLowerFirstExpression(\n `Easting for {{lowerFirst(#title)}} must be between ${DEFAULT_EASTING_MIN} and ${DEFAULT_EASTING_MAX}`\n )\n },\n {\n type: 'eastingMax',\n template: createLowerFirstExpression(\n `Easting for {{lowerFirst(#title)}} must be between ${DEFAULT_EASTING_MIN} and ${DEFAULT_EASTING_MAX}`\n )\n },\n {\n type: 'northingMin',\n template: createLowerFirstExpression(\n `Northing for {{lowerFirst(#title)}} must be between ${DEFAULT_NORTHING_MIN} and ${DEFAULT_NORTHING_MAX}`\n )\n },\n {\n type: 'northingMax',\n template: createLowerFirstExpression(\n `Northing for {{lowerFirst(#title)}} must be between ${DEFAULT_NORTHING_MIN} and ${DEFAULT_NORTHING_MAX}`\n )\n }\n ]\n }\n }\n\n static isEastingNorthing(\n value?: FormStateValue | FormState\n ): value is EastingNorthingState {\n return (\n isFormState(value) &&\n NumberField.isNumber(value.easting) &&\n NumberField.isNumber(value.northing)\n )\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type EmailAddressFieldComponent } from '@defra/forms-model';
|
|
2
2
|
import { FormComponent } from '../../../../server/plugins/engine/components/FormComponent.js';
|
|
3
|
-
import { type
|
|
3
|
+
import { type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
4
|
+
import { type ErrorMessageTemplateList } from '../../../../server/plugins/engine/types.js';
|
|
4
5
|
export declare class EmailAddressField extends FormComponent {
|
|
5
6
|
options: EmailAddressFieldComponent['options'];
|
|
6
7
|
constructor(def: EmailAddressFieldComponent, props: ConstructorParameters<typeof FormComponent>[1]);
|
|
7
|
-
getViewModel(
|
|
8
|
+
getViewModel(context: RenderContext): {
|
|
8
9
|
type: string;
|
|
9
10
|
label: {
|
|
10
11
|
text: string;
|
|
@@ -16,11 +17,11 @@ export declare class EmailAddressField extends FormComponent {
|
|
|
16
17
|
id?: string;
|
|
17
18
|
text: string;
|
|
18
19
|
};
|
|
19
|
-
prefix?: import("
|
|
20
|
-
suffix?: import("
|
|
20
|
+
prefix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
21
|
+
suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
21
22
|
classes?: string;
|
|
22
23
|
condition?: string;
|
|
23
|
-
errors?: FormSubmissionError[];
|
|
24
|
+
errors?: import("../../../../server/plugins/engine/types.js").FormSubmissionError[];
|
|
24
25
|
errorMessage?: {
|
|
25
26
|
text: string;
|
|
26
27
|
};
|
|
@@ -30,28 +31,24 @@ export declare class EmailAddressField extends FormComponent {
|
|
|
30
31
|
autocomplete?: string;
|
|
31
32
|
maxlength?: number;
|
|
32
33
|
multiple?: string;
|
|
33
|
-
accept
|
|
34
|
-
/**
|
|
35
|
-
* For error preview page that shows all possible errors on a component
|
|
36
|
-
*/
|
|
37
|
-
?: string;
|
|
34
|
+
accept?: string;
|
|
38
35
|
inputmode?: string;
|
|
39
36
|
};
|
|
40
|
-
content?: import("
|
|
37
|
+
content?: import("../../../../server/plugins/engine/components/types.js").Content | import("../../../../server/plugins/engine/components/types.js").Content[] | string;
|
|
41
38
|
maxlength?: number;
|
|
42
39
|
maxwords?: number;
|
|
43
40
|
rows?: number;
|
|
44
|
-
items?: import("
|
|
41
|
+
items?: import("../../../../server/plugins/engine/components/types.js").ListItem[] | import("../../../../server/plugins/engine/components/types.js").DateInputItem[];
|
|
45
42
|
fieldset?: {
|
|
46
43
|
attributes?: string | Record<string, string>;
|
|
47
|
-
legend?: import("
|
|
44
|
+
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
48
45
|
};
|
|
49
46
|
formGroup?: {
|
|
50
47
|
classes?: string;
|
|
51
48
|
attributes?: string | Record<string, string>;
|
|
52
49
|
};
|
|
53
50
|
showFieldsetError?: boolean;
|
|
54
|
-
components?: import("
|
|
51
|
+
components?: import("../../../../server/plugins/engine/components/types.js").ComponentViewModel[];
|
|
55
52
|
upload?: {
|
|
56
53
|
count: number;
|
|
57
54
|
summaryList: import("../../../../server/plugins/engine/types.js").SummaryList;
|
|
@@ -26,8 +26,8 @@ export class EmailAddressField extends FormComponent {
|
|
|
26
26
|
this.stateSchema = formSchema.default(null).allow(null);
|
|
27
27
|
this.options = options;
|
|
28
28
|
}
|
|
29
|
-
getViewModel(
|
|
30
|
-
const viewModel = super.getViewModel(
|
|
29
|
+
getViewModel(context) {
|
|
30
|
+
const viewModel = super.getViewModel(context);
|
|
31
31
|
const {
|
|
32
32
|
attributes
|
|
33
33
|
} = viewModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailAddressField.js","names":["preventUnicodeInEmail","joi","FormComponent","messageTemplate","EmailAddressField","constructor","def","props","options","formSchema","string","trim","email","custom","value","helpers","label","required","allow","customValidationMessage","message","messages","customValidationMessages","default","stateSchema","getViewModel","
|
|
1
|
+
{"version":3,"file":"EmailAddressField.js","names":["preventUnicodeInEmail","joi","FormComponent","messageTemplate","EmailAddressField","constructor","def","props","options","formSchema","string","trim","email","custom","value","helpers","label","required","allow","customValidationMessage","message","messages","customValidationMessages","default","stateSchema","getViewModel","context","viewModel","attributes","autocomplete","type","getAllPossibleErrors","baseErrors","template","format","unicode","advancedSettingsErrors"],"sources":["../../../../../src/server/plugins/engine/components/EmailAddressField.ts"],"sourcesContent":["import {\n preventUnicodeInEmail,\n type EmailAddressFieldComponent\n} from '@defra/forms-model'\nimport joi, { type CustomHelpers } from 'joi'\n\nimport { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js'\nimport { type RenderContext } from '~/src/server/plugins/engine/components/types.js'\nimport { messageTemplate } from '~/src/server/plugins/engine/pageControllers/validationOptions.js'\nimport { type ErrorMessageTemplateList } from '~/src/server/plugins/engine/types.js'\n\nexport class EmailAddressField extends FormComponent {\n declare options: EmailAddressFieldComponent['options']\n\n constructor(\n def: EmailAddressFieldComponent,\n props: ConstructorParameters<typeof FormComponent>[1]\n ) {\n super(def, props)\n\n const { options } = def\n\n let formSchema = joi\n .string()\n .trim()\n .email()\n .custom((value, helpers: CustomHelpers<string>) =>\n preventUnicodeInEmail(value, helpers)\n )\n .label(this.label)\n .required()\n\n if (options.required === false) {\n formSchema = formSchema.allow('')\n }\n\n if (options.customValidationMessage) {\n const message = options.customValidationMessage\n\n formSchema = formSchema.messages({\n 'any.required': message,\n 'string.empty': message,\n 'string.email': message\n })\n } else if (options.customValidationMessages) {\n formSchema = formSchema.messages(options.customValidationMessages)\n }\n\n this.formSchema = formSchema.default('')\n this.stateSchema = formSchema.default(null).allow(null)\n this.options = options\n }\n\n getViewModel(context: RenderContext) {\n const viewModel = super.getViewModel(context)\n const { attributes } = viewModel\n\n attributes.autocomplete = 'email'\n\n return {\n ...viewModel,\n type: 'email'\n }\n }\n\n /**\n * For error preview page that shows all possible errors on a component\n */\n getAllPossibleErrors(): ErrorMessageTemplateList {\n return EmailAddressField.getAllPossibleErrors()\n }\n\n /**\n * Static version of getAllPossibleErrors that doesn't require a component instance.\n */\n static getAllPossibleErrors(): ErrorMessageTemplateList {\n return {\n baseErrors: [\n { type: 'required', template: messageTemplate.required },\n { type: 'format', template: messageTemplate.format },\n { type: 'unicode', template: messageTemplate.unicode }\n ],\n advancedSettingsErrors: []\n }\n }\n}\n"],"mappings":"AAAA,SACEA,qBAAqB,QAEhB,oBAAoB;AAC3B,OAAOC,GAAG,MAA8B,KAAK;AAE7C,SAASC,aAAa;AAEtB,SAASC,eAAe;AAGxB,OAAO,MAAMC,iBAAiB,SAASF,aAAa,CAAC;EAGnDG,WAAWA,CACTC,GAA+B,EAC/BC,KAAqD,EACrD;IACA,KAAK,CAACD,GAAG,EAAEC,KAAK,CAAC;IAEjB,MAAM;MAAEC;IAAQ,CAAC,GAAGF,GAAG;IAEvB,IAAIG,UAAU,GAAGR,GAAG,CACjBS,MAAM,CAAC,CAAC,CACRC,IAAI,CAAC,CAAC,CACNC,KAAK,CAAC,CAAC,CACPC,MAAM,CAAC,CAACC,KAAK,EAAEC,OAA8B,KAC5Cf,qBAAqB,CAACc,KAAK,EAAEC,OAAO,CACtC,CAAC,CACAC,KAAK,CAAC,IAAI,CAACA,KAAK,CAAC,CACjBC,QAAQ,CAAC,CAAC;IAEb,IAAIT,OAAO,CAACS,QAAQ,KAAK,KAAK,EAAE;MAC9BR,UAAU,GAAGA,UAAU,CAACS,KAAK,CAAC,EAAE,CAAC;IACnC;IAEA,IAAIV,OAAO,CAACW,uBAAuB,EAAE;MACnC,MAAMC,OAAO,GAAGZ,OAAO,CAACW,uBAAuB;MAE/CV,UAAU,GAAGA,UAAU,CAACY,QAAQ,CAAC;QAC/B,cAAc,EAAED,OAAO;QACvB,cAAc,EAAEA,OAAO;QACvB,cAAc,EAAEA;MAClB,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIZ,OAAO,CAACc,wBAAwB,EAAE;MAC3Cb,UAAU,GAAGA,UAAU,CAACY,QAAQ,CAACb,OAAO,CAACc,wBAAwB,CAAC;IACpE;IAEA,IAAI,CAACb,UAAU,GAAGA,UAAU,CAACc,OAAO,CAAC,EAAE,CAAC;IACxC,IAAI,CAACC,WAAW,GAAGf,UAAU,CAACc,OAAO,CAAC,IAAI,CAAC,CAACL,KAAK,CAAC,IAAI,CAAC;IACvD,IAAI,CAACV,OAAO,GAAGA,OAAO;EACxB;EAEAiB,YAAYA,CAACC,OAAsB,EAAE;IACnC,MAAMC,SAAS,GAAG,KAAK,CAACF,YAAY,CAACC,OAAO,CAAC;IAC7C,MAAM;MAAEE;IAAW,CAAC,GAAGD,SAAS;IAEhCC,UAAU,CAACC,YAAY,GAAG,OAAO;IAEjC,OAAO;MACL,GAAGF,SAAS;MACZG,IAAI,EAAE;IACR,CAAC;EACH;;EAEA;AACF;AACA;EACEC,oBAAoBA,CAAA,EAA6B;IAC/C,OAAO3B,iBAAiB,CAAC2B,oBAAoB,CAAC,CAAC;EACjD;;EAEA;AACF;AACA;EACE,OAAOA,oBAAoBA,CAAA,EAA6B;IACtD,OAAO;MACLC,UAAU,EAAE,CACV;QAAEF,IAAI,EAAE,UAAU;QAAEG,QAAQ,EAAE9B,eAAe,CAACc;MAAS,CAAC,EACxD;QAAEa,IAAI,EAAE,QAAQ;QAAEG,QAAQ,EAAE9B,eAAe,CAAC+B;MAAO,CAAC,EACpD;QAAEJ,IAAI,EAAE,SAAS;QAAEG,QAAQ,EAAE9B,eAAe,CAACgC;MAAQ,CAAC,CACvD;MACDC,sBAAsB,EAAE;IAC1B,CAAC;EACH;AACF","ignoreList":[]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type FileUploadFieldComponent, type FormMetadata } from '@defra/forms-model';
|
|
2
2
|
import joi, { type ArraySchema } from 'joi';
|
|
3
3
|
import { FormComponent } from '../../../../server/plugins/engine/components/FormComponent.js';
|
|
4
|
-
import { type
|
|
5
|
-
import { type
|
|
4
|
+
import { type RenderContext } from '../../../../server/plugins/engine/components/types.js';
|
|
5
|
+
import { type Translator } from '../../../../server/plugins/engine/i18n/types.js';
|
|
6
|
+
import { type ErrorMessageTemplateList, type FileState, type FileUpload, type FileUploadMetadata, type FormContext, type FormState, type FormStateValue, type FormSubmissionState, type SummaryList, type UploadState, type UploadStatusFileResponse, type UploadStatusResponse } from '../../../../server/plugins/engine/types.js';
|
|
7
|
+
import { type FormRequestPayload } from '../../../../server/routes/types.js';
|
|
6
8
|
export declare const uploadIdSchema: joi.StringSchema<string>;
|
|
7
9
|
export declare const fileSchema: joi.ObjectSchema<FileUpload>;
|
|
8
10
|
export declare const tempFileSchema: joi.ObjectSchema<FileUpload>;
|
|
@@ -21,11 +23,11 @@ export declare class FileUploadField extends FormComponent {
|
|
|
21
23
|
constructor(def: FileUploadFieldComponent, props: ConstructorParameters<typeof FormComponent>[1]);
|
|
22
24
|
getFormValueFromState(state: FormSubmissionState): UploadState | undefined;
|
|
23
25
|
getFormValue(value?: FormStateValue | FormState): UploadState | undefined;
|
|
24
|
-
getDisplayStringFromFormValue(files: FileState[] | undefined): string;
|
|
25
|
-
getDisplayStringFromState(state: FormSubmissionState): string;
|
|
26
|
+
getDisplayStringFromFormValue(files: FileState[] | undefined, translator: Translator): string;
|
|
27
|
+
getDisplayStringFromState(state: FormSubmissionState, translator: Translator): string;
|
|
26
28
|
getContextValueFromFormValue(files: UploadState | undefined): string[] | null;
|
|
27
29
|
getContextValueFromState(state: FormSubmissionState): string[] | null;
|
|
28
|
-
getViewModel(
|
|
30
|
+
getViewModel(context: RenderContext): {
|
|
29
31
|
upload: {
|
|
30
32
|
count: number;
|
|
31
33
|
summaryList: SummaryList;
|
|
@@ -42,11 +44,11 @@ export declare class FileUploadField extends FormComponent {
|
|
|
42
44
|
id?: string;
|
|
43
45
|
text: string;
|
|
44
46
|
};
|
|
45
|
-
prefix?: import("
|
|
46
|
-
suffix?: import("
|
|
47
|
+
prefix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
48
|
+
suffix?: import("../../../../server/plugins/engine/components/types.js").ComponentText;
|
|
47
49
|
classes?: string;
|
|
48
50
|
condition?: string;
|
|
49
|
-
errors?: FormSubmissionError[];
|
|
51
|
+
errors?: import("../../../../server/plugins/engine/types.js").FormSubmissionError[];
|
|
50
52
|
errorMessage?: {
|
|
51
53
|
text: string;
|
|
52
54
|
};
|
|
@@ -59,21 +61,21 @@ export declare class FileUploadField extends FormComponent {
|
|
|
59
61
|
accept?: string;
|
|
60
62
|
inputmode?: string;
|
|
61
63
|
};
|
|
62
|
-
content?: import("
|
|
64
|
+
content?: import("../../../../server/plugins/engine/components/types.js").Content | import("../../../../server/plugins/engine/components/types.js").Content[] | string;
|
|
63
65
|
maxlength?: number;
|
|
64
66
|
maxwords?: number;
|
|
65
67
|
rows?: number;
|
|
66
|
-
items?: import("
|
|
68
|
+
items?: import("../../../../server/plugins/engine/components/types.js").ListItem[] | import("../../../../server/plugins/engine/components/types.js").DateInputItem[];
|
|
67
69
|
fieldset?: {
|
|
68
70
|
attributes?: string | Record<string, string>;
|
|
69
|
-
legend?: import("
|
|
71
|
+
legend?: import("../../../../server/plugins/engine/components/types.js").Label;
|
|
70
72
|
};
|
|
71
73
|
formGroup?: {
|
|
72
74
|
classes?: string;
|
|
73
75
|
attributes?: string | Record<string, string>;
|
|
74
76
|
};
|
|
75
77
|
showFieldsetError?: boolean;
|
|
76
|
-
components?: import("
|
|
78
|
+
components?: import("../../../../server/plugins/engine/components/types.js").ComponentViewModel[];
|
|
77
79
|
};
|
|
78
80
|
isValue(value?: FormStateValue | FormState): value is UploadState;
|
|
79
81
|
/**
|