@defra/forms-engine-plugin 5.0.0-alpha → 5.0.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/.public/assets-manifest.json +3 -5
  2. package/.public/javascripts/application.min.js +1 -1
  3. package/.public/javascripts/application.min.js.map +1 -1
  4. package/.public/javascripts/im-core.min.js +2 -0
  5. package/.public/javascripts/im-core.min.js.map +1 -0
  6. package/.public/javascripts/shared.min.js +1 -1
  7. package/.public/javascripts/shared.min.js.map +1 -1
  8. package/.public/javascripts/vendor/@defra.min.js +1 -1
  9. package/.public/javascripts/vendor/@defra.min.js.map +1 -1
  10. package/.public/stylesheets/application.min.css +1 -1
  11. package/.public/stylesheets/application.min.css.map +1 -1
  12. package/.server/client/javascripts/file-upload.js +5 -3
  13. package/.server/client/javascripts/file-upload.js.map +1 -1
  14. package/.server/client/javascripts/geospatial-map.js +36 -29
  15. package/.server/client/javascripts/geospatial-map.js.map +1 -1
  16. package/.server/client/javascripts/location-map.js +16 -1
  17. package/.server/client/javascripts/location-map.js.map +1 -1
  18. package/.server/client/javascripts/map.d.ts +6 -0
  19. package/.server/client/javascripts/map.js +10 -0
  20. package/.server/client/javascripts/map.js.map +1 -1
  21. package/.server/client/javascripts/maps.d.ts +5 -0
  22. package/.server/client/javascripts/maps.js +6 -0
  23. package/.server/client/javascripts/maps.js.map +1 -0
  24. package/.server/client/javascripts/shared.d.ts +1 -3
  25. package/.server/client/javascripts/shared.js +1 -3
  26. package/.server/client/javascripts/shared.js.map +1 -1
  27. package/.server/client/javascripts/sssi-dataset.d.ts +32 -0
  28. package/.server/client/javascripts/sssi-dataset.js +99 -0
  29. package/.server/client/javascripts/sssi-dataset.js.map +1 -0
  30. package/.server/client/stylesheets/maps.scss +4 -0
  31. package/.server/client/stylesheets/shared.scss +1 -7
  32. package/.server/server/constants.d.ts +2 -0
  33. package/.server/server/constants.js +2 -0
  34. package/.server/server/constants.js.map +1 -1
  35. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +9 -3
  36. package/.server/server/plugins/engine/components/AutocompleteField.js +12 -0
  37. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  38. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +4 -1
  39. package/.server/server/plugins/engine/components/CheckboxesField.js +13 -0
  40. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  41. package/.server/server/plugins/engine/components/ComponentBase.d.ts +1 -0
  42. package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
  43. package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
  44. package/.server/server/plugins/engine/components/ComponentCollection.js +11 -6
  45. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  46. package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
  47. package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
  48. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  49. package/.server/server/plugins/engine/components/DeclarationField.d.ts +5 -2
  50. package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
  51. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  52. package/.server/server/plugins/engine/components/Details.d.ts +1 -0
  53. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +28 -2
  54. package/.server/server/plugins/engine/components/EastingNorthingField.js +93 -54
  55. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  56. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
  57. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
  58. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  59. package/.server/server/plugins/engine/components/FileUploadField.d.ts +12 -0
  60. package/.server/server/plugins/engine/components/FileUploadField.js +20 -2
  61. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  62. package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
  63. package/.server/server/plugins/engine/components/FormComponent.js +5 -2
  64. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  65. package/.server/server/plugins/engine/components/GeospatialField.d.ts +2 -0
  66. package/.server/server/plugins/engine/components/GeospatialField.js +3 -1
  67. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  68. package/.server/server/plugins/engine/components/Html.d.ts +1 -0
  69. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
  70. package/.server/server/plugins/engine/components/LatLongField.d.ts +28 -2
  71. package/.server/server/plugins/engine/components/LatLongField.js +85 -48
  72. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  73. package/.server/server/plugins/engine/components/List.d.ts +1 -0
  74. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +1 -0
  75. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
  76. package/.server/server/plugins/engine/components/LocationFieldBase.js +18 -5
  77. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  78. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +10 -2
  79. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +22 -12
  80. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  81. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
  82. package/.server/server/plugins/engine/components/Markdown.js +1 -1
  83. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  84. package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
  85. package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
  86. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  87. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
  88. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  89. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
  90. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  91. package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
  92. package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
  93. package/.server/server/plugins/engine/components/NumberField.js +16 -0
  94. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  95. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
  96. package/.server/server/plugins/engine/components/OsGridRefField.js +4 -3
  97. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  98. package/.server/server/plugins/engine/components/PaymentField.d.ts +3 -0
  99. package/.server/server/plugins/engine/components/PaymentField.js +17 -6
  100. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  101. package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
  102. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
  103. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
  104. package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
  105. package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
  106. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  107. package/.server/server/plugins/engine/components/YesNoField.d.ts +5 -2
  108. package/.server/server/plugins/engine/components/YesNoField.js +17 -8
  109. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  110. package/.server/server/plugins/engine/components/helpers/components.js +1 -2
  111. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  112. package/.server/server/plugins/engine/components/helpers/index.d.ts +7 -0
  113. package/.server/server/plugins/engine/components/helpers/index.js +13 -1
  114. package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
  115. package/.server/server/plugins/engine/components/types.d.ts +1 -0
  116. package/.server/server/plugins/engine/components/types.js.map +1 -1
  117. package/.server/server/plugins/engine/helpers.d.ts +22 -2
  118. package/.server/server/plugins/engine/helpers.js +44 -5
  119. package/.server/server/plugins/engine/helpers.js.map +1 -1
  120. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +3 -0
  121. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +10 -7
  122. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
  123. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
  124. package/.server/server/plugins/engine/i18n/createFormTranslator.js +33 -4
  125. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
  126. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
  127. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
  128. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
  129. package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
  130. package/.server/server/plugins/engine/i18n/form.js +35 -0
  131. package/.server/server/plugins/engine/i18n/form.js.map +1 -0
  132. package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
  133. package/.server/server/plugins/engine/i18n/languages.js +19 -0
  134. package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
  135. package/.server/server/plugins/engine/i18n/translations/cy.json +73 -6
  136. package/.server/server/plugins/engine/i18n/translations/en-GB.json +43 -4
  137. package/.server/server/plugins/engine/i18n/types.d.ts +2 -0
  138. package/.server/server/plugins/engine/i18n/types.js.map +1 -1
  139. package/.server/server/plugins/engine/index.d.ts +4 -0
  140. package/.server/server/plugins/engine/index.js +4 -0
  141. package/.server/server/plugins/engine/index.js.map +1 -1
  142. package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
  143. package/.server/server/plugins/engine/models/FormModel.js +9 -15
  144. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  145. package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
  146. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  147. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +3 -5
  148. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  149. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  150. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  151. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +2 -0
  152. package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
  153. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  154. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +1 -1
  155. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +22 -9
  156. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  157. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
  158. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +7 -3
  159. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  160. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
  161. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  162. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
  163. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  164. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +1 -1
  165. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +3 -3
  166. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  167. package/.server/server/plugins/engine/pageControllers/validationOptions.js +23 -2
  168. package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
  169. package/.server/server/plugins/engine/types/schema.js +1 -0
  170. package/.server/server/plugins/engine/types/schema.js.map +1 -1
  171. package/.server/server/plugins/engine/types.d.ts +1 -0
  172. package/.server/server/plugins/engine/types.js.map +1 -1
  173. package/.server/server/plugins/engine/views/components/_location-field-base.html +3 -1
  174. package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  175. package/.server/server/plugins/engine/views/components/geospatialfield.html +4 -1
  176. package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  177. package/.server/server/plugins/engine/views/components/paymentfield.html +1 -1
  178. package/.server/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  179. package/.server/server/plugins/engine/views/partials/preview-banner.html +3 -1
  180. package/.server/server/plugins/map/routes/index.js +1 -1
  181. package/.server/server/plugins/map/routes/index.js.map +1 -1
  182. package/.server/server/plugins/map/types.d.ts +1 -25
  183. package/.server/server/plugins/map/types.js +1 -16
  184. package/.server/server/plugins/map/types.js.map +1 -1
  185. package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
  186. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  187. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
  188. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
  189. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
  190. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  191. package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
  192. package/.server/server/plugins/nunjucks/filters/index.js +1 -0
  193. package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
  194. package/.server/server/plugins/payment/helper.d.ts +11 -1
  195. package/.server/server/plugins/payment/helper.js +18 -2
  196. package/.server/server/plugins/payment/helper.js.map +1 -1
  197. package/.server/server/plugins/payment/helper.test.js +2 -1
  198. package/.server/server/plugins/payment/helper.test.js.map +1 -1
  199. package/.server/server/plugins/payment/service.d.ts +2 -1
  200. package/.server/server/plugins/payment/service.js +5 -2
  201. package/.server/server/plugins/payment/service.js.map +1 -1
  202. package/.server/server/plugins/payment/service.test.js +7 -3
  203. package/.server/server/plugins/payment/service.test.js.map +1 -1
  204. package/.server/server/plugins/payment/types.d.ts +4 -0
  205. package/.server/server/plugins/payment/types.js +1 -0
  206. package/.server/server/plugins/payment/types.js.map +1 -1
  207. package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
  208. package/.server/server/plugins/postcode-lookup/models/index.js +87 -33
  209. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  210. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
  211. package/.server/server/plugins/postcode-lookup/routes/index.js +47 -15
  212. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  213. package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
  214. package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
  215. package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
  216. package/.server/server/plugins/postcode-lookup/types.js +6 -1
  217. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  218. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  219. package/.server/server/utils/type-utils.d.ts +1 -2
  220. package/.server/server/utils/type-utils.js +0 -3
  221. package/.server/server/utils/type-utils.js.map +1 -1
  222. package/package.json +9 -3
  223. package/src/client/javascripts/file-upload.js +10 -3
  224. package/src/client/javascripts/geospatial-map.js +38 -32
  225. package/src/client/javascripts/location-map.js +17 -0
  226. package/src/client/javascripts/map.js +10 -0
  227. package/src/client/javascripts/maps.js +5 -0
  228. package/src/client/javascripts/shared.js +1 -3
  229. package/src/client/javascripts/sssi-dataset.js +104 -0
  230. package/src/client/stylesheets/maps.scss +4 -0
  231. package/src/client/stylesheets/shared.scss +1 -7
  232. package/src/server/constants.js +2 -0
  233. package/src/server/plugins/engine/components/AutocompleteField.ts +13 -0
  234. package/src/server/plugins/engine/components/CheckboxesField.ts +13 -1
  235. package/src/server/plugins/engine/components/ComponentBase.ts +2 -0
  236. package/src/server/plugins/engine/components/ComponentCollection.ts +16 -11
  237. package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
  238. package/src/server/plugins/engine/components/DeclarationField.ts +7 -6
  239. package/src/server/plugins/engine/components/EastingNorthingField.ts +154 -89
  240. package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
  241. package/src/server/plugins/engine/components/FileUploadField.ts +21 -2
  242. package/src/server/plugins/engine/components/FormComponent.ts +6 -5
  243. package/src/server/plugins/engine/components/GeospatialField.ts +8 -1
  244. package/src/server/plugins/engine/components/LatLongField.ts +128 -58
  245. package/src/server/plugins/engine/components/LocationFieldBase.ts +23 -6
  246. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +35 -12
  247. package/src/server/plugins/engine/components/Markdown.ts +2 -3
  248. package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
  249. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
  250. package/src/server/plugins/engine/components/NumberField.ts +21 -1
  251. package/src/server/plugins/engine/components/OsGridRefField.ts +9 -3
  252. package/src/server/plugins/engine/components/PaymentField.ts +15 -5
  253. package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
  254. package/src/server/plugins/engine/components/YesNoField.ts +17 -9
  255. package/src/server/plugins/engine/components/helpers/components.ts +1 -2
  256. package/src/server/plugins/engine/components/helpers/index.ts +19 -0
  257. package/src/server/plugins/engine/components/types.ts +1 -0
  258. package/src/server/plugins/engine/helpers.ts +52 -5
  259. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +10 -7
  260. package/src/server/plugins/engine/i18n/createFormTranslator.ts +62 -11
  261. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
  262. package/src/server/plugins/engine/i18n/form.ts +54 -0
  263. package/src/server/plugins/engine/i18n/languages.ts +19 -0
  264. package/src/server/plugins/engine/i18n/translations/cy.json +73 -6
  265. package/src/server/plugins/engine/i18n/translations/en-GB.json +43 -4
  266. package/src/server/plugins/engine/i18n/types.ts +2 -0
  267. package/src/server/plugins/engine/index.ts +7 -0
  268. package/src/server/plugins/engine/models/FormModel.ts +9 -15
  269. package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
  270. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +3 -6
  271. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
  272. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
  273. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +18 -8
  274. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +10 -5
  275. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
  276. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
  277. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +6 -3
  278. package/src/server/plugins/engine/pageControllers/validationOptions.ts +27 -2
  279. package/src/server/plugins/engine/types/schema.ts +1 -0
  280. package/src/server/plugins/engine/types.ts +1 -0
  281. package/src/server/plugins/engine/views/components/_location-field-base.html +3 -1
  282. package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  283. package/src/server/plugins/engine/views/components/geospatialfield.html +4 -1
  284. package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  285. package/src/server/plugins/engine/views/components/paymentfield.html +1 -1
  286. package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  287. package/src/server/plugins/engine/views/partials/preview-banner.html +3 -1
  288. package/src/server/plugins/map/routes/index.js +1 -1
  289. package/src/server/plugins/map/types.js +1 -16
  290. package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  291. package/src/server/plugins/nunjucks/filters/index.js +1 -0
  292. package/src/server/plugins/payment/helper.js +22 -2
  293. package/src/server/plugins/payment/service.js +6 -2
  294. package/src/server/plugins/payment/types.js +1 -0
  295. package/src/server/plugins/postcode-lookup/models/index.js +75 -43
  296. package/src/server/plugins/postcode-lookup/routes/index.js +73 -16
  297. package/src/server/plugins/postcode-lookup/types.js +6 -1
  298. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  299. package/src/server/utils/type-utils.ts +1 -11
  300. package/.public/javascripts/im-search-plugin.min.js +0 -2
  301. package/.public/javascripts/im-search-plugin.min.js.map +0 -1
  302. package/.public/javascripts/vendor/preact.min.js +0 -2
  303. package/.public/javascripts/vendor/preact.min.js.map +0 -1
@@ -2,7 +2,6 @@ import {
2
2
  ComponentType,
3
3
  hasFormComponents,
4
4
  isFormType,
5
- type ComponentDef,
6
5
  type DeclarationFieldComponent,
7
6
  type Item
8
7
  } from '@defra/forms-model'
@@ -121,10 +120,12 @@ export class DeclarationField extends FormComponent {
121
120
  const { declarationRequired } = buildValidationMessages(translator.t)
122
121
  const msg = declarationRequired as unknown as string
123
122
  return {
124
- 'any.required': msg,
125
- 'any.unknown': msg,
126
- 'array.includesRequiredUnknowns': msg
127
- } as unknown as LanguageMessages
123
+ [this.name]: {
124
+ 'any.required': msg,
125
+ 'any.unknown': msg,
126
+ 'array.includesRequiredUnknowns': msg
127
+ } as unknown as LanguageMessages
128
+ }
128
129
  }
129
130
 
130
131
  getDisplayStringFromFormValue(
@@ -148,7 +149,7 @@ export class DeclarationField extends FormComponent {
148
149
  'components.declarationField.defaultLabel'
149
150
  )
150
151
  } = this
151
- const content = tComponent(this as unknown as ComponentDef, 'content')
152
+ const content = tComponent(this.def, 'content')
152
153
 
153
154
  const viewModel = super.getViewModel(context)
154
155
  let { fieldset, label } = viewModel
@@ -15,7 +15,10 @@ import {
15
15
  getLocationFieldViewModel
16
16
  } from './LocationFieldHelpers.js'
17
17
  import { NumberField } from './NumberField.js'
18
- import { createLowerFirstExpression } from './helpers/index.js'
18
+ import {
19
+ createLowerFirstExpression,
20
+ getTranslatedLabel
21
+ } from './helpers/index.js'
19
22
  import {
20
23
  type EastingNorthingState,
21
24
  type RenderContext
@@ -31,7 +34,6 @@ import {
31
34
  type FormSubmissionError,
32
35
  type FormSubmissionState
33
36
  } from '../types.js'
34
- import { convertToLanguageMessages } from '../../../utils/type-utils.js'
35
37
 
36
38
  // British National Grid coordinate limits
37
39
  const DEFAULT_EASTING_MIN = 0
@@ -55,89 +57,18 @@ export class EastingNorthingField extends FormComponent {
55
57
 
56
58
  const isRequired = options.required !== false
57
59
 
58
- const eastingMin = schema?.easting?.min ?? DEFAULT_EASTING_MIN
59
- const eastingMax = schema?.easting?.max ?? DEFAULT_EASTING_MAX
60
- const northingMin = schema?.northing?.min ?? DEFAULT_NORTHING_MIN
61
- const northingMax = schema?.northing?.max ?? DEFAULT_NORTHING_MAX
62
-
63
- const fieldLabel = lowerFirst(this.label)
60
+ const { eastingMin, eastingMax, northingMin, northingMax } =
61
+ EastingNorthingField.getMinMax(schema)
64
62
 
65
- const eastingDigitsMessage = tPlugin(
66
- 'components.eastingNorthingField.eastingDigits',
67
- 'en-GB',
68
- { fieldLabel }
69
- )
70
- const northingDigitsMessage = tPlugin(
71
- 'components.eastingNorthingField.northingDigits',
72
- 'en-GB',
73
- { fieldLabel }
74
- )
75
-
76
- const customValidationMessages: LanguageMessages =
77
- convertToLanguageMessages({
78
- 'any.required': tPlugin(
79
- 'components.eastingNorthingField.eastingRequired',
80
- 'en-GB'
81
- ),
82
- 'number.base': tPlugin(
83
- 'components.eastingNorthingField.eastingRequired',
84
- 'en-GB'
85
- ),
86
- 'number.min': tPlugin(
87
- 'components.eastingNorthingField.eastingRange',
88
- 'en-GB',
89
- {
90
- fieldLabel,
91
- min: eastingMin,
92
- max: eastingMax
93
- }
94
- ),
95
- 'number.max': tPlugin(
96
- 'components.eastingNorthingField.eastingRange',
97
- 'en-GB',
98
- {
99
- fieldLabel,
100
- min: eastingMin,
101
- max: eastingMax
102
- }
103
- ),
104
- 'number.precision': eastingDigitsMessage,
105
- 'number.integer': eastingDigitsMessage,
106
- 'number.unsafe': eastingDigitsMessage
107
- })
108
-
109
- const northingValidationMessages: LanguageMessages =
110
- convertToLanguageMessages({
111
- 'any.required': tPlugin(
112
- 'components.eastingNorthingField.northingRequired',
113
- 'en-GB'
114
- ),
115
- 'number.base': tPlugin(
116
- 'components.eastingNorthingField.northingRequired',
117
- 'en-GB'
118
- ),
119
- 'number.min': tPlugin(
120
- 'components.eastingNorthingField.northingRange',
121
- 'en-GB',
122
- {
123
- fieldLabel,
124
- min: northingMin,
125
- max: northingMax
126
- }
127
- ),
128
- 'number.max': tPlugin(
129
- 'components.eastingNorthingField.northingRange',
130
- 'en-GB',
131
- {
132
- fieldLabel,
133
- min: northingMin,
134
- max: northingMax
135
- }
136
- ),
137
- 'number.precision': northingDigitsMessage,
138
- 'number.integer': northingDigitsMessage,
139
- 'number.unsafe': northingDigitsMessage
140
- })
63
+ const { eastingValidationMessages, northingValidationMessages } =
64
+ EastingNorthingField.buildErrorMessages(
65
+ this.label,
66
+ eastingMin,
67
+ eastingMax,
68
+ northingMin,
69
+ northingMax,
70
+ 'en-GB'
71
+ )
141
72
 
142
73
  this.collection = new ComponentCollection(
143
74
  [
@@ -154,7 +85,7 @@ export class EastingNorthingField extends FormComponent {
154
85
  required: isRequired,
155
86
  optionalText: true,
156
87
  classes: 'govuk-input--width-10',
157
- customValidationMessages
88
+ customValidationMessages: eastingValidationMessages
158
89
  }
159
90
  },
160
91
  {
@@ -192,14 +123,15 @@ export class EastingNorthingField extends FormComponent {
192
123
 
193
124
  getDisplayStringFromFormValue(
194
125
  value: EastingNorthingState | undefined,
195
- _translator: Translator
126
+ translator: Translator
196
127
  ): string {
197
128
  if (!value) {
198
129
  return ''
199
130
  }
200
131
 
201
- // CYA page format: <<eastingvalue, northingvalue>>
202
- return `${value.easting}, ${value.northing}`
132
+ const { t } = translator
133
+
134
+ return `${t('components.eastingNorthingField.easting')}: ${value.easting}\n${t('components.eastingNorthingField.northing')}: ${value.northing}`
203
135
  }
204
136
 
205
137
  getDisplayStringFromState(
@@ -218,7 +150,7 @@ export class EastingNorthingField extends FormComponent {
218
150
  return null
219
151
  }
220
152
 
221
- return `Easting: ${value.easting}\nNorthing: ${value.northing}`
153
+ return `${value.easting}, ${value.northing}`
222
154
  }
223
155
 
224
156
  getContextValueFromState(state: FormSubmissionState) {
@@ -244,6 +176,26 @@ export class EastingNorthingField extends FormComponent {
244
176
  return EastingNorthingField.isEastingNorthing(value)
245
177
  }
246
178
 
179
+ getValidationMessagesOverride(translator: Translator) {
180
+ const def = this.def as EastingNorthingFieldComponent
181
+ const translatedLabel = getTranslatedLabel(def, translator)
182
+ const { eastingMin, eastingMax, northingMin, northingMax } =
183
+ EastingNorthingField.getMinMax(def.schema)
184
+ const { eastingValidationMessages, northingValidationMessages } =
185
+ EastingNorthingField.buildErrorMessages(
186
+ translatedLabel,
187
+ eastingMin,
188
+ eastingMax,
189
+ northingMin,
190
+ northingMax,
191
+ translator.language
192
+ )
193
+ return {
194
+ [`${this.name}__easting`]: eastingValidationMessages,
195
+ [`${this.name}__northing`]: northingValidationMessages
196
+ }
197
+ }
198
+
247
199
  /**
248
200
  * For error preview page that shows all possible errors on a component
249
201
  */
@@ -309,4 +261,117 @@ export class EastingNorthingField extends FormComponent {
309
261
  NumberField.isNumber(value.northing)
310
262
  )
311
263
  }
264
+
265
+ static buildErrorMessages(
266
+ label: string,
267
+ eastingMin: number,
268
+ eastingMax: number,
269
+ northingMin: number,
270
+ northingMax: number,
271
+ language: string
272
+ ) {
273
+ const fieldLabel = lowerFirst(label)
274
+
275
+ const eastingDigitsMessage = tPlugin(
276
+ 'components.eastingNorthingField.eastingDigits',
277
+ language,
278
+ { fieldLabel }
279
+ )
280
+ const northingDigitsMessage = tPlugin(
281
+ 'components.eastingNorthingField.northingDigits',
282
+ language,
283
+ { fieldLabel }
284
+ )
285
+
286
+ const eastingValidationMessages: LanguageMessages = {
287
+ 'any.required': tPlugin(
288
+ 'components.eastingNorthingField.eastingRequired',
289
+ language
290
+ ),
291
+ 'number.base': tPlugin(
292
+ 'components.eastingNorthingField.eastingRequired',
293
+ language
294
+ ),
295
+ 'number.min': tPlugin(
296
+ 'components.eastingNorthingField.eastingRange',
297
+ language,
298
+ {
299
+ fieldLabel,
300
+ min: eastingMin,
301
+ max: eastingMax
302
+ }
303
+ ),
304
+ 'number.max': tPlugin(
305
+ 'components.eastingNorthingField.eastingRange',
306
+ language,
307
+ {
308
+ fieldLabel,
309
+ min: eastingMin,
310
+ max: eastingMax
311
+ }
312
+ ),
313
+ 'number.precision': eastingDigitsMessage,
314
+ 'number.integer': eastingDigitsMessage,
315
+ 'number.unsafe': eastingDigitsMessage
316
+ }
317
+
318
+ const northingValidationMessages: LanguageMessages = {
319
+ 'any.required': tPlugin(
320
+ 'components.eastingNorthingField.northingRequired',
321
+ language
322
+ ),
323
+ 'number.base': tPlugin(
324
+ 'components.eastingNorthingField.northingRequired',
325
+ language
326
+ ),
327
+ 'number.min': tPlugin(
328
+ 'components.eastingNorthingField.northingRange',
329
+ language,
330
+ {
331
+ fieldLabel,
332
+ min: northingMin,
333
+ max: northingMax
334
+ }
335
+ ),
336
+ 'number.max': tPlugin(
337
+ 'components.eastingNorthingField.northingRange',
338
+ language,
339
+ {
340
+ fieldLabel,
341
+ min: northingMin,
342
+ max: northingMax
343
+ }
344
+ ),
345
+ 'number.precision': northingDigitsMessage,
346
+ 'number.integer': northingDigitsMessage,
347
+ 'number.unsafe': northingDigitsMessage
348
+ }
349
+ return {
350
+ eastingValidationMessages,
351
+ northingValidationMessages
352
+ }
353
+ }
354
+
355
+ // Read schema values from def.schema with fallback defaults
356
+ static getMinMax(
357
+ schema:
358
+ | {
359
+ easting?: {
360
+ min?: number
361
+ max?: number
362
+ }
363
+ northing?: {
364
+ min?: number
365
+ max?: number
366
+ }
367
+ }
368
+ | undefined
369
+ ) {
370
+ return {
371
+ eastingMin: schema?.easting?.min ?? DEFAULT_EASTING_MIN,
372
+ eastingMax: schema?.easting?.max ?? DEFAULT_EASTING_MAX,
373
+ northingMin: schema?.northing?.min ?? DEFAULT_NORTHING_MIN,
374
+ northingMax: schema?.northing?.max ?? DEFAULT_NORTHING_MAX
375
+ }
376
+ }
312
377
  }
@@ -40,7 +40,8 @@ export class EmailAddressField extends FormComponent {
40
40
  formSchema = formSchema.messages({
41
41
  'any.required': message,
42
42
  'string.empty': message,
43
- 'string.email': message
43
+ 'string.email': message,
44
+ 'string.unicode': message
44
45
  })
45
46
  } else if (options.customValidationMessages) {
46
47
  formSchema = formSchema.messages(options.customValidationMessages)
@@ -5,11 +5,13 @@ import {
5
5
  import Boom from '@hapi/boom'
6
6
  import joi, { type ArraySchema } from 'joi'
7
7
 
8
+ import { EN_GB } from '../../../constants.js'
8
9
  import {
9
10
  FormComponent,
10
11
  isUploadState
11
12
  } from './FormComponent.js'
12
13
  import { type RenderContext } from './types.js'
14
+ import { t as tPlugin } from '../i18n/index.js'
13
15
  import { type Translator } from '../i18n/types.js'
14
16
  import { InvalidComponentStateError } from '../pageControllers/errors.js'
15
17
  import { messageTemplate } from '../pageControllers/validationOptions.js'
@@ -142,6 +144,8 @@ export class FileUploadField extends FormComponent {
142
144
  formSchema = formSchema.length(schema.length)
143
145
  }
144
146
 
147
+ formSchema = formSchema.messages(FileUploadField.buildErrorMessages(EN_GB))
148
+
145
149
  this.formSchema = formSchema.items(formItemSchema)
146
150
  this.stateSchema = formSchema
147
151
  .items(formItemSchema)
@@ -169,7 +173,7 @@ export class FileUploadField extends FormComponent {
169
173
  return ''
170
174
  }
171
175
 
172
- return translator.t('components.fileUploadField.filesCount', {
176
+ return translator.t('pages.summary.fileUpload', {
173
177
  count: files.length
174
178
  })
175
179
  }
@@ -244,7 +248,7 @@ export class FileUploadField extends FormComponent {
244
248
 
245
249
  items.push({
246
250
  href,
247
- text: 'Remove',
251
+ text: t('pages.fileUpload.remove'),
248
252
  classes: 'govuk-link--no-visited-state',
249
253
  attributes: { id: `${id}__${index}` },
250
254
  visuallyHiddenText: file.filename
@@ -300,6 +304,13 @@ export class FileUploadField extends FormComponent {
300
304
  return isUploadState(value)
301
305
  }
302
306
 
307
+ getValidationMessagesOverride(translator: Translator) {
308
+ const { language } = translator
309
+ return {
310
+ [this.name]: FileUploadField.buildErrorMessages(language)
311
+ }
312
+ }
313
+
303
314
  /**
304
315
  * For error preview page that shows all possible errors on a component
305
316
  */
@@ -403,4 +414,12 @@ export class FileUploadField extends FormComponent {
403
414
  ]
404
415
  }
405
416
  }
417
+
418
+ static buildErrorMessages(language: string) {
419
+ return {
420
+ 'array.min': tPlugin('validation.filesMin', language),
421
+ 'array.max': tPlugin('validation.filesMax', language),
422
+ 'array.length': tPlugin('validation.filesLength', language)
423
+ }
424
+ }
406
425
  }
@@ -1,5 +1,4 @@
1
1
  import {
2
- type ComponentDef,
3
2
  type FormComponentsDef,
4
3
  type FormMetadata,
5
4
  type Item
@@ -158,10 +157,13 @@ export class FormComponent extends ComponentBase {
158
157
  * Override in composite fields to return translated Joi message overrides for
159
158
  * their sub-fields, applied at validation time so schema-level English messages
160
159
  * are replaced with the correct language. Return null to skip message patching.
160
+ * The return object may contain message overrides at component-level, or sub-field-level.
161
+ * This would allow different error message overrides per field within a collection e.g.
162
+ * for EastingNothingField
161
163
  */
162
164
  getValidationMessagesOverride(
163
165
  _translator: Translator
164
- ): LanguageMessages | null {
166
+ ): Record<string, LanguageMessages> | null {
165
167
  return null
166
168
  }
167
169
 
@@ -178,15 +180,14 @@ export class FormComponent extends ComponentBase {
178
180
  const isRequired = !('required' in options) || options.required !== false
179
181
  const hideOptional = 'optionalText' in options && options.optionalText
180
182
 
181
- const resolvedTitle =
182
- tComponent(this as unknown as ComponentDef, 'title') || title
183
+ const resolvedTitle = tComponent(this.def, 'title') || title
183
184
  const optionalTag =
184
185
  !isRequired && !hideOptional ? ` ${t('common.optional')}` : ''
185
186
  const label = `${resolvedTitle}${optionalTag}`
186
187
 
187
188
  if (hint) {
188
189
  viewModel.hint = {
189
- text: tComponent(this as unknown as ComponentDef, 'hint') || hint
190
+ text: tComponent(this.def, 'hint') || hint
190
191
  }
191
192
  }
192
193
 
@@ -6,6 +6,7 @@ import {
6
6
  FormComponent,
7
7
  isGeospatialState
8
8
  } from './FormComponent.js'
9
+ import { getMapLayers } from './LocationFieldHelpers.js'
9
10
  import { getGeospatialSchema } from './helpers/geospatial.js'
10
11
  import { type RenderContext } from './types.js'
11
12
  import { type Translator } from '../i18n/types.js'
@@ -102,6 +103,7 @@ export class GeospatialField extends FormComponent {
102
103
  ...viewModel,
103
104
  country: this.options.countries?.at(0),
104
105
  geometryTypes: this.options.geometryTypes,
106
+ mapLayers: getMapLayers(this),
105
107
  value
106
108
  }
107
109
  }
@@ -123,7 +125,12 @@ export class GeospatialField extends FormComponent {
123
125
  err.href = `#description_${err.path[1]}`
124
126
  err.text = translator.t(
125
127
  'components.geospatialField.validation.wrongCountry',
126
- { count: Number(err.path[1]) + 1, country: err.context.country }
128
+ {
129
+ count: Number(err.path[1]) + 1,
130
+ country: translator.t(
131
+ `common.${(err.context.country as string).toLowerCase()}`
132
+ )
133
+ }
127
134
  )
128
135
  }
129
136
  })