@defra/forms-engine-plugin 4.22.0 → 5.0.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/.server/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
  2. package/.server/server/forms/simple-form.yaml +106 -3
  3. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +11 -11
  4. package/.server/server/plugins/engine/components/AutocompleteField.js +2 -2
  5. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  6. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +3 -2
  7. package/.server/server/plugins/engine/components/CheckboxesField.js +4 -9
  8. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  9. package/.server/server/plugins/engine/components/ComponentCollection.d.ts +8 -7
  10. package/.server/server/plugins/engine/components/ComponentCollection.js +106 -51
  11. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  12. package/.server/server/plugins/engine/components/DatePartsField.d.ts +8 -6
  13. package/.server/server/plugins/engine/components/DatePartsField.js +27 -9
  14. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  15. package/.server/server/plugins/engine/components/DeclarationField.d.ts +13 -11
  16. package/.server/server/plugins/engine/components/DeclarationField.js +31 -9
  17. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  18. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +6 -5
  19. package/.server/server/plugins/engine/components/EastingNorthingField.js +42 -22
  20. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  21. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +11 -14
  22. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -2
  23. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  24. package/.server/server/plugins/engine/components/FileUploadField.d.ts +14 -12
  25. package/.server/server/plugins/engine/components/FileUploadField.js +22 -12
  26. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  27. package/.server/server/plugins/engine/components/FormComponent.d.ts +21 -12
  28. package/.server/server/plugins/engine/components/FormComponent.js +33 -14
  29. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  30. package/.server/server/plugins/engine/components/GeospatialField.d.ts +14 -12
  31. package/.server/server/plugins/engine/components/GeospatialField.js +19 -13
  32. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  33. package/.server/server/plugins/engine/components/LatLongField.d.ts +6 -5
  34. package/.server/server/plugins/engine/components/LatLongField.js +32 -20
  35. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  36. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +7 -6
  37. package/.server/server/plugins/engine/components/ListFormComponent.js +19 -7
  38. package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -1
  39. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +17 -16
  40. package/.server/server/plugins/engine/components/LocationFieldBase.js +2 -2
  41. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  42. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +3 -3
  43. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +2 -2
  44. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  45. package/.server/server/plugins/engine/components/Markdown.d.ts +8 -7
  46. package/.server/server/plugins/engine/components/Markdown.js +5 -2
  47. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  48. package/.server/server/plugins/engine/components/MonthYearField.d.ts +9 -7
  49. package/.server/server/plugins/engine/components/MonthYearField.js +26 -8
  50. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  51. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +10 -9
  52. package/.server/server/plugins/engine/components/MultilineTextField.js +2 -2
  53. package/.server/server/plugins/engine/components/MultilineTextField.js.map +1 -1
  54. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  55. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +14 -6
  56. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  57. package/.server/server/plugins/engine/components/NumberField.d.ts +10 -9
  58. package/.server/server/plugins/engine/components/NumberField.js +2 -2
  59. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  60. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
  61. package/.server/server/plugins/engine/components/OsGridRefField.js +14 -6
  62. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  63. package/.server/server/plugins/engine/components/PaymentField.d.ts +12 -10
  64. package/.server/server/plugins/engine/components/PaymentField.js +21 -8
  65. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  66. package/.server/server/plugins/engine/components/SelectField.d.ts +11 -11
  67. package/.server/server/plugins/engine/components/SelectField.js +2 -2
  68. package/.server/server/plugins/engine/components/SelectField.js.map +1 -1
  69. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +4 -4
  70. package/.server/server/plugins/engine/components/SelectionControlField.js +2 -2
  71. package/.server/server/plugins/engine/components/SelectionControlField.js.map +1 -1
  72. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +10 -9
  73. package/.server/server/plugins/engine/components/TelephoneNumberField.js +2 -2
  74. package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
  75. package/.server/server/plugins/engine/components/UkAddressField.d.ts +12 -10
  76. package/.server/server/plugins/engine/components/UkAddressField.js +29 -17
  77. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  78. package/.server/server/plugins/engine/components/YesNoField.d.ts +3 -0
  79. package/.server/server/plugins/engine/components/YesNoField.js +9 -0
  80. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  81. package/.server/server/plugins/engine/components/helpers/components.d.ts +3 -2
  82. package/.server/server/plugins/engine/components/helpers/components.js +11 -8
  83. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  84. package/.server/server/plugins/engine/components/types.d.ts +8 -1
  85. package/.server/server/plugins/engine/components/types.js.map +1 -1
  86. package/.server/server/plugins/engine/configureEnginePlugin.js +8 -1
  87. package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -1
  88. package/.server/server/plugins/engine/form-context.d.ts +1 -0
  89. package/.server/server/plugins/engine/form-context.js +4 -2
  90. package/.server/server/plugins/engine/form-context.js.map +1 -1
  91. package/.server/server/plugins/engine/helpers.d.ts +1 -1
  92. package/.server/server/plugins/engine/helpers.js +8 -13
  93. package/.server/server/plugins/engine/helpers.js.map +1 -1
  94. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +39 -0
  95. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +50 -0
  96. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -0
  97. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +5 -0
  98. package/.server/server/plugins/engine/i18n/createFormTranslator.js +18 -0
  99. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -0
  100. package/.server/server/plugins/engine/i18n/createTranslator.d.ts +9 -0
  101. package/.server/server/plugins/engine/i18n/createTranslator.js +51 -0
  102. package/.server/server/plugins/engine/i18n/createTranslator.js.map +1 -0
  103. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +5 -0
  104. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +57 -0
  105. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -0
  106. package/.server/server/plugins/engine/i18n/index.d.ts +18 -0
  107. package/.server/server/plugins/engine/i18n/index.js +71 -0
  108. package/.server/server/plugins/engine/i18n/index.js.map +1 -0
  109. package/.server/server/plugins/engine/i18n/translations/cy.json +271 -0
  110. package/.server/server/plugins/engine/i18n/translations/en-GB.json +271 -0
  111. package/.server/server/plugins/engine/i18n/types.d.ts +41 -0
  112. package/.server/server/plugins/engine/i18n/types.js +2 -0
  113. package/.server/server/plugins/engine/i18n/types.js.map +1 -0
  114. package/.server/server/plugins/engine/index.js +3 -2
  115. package/.server/server/plugins/engine/index.js.map +1 -1
  116. package/.server/server/plugins/engine/models/FormModel.d.ts +9 -1
  117. package/.server/server/plugins/engine/models/FormModel.js +44 -18
  118. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  119. package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +5 -2
  120. package/.server/server/plugins/engine/models/SummaryViewModel.js +44 -18
  121. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  122. package/.server/server/plugins/engine/options.js +2 -1
  123. package/.server/server/plugins/engine/options.js.map +1 -1
  124. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +4 -0
  125. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  126. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  127. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  128. package/.server/server/plugins/engine/outputFormatters/machine/v1.js +7 -6
  129. package/.server/server/plugins/engine/outputFormatters/machine/v1.js.map +1 -1
  130. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +2 -1
  131. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +6 -3
  132. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  133. package/.server/server/plugins/engine/pageControllers/PageController.d.ts +3 -1
  134. package/.server/server/plugins/engine/pageControllers/PageController.js +11 -1
  135. package/.server/server/plugins/engine/pageControllers/PageController.js.map +1 -1
  136. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +4 -2
  137. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +52 -21
  138. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  139. package/.server/server/plugins/engine/pageControllers/RepeatPageController.d.ts +3 -2
  140. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +63 -26
  141. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  142. package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +3 -1
  143. package/.server/server/plugins/engine/pageControllers/StartPageController.js +2 -2
  144. package/.server/server/plugins/engine/pageControllers/StartPageController.js.map +1 -1
  145. package/.server/server/plugins/engine/pageControllers/StatusPageController.js +12 -2
  146. package/.server/server/plugins/engine/pageControllers/StatusPageController.js.map +1 -1
  147. package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +4 -3
  148. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +45 -28
  149. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  150. package/.server/server/plugins/engine/pageControllers/__stubs__/translator.d.ts +2 -0
  151. package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js +24 -0
  152. package/.server/server/plugins/engine/pageControllers/__stubs__/translator.js.map +1 -0
  153. package/.server/server/plugins/engine/pageControllers/errors.d.ts +1 -1
  154. package/.server/server/plugins/engine/pageControllers/errors.js +3 -2
  155. package/.server/server/plugins/engine/pageControllers/errors.js.map +1 -1
  156. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +3 -2
  157. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +4 -4
  158. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  159. package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +7 -3
  160. package/.server/server/plugins/engine/pageControllers/validationOptions.js +34 -33
  161. package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
  162. package/.server/server/plugins/engine/plugin.js +2 -0
  163. package/.server/server/plugins/engine/plugin.js.map +1 -1
  164. package/.server/server/plugins/engine/routes/index.js +4 -1
  165. package/.server/server/plugins/engine/routes/index.js.map +1 -1
  166. package/.server/server/plugins/engine/routes/questions.js +5 -2
  167. package/.server/server/plugins/engine/routes/questions.js.map +1 -1
  168. package/.server/server/plugins/engine/types/index.d.ts +1 -0
  169. package/.server/server/plugins/engine/types/index.js.map +1 -1
  170. package/.server/server/plugins/engine/types/schema.js +1 -0
  171. package/.server/server/plugins/engine/types/schema.js.map +1 -1
  172. package/.server/server/plugins/engine/types.d.ts +12 -1
  173. package/.server/server/plugins/engine/types.js.map +1 -1
  174. package/.server/server/plugins/engine/views/components/_location-field-base.html +1 -1
  175. package/.server/server/plugins/engine/views/components/fileuploadfield.html +3 -3
  176. package/.server/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
  177. package/.server/server/plugins/engine/views/components/osgridreffield.html +1 -1
  178. package/.server/server/plugins/engine/views/components/paymentfield.html +8 -8
  179. package/.server/server/plugins/engine/views/components/ukaddressfield.html +4 -4
  180. package/.server/server/plugins/engine/views/confirmation.html +4 -4
  181. package/.server/server/plugins/engine/views/exit.html +4 -4
  182. package/.server/server/plugins/engine/views/file-upload.html +3 -3
  183. package/.server/server/plugins/engine/views/index.html +3 -3
  184. package/.server/server/plugins/engine/views/item-delete.html +1 -1
  185. package/.server/server/plugins/engine/views/partials/form.html +3 -3
  186. package/.server/server/plugins/engine/views/partials/preview-banner.html +4 -4
  187. package/.server/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
  188. package/.server/server/plugins/engine/views/repeat-list-summary.html +4 -4
  189. package/.server/server/plugins/engine/views/summary.html +14 -7
  190. package/.server/server/plugins/nunjucks/enviroment.test.js +10 -0
  191. package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
  192. package/.server/server/plugins/nunjucks/environment.d.ts +8 -0
  193. package/.server/server/plugins/nunjucks/environment.js +13 -0
  194. package/.server/server/plugins/nunjucks/environment.js.map +1 -1
  195. package/.server/server/plugins/nunjucks/filters/answer.js +9 -1
  196. package/.server/server/plugins/nunjucks/filters/answer.js.map +1 -1
  197. package/.server/server/plugins/nunjucks/filters/answer.test.js +13 -2
  198. package/.server/server/plugins/nunjucks/filters/answer.test.js.map +1 -1
  199. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  200. package/.server/server/plugins/postcode-lookup/models/index.d.ts +24 -19
  201. package/.server/server/plugins/postcode-lookup/models/index.js +83 -76
  202. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  203. package/.server/server/plugins/postcode-lookup/routes/index.js +7 -13
  204. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  205. package/.server/server/plugins/postcode-lookup/types.d.ts +1 -0
  206. package/.server/server/plugins/postcode-lookup/types.js +1 -0
  207. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  208. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  209. package/.server/server/types.d.ts +2 -1
  210. package/.server/server/types.js.map +1 -1
  211. package/.server/server/utils/utils.d.ts +5 -0
  212. package/.server/server/utils/utils.js +16 -0
  213. package/.server/server/utils/utils.js.map +1 -1
  214. package/.server/typings/hapi/index.d.js.map +1 -1
  215. package/package.json +3 -2
  216. package/src/server/forms/register-as-a-unicorn-breeder.yaml +0 -14
  217. package/src/server/forms/simple-form.yaml +106 -3
  218. package/src/server/plugins/engine/components/AutocompleteField.ts +3 -6
  219. package/src/server/plugins/engine/components/CheckboxesField.ts +12 -11
  220. package/src/server/plugins/engine/components/ComponentCollection.ts +143 -61
  221. package/src/server/plugins/engine/components/DatePartsField.ts +33 -11
  222. package/src/server/plugins/engine/components/DeclarationField.ts +37 -14
  223. package/src/server/plugins/engine/components/EastingNorthingField.ts +83 -22
  224. package/src/server/plugins/engine/components/EmailAddressField.ts +4 -7
  225. package/src/server/plugins/engine/components/FileUploadField.ts +28 -22
  226. package/src/server/plugins/engine/components/FormComponent.ts +49 -12
  227. package/src/server/plugins/engine/components/GeospatialField.ts +36 -21
  228. package/src/server/plugins/engine/components/LatLongField.ts +52 -21
  229. package/src/server/plugins/engine/components/ListFormComponent.ts +26 -10
  230. package/src/server/plugins/engine/components/LocationFieldBase.ts +5 -8
  231. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +3 -3
  232. package/src/server/plugins/engine/components/Markdown.ts +7 -3
  233. package/src/server/plugins/engine/components/MonthYearField.ts +32 -10
  234. package/src/server/plugins/engine/components/MultilineTextField.ts +5 -8
  235. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +25 -11
  236. package/src/server/plugins/engine/components/NumberField.ts +3 -4
  237. package/src/server/plugins/engine/components/OsGridRefField.ts +25 -9
  238. package/src/server/plugins/engine/components/PaymentField.ts +22 -12
  239. package/src/server/plugins/engine/components/SelectField.ts +3 -6
  240. package/src/server/plugins/engine/components/SelectionControlField.ts +7 -8
  241. package/src/server/plugins/engine/components/TelephoneNumberField.ts +4 -7
  242. package/src/server/plugins/engine/components/UkAddressField.ts +33 -18
  243. package/src/server/plugins/engine/components/YesNoField.ts +10 -0
  244. package/src/server/plugins/engine/components/helpers/components.ts +13 -6
  245. package/src/server/plugins/engine/components/types.ts +9 -0
  246. package/src/server/plugins/engine/configureEnginePlugin.ts +12 -1
  247. package/src/server/plugins/engine/form-context.ts +8 -2
  248. package/src/server/plugins/engine/helpers.ts +10 -18
  249. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +69 -0
  250. package/src/server/plugins/engine/i18n/createFormTranslator.ts +33 -0
  251. package/src/server/plugins/engine/i18n/createTranslator.ts +61 -0
  252. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +61 -0
  253. package/src/server/plugins/engine/i18n/index.ts +80 -0
  254. package/src/server/plugins/engine/i18n/translations/cy.json +271 -0
  255. package/src/server/plugins/engine/i18n/translations/en-GB.json +271 -0
  256. package/src/server/plugins/engine/i18n/types.ts +62 -0
  257. package/src/server/plugins/engine/index.ts +4 -2
  258. package/src/server/plugins/engine/models/FormModel.ts +59 -23
  259. package/src/server/plugins/engine/models/SummaryViewModel.ts +68 -25
  260. package/src/server/plugins/engine/options.js +2 -1
  261. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +5 -0
  262. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -3
  263. package/src/server/plugins/engine/outputFormatters/machine/v1.ts +9 -8
  264. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +7 -3
  265. package/src/server/plugins/engine/pageControllers/PageController.ts +12 -1
  266. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +53 -21
  267. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +66 -29
  268. package/src/server/plugins/engine/pageControllers/StartPageController.ts +7 -2
  269. package/src/server/plugins/engine/pageControllers/StatusPageController.ts +10 -2
  270. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +53 -24
  271. package/src/server/plugins/engine/pageControllers/__stubs__/translator.ts +28 -0
  272. package/src/server/plugins/engine/pageControllers/errors.ts +4 -2
  273. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +11 -4
  274. package/src/server/plugins/engine/pageControllers/validationOptions.ts +43 -53
  275. package/src/server/plugins/engine/plugin.ts +2 -0
  276. package/src/server/plugins/engine/routes/index.ts +9 -1
  277. package/src/server/plugins/engine/routes/questions.ts +5 -1
  278. package/src/server/plugins/engine/types/index.ts +5 -0
  279. package/src/server/plugins/engine/types/schema.ts +1 -0
  280. package/src/server/plugins/engine/types.ts +10 -0
  281. package/src/server/plugins/engine/views/components/_location-field-base.html +1 -1
  282. package/src/server/plugins/engine/views/components/fileuploadfield.html +3 -3
  283. package/src/server/plugins/engine/views/components/nationalgridfieldnumberfield.html +1 -1
  284. package/src/server/plugins/engine/views/components/osgridreffield.html +1 -1
  285. package/src/server/plugins/engine/views/components/paymentfield.html +8 -8
  286. package/src/server/plugins/engine/views/components/ukaddressfield.html +4 -4
  287. package/src/server/plugins/engine/views/confirmation.html +4 -4
  288. package/src/server/plugins/engine/views/exit.html +4 -4
  289. package/src/server/plugins/engine/views/file-upload.html +3 -3
  290. package/src/server/plugins/engine/views/index.html +3 -3
  291. package/src/server/plugins/engine/views/item-delete.html +1 -1
  292. package/src/server/plugins/engine/views/partials/form.html +3 -3
  293. package/src/server/plugins/engine/views/partials/preview-banner.html +4 -4
  294. package/src/server/plugins/engine/views/partials/warn-missing-notification-email.html +4 -5
  295. package/src/server/plugins/engine/views/repeat-list-summary.html +4 -4
  296. package/src/server/plugins/engine/views/summary.html +14 -7
  297. package/src/server/plugins/nunjucks/environment.js +14 -0
  298. package/src/server/plugins/nunjucks/filters/answer.js +12 -1
  299. package/src/server/plugins/postcode-lookup/models/index.js +144 -87
  300. package/src/server/plugins/postcode-lookup/routes/index.js +13 -16
  301. package/src/server/plugins/postcode-lookup/types.js +1 -0
  302. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  303. package/src/server/types.ts +2 -0
  304. package/src/server/utils/utils.js +14 -0
  305. package/src/typings/hapi/index.d.ts +1 -0
  306. package/.server/server/plugins/engine/components/constants.d.ts +0 -1
  307. package/.server/server/plugins/engine/components/constants.js +0 -2
  308. package/.server/server/plugins/engine/components/constants.js.map +0 -1
  309. package/src/server/plugins/engine/components/constants.ts +0 -1
@@ -13,7 +13,12 @@ import {
13
13
  } from './LocationFieldHelpers.js'
14
14
  import { NumberField } from './NumberField.js'
15
15
  import { createLowerFirstExpression } from './helpers/index.js'
16
- import { type LatLongState } from './types.js'
16
+ import {
17
+ type LatLongState,
18
+ type RenderContext
19
+ } from './types.js'
20
+ import { t as tPlugin } from '../i18n/index.js'
21
+ import { type Translator } from '../i18n/types.js'
17
22
  import { messageTemplate } from '../pageControllers/validationOptions.js'
18
23
  import {
19
24
  type ErrorMessageTemplateList,
@@ -51,31 +56,50 @@ export class LatLongField extends FormComponent {
51
56
  const longitudeMin = schema?.longitude?.min ?? -13.687
52
57
  const longitudeMax = schema?.longitude?.max ?? 1.767
53
58
 
54
- const latitudeRequired = 'Enter latitude'
55
- const longitudeRequired = 'Enter longitude'
59
+ const fieldLabel = lowerFirst(this.label)
56
60
 
57
61
  const customValidationMessages: LanguageMessages =
58
62
  convertToLanguageMessages({
59
- 'number.precision':
60
- '{{#label}} must have no more than 7 decimal places',
61
- 'number.unsafe': '{{#label}} must be a valid number'
63
+ 'number.precision': tPlugin(
64
+ 'components.latLongField.precision',
65
+ 'en-GB'
66
+ ),
67
+ 'number.unsafe': tPlugin('components.latLongField.notANumber', 'en-GB')
62
68
  })
63
69
 
64
- const latitudeRangeMessage = `Latitude for ${lowerFirst(this.label)} must be between ${latitudeMin} and ${latitudeMax}`
65
- const longitudeRangeMessage = `Longitude for ${lowerFirst(this.label)} must be between ${longitudeMin} and ${longitudeMax}`
70
+ const latitudeRangeMessage = tPlugin(
71
+ 'components.latLongField.latitudeRange',
72
+ 'en-GB',
73
+ { fieldLabel, min: latitudeMin, max: latitudeMax }
74
+ )
75
+ const longitudeRangeMessage = tPlugin(
76
+ 'components.latLongField.longitudeRange',
77
+ 'en-GB',
78
+ { fieldLabel, min: longitudeMin, max: longitudeMax }
79
+ )
66
80
 
67
81
  const latitudeMessages: LanguageMessages = convertToLanguageMessages({
68
82
  ...customValidationMessages,
69
- 'any.required': latitudeRequired,
70
- 'number.base': `Enter a valid latitude for ${lowerFirst(this.label)} like 51.519450`,
83
+ 'any.required': tPlugin(
84
+ 'components.latLongField.latitudeRequired',
85
+ 'en-GB'
86
+ ),
87
+ 'number.base': tPlugin('components.latLongField.latitudeBase', 'en-GB', {
88
+ fieldLabel
89
+ }),
71
90
  'number.min': latitudeRangeMessage,
72
91
  'number.max': latitudeRangeMessage
73
92
  })
74
93
 
75
94
  const longitudeMessages: LanguageMessages = convertToLanguageMessages({
76
95
  ...customValidationMessages,
77
- 'any.required': longitudeRequired,
78
- 'number.base': `Enter a valid longitude for ${lowerFirst(this.label)} like -0.127758`,
96
+ 'any.required': tPlugin(
97
+ 'components.latLongField.longitudeRequired',
98
+ 'en-GB'
99
+ ),
100
+ 'number.base': tPlugin('components.latLongField.longitudeBase', 'en-GB', {
101
+ fieldLabel
102
+ }),
79
103
  'number.min': longitudeRangeMessage,
80
104
  'number.max': longitudeRangeMessage
81
105
  })
@@ -85,7 +109,7 @@ export class LatLongField extends FormComponent {
85
109
  {
86
110
  type: ComponentType.NumberField,
87
111
  name: `${name}__latitude`,
88
- title: 'Latitude',
112
+ title: 'components.latLongField.latitude',
89
113
  schema: {
90
114
  min: latitudeMin,
91
115
  max: latitudeMax,
@@ -102,7 +126,7 @@ export class LatLongField extends FormComponent {
102
126
  {
103
127
  type: ComponentType.NumberField,
104
128
  name: `${name}__longitude`,
105
- title: 'Longitude',
129
+ title: 'components.latLongField.longitude',
106
130
  schema: {
107
131
  min: longitudeMin,
108
132
  max: longitudeMax,
@@ -133,7 +157,10 @@ export class LatLongField extends FormComponent {
133
157
  return LatLongField.isLatLong(value) ? value : undefined
134
158
  }
135
159
 
136
- getDisplayStringFromFormValue(value: LatLongState | undefined): string {
160
+ getDisplayStringFromFormValue(
161
+ value: LatLongState | undefined,
162
+ _translator: Translator
163
+ ): string {
137
164
  if (!value) {
138
165
  return ''
139
166
  }
@@ -142,10 +169,13 @@ export class LatLongField extends FormComponent {
142
169
  return `${value.latitude}, ${value.longitude}`
143
170
  }
144
171
 
145
- getDisplayStringFromState(state: FormSubmissionState) {
172
+ getDisplayStringFromState(
173
+ state: FormSubmissionState,
174
+ translator: Translator
175
+ ) {
146
176
  const value = this.getFormValueFromState(state)
147
177
 
148
- return this.getDisplayStringFromFormValue(value)
178
+ return this.getDisplayStringFromFormValue(value, translator)
149
179
  }
150
180
 
151
181
  getContextValueFromFormValue(value: LatLongState | undefined): string | null {
@@ -163,15 +193,16 @@ export class LatLongField extends FormComponent {
163
193
  return this.getContextValueFromFormValue(value)
164
194
  }
165
195
 
166
- getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {
167
- const viewModel = super.getViewModel(payload, errors)
168
- return getLocationFieldViewModel(this, viewModel, payload, errors)
196
+ getViewModel(context: RenderContext) {
197
+ const viewModel = super.getViewModel(context)
198
+ return getLocationFieldViewModel(this, viewModel, context)
169
199
  }
170
200
 
171
201
  getViewErrors(
202
+ translator: Translator,
172
203
  errors?: FormSubmissionError[]
173
204
  ): FormSubmissionError[] | undefined {
174
- const allErrors = this.getErrors(errors)
205
+ const allErrors = this.getErrors(translator, errors)
175
206
  return deduplicateErrorsByHref(allErrors)
176
207
  }
177
208
 
@@ -13,12 +13,14 @@ import joi, {
13
13
  } from 'joi'
14
14
 
15
15
  import { FormComponent } from './FormComponent.js'
16
- import { type ListItem } from './types.js'
16
+ import {
17
+ type ListItem,
18
+ type RenderContext
19
+ } from './types.js'
20
+ import { type Translator } from '../i18n/types.js'
17
21
  import { messageTemplate } from '../pageControllers/validationOptions.js'
18
22
  import {
19
23
  type ErrorMessageTemplateList,
20
- type FormPayload,
21
- type FormSubmissionError,
22
24
  type FormSubmissionState
23
25
  } from '../types.js'
24
26
 
@@ -100,7 +102,8 @@ export class ListFormComponent extends FormComponent {
100
102
  }
101
103
 
102
104
  getDisplayStringFromFormValue(
103
- value: string | number | boolean | Item['value'][] | undefined
105
+ value: string | number | boolean | Item['value'][] | undefined,
106
+ translator: Translator
104
107
  ): string {
105
108
  const { items } = this
106
109
 
@@ -108,29 +111,42 @@ export class ListFormComponent extends FormComponent {
108
111
 
109
112
  return items
110
113
  .filter((item) => values.includes(item.value))
111
- .map((item) => item.text)
114
+ .map((item) => translator.tListItem(item, 'text') || item.text)
112
115
  .join(', ')
113
116
  }
114
117
 
115
- getDisplayStringFromState(state: FormSubmissionState) {
118
+ getDisplayStringFromState(
119
+ state: FormSubmissionState,
120
+ translator: Translator
121
+ ) {
116
122
  // Allow for array values via subclass
117
123
  const value = this.getFormValueFromState(state)
118
124
 
119
- return this.getDisplayStringFromFormValue(value)
125
+ return this.getDisplayStringFromFormValue(value, translator)
120
126
  }
121
127
 
122
- getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {
128
+ getViewModel(context: RenderContext) {
123
129
  const { items: listItems } = this
124
130
 
125
- const viewModel = super.getViewModel(payload, errors)
131
+ const viewModel = super.getViewModel(context)
126
132
  const { value } = viewModel
127
133
 
128
134
  // Support multiple values for checkboxes
129
135
  const values = this.isValue(value) ? [value].flat() : []
130
136
 
137
+ const { tListItem } = context.translator
138
+
131
139
  const items = listItems.map((item) => {
132
140
  const selected = values.includes(item.value)
133
- const itemModel: ListItem = { ...item, selected }
141
+ const resolvedText = tListItem(item, 'text') || item.text
142
+ const resolvedHint = tListItem(item, 'hint') || item.hint?.text
143
+ const hintAttr = resolvedHint ? { hint: { text: resolvedHint } } : {}
144
+ const itemModel: ListItem = {
145
+ ...item,
146
+ text: resolvedText,
147
+ selected,
148
+ ...hintAttr
149
+ }
134
150
 
135
151
  if ('id' in itemModel) {
136
152
  delete itemModel.id
@@ -10,13 +10,12 @@ import {
10
10
  isFormValue
11
11
  } from './FormComponent.js'
12
12
  import { addClassOptionIfNone } from './helpers/index.js'
13
+ import { type RenderContext } from './types.js'
13
14
  import { messageTemplate } from '../pageControllers/validationOptions.js'
14
15
  import {
15
16
  type ErrorMessageTemplateList,
16
- type FormPayload,
17
17
  type FormState,
18
18
  type FormStateValue,
19
- type FormSubmissionError,
20
19
  type FormSubmissionState
21
20
  } from '../types.js'
22
21
  import { convertToLanguageMessages } from '../../../utils/type-utils.js'
@@ -63,8 +62,7 @@ export abstract class LocationFieldBase extends FormComponent {
63
62
  addClassOptionIfNone(locationOptions, 'govuk-input--width-10')
64
63
 
65
64
  const config = this.getValidationConfig()
66
- const requiredMessage =
67
- config.requiredMessage ?? (messageTemplate.required as string)
65
+ const requiredMessage = config.requiredMessage ?? messageTemplate.required
68
66
 
69
67
  const messages = convertToLanguageMessages({
70
68
  'any.required': requiredMessage,
@@ -120,8 +118,8 @@ export abstract class LocationFieldBase extends FormComponent {
120
118
  return LocationFieldBase.isText(value)
121
119
  }
122
120
 
123
- getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {
124
- const viewModel = super.getViewModel(payload, errors)
121
+ getViewModel(context: RenderContext) {
122
+ const viewModel = super.getViewModel(context)
125
123
 
126
124
  if (this.instructionText) {
127
125
  return {
@@ -140,8 +138,7 @@ export abstract class LocationFieldBase extends FormComponent {
140
138
  baseErrors: [
141
139
  {
142
140
  type: 'required',
143
- template:
144
- config.requiredMessage ?? (messageTemplate.required as string)
141
+ template: config.requiredMessage ?? messageTemplate.required
145
142
  },
146
143
  ...this.getErrorTemplates()
147
144
  ],
@@ -6,6 +6,7 @@ import { type LatLongField } from './LatLongField.js'
6
6
  import {
7
7
  type DateInputItem,
8
8
  type Label,
9
+ type RenderContext,
9
10
  type ViewModel
10
11
  } from './types.js'
11
12
  import {
@@ -94,13 +95,12 @@ export function getLocationFieldViewModel(
94
95
  name: string
95
96
  value: FormValue
96
97
  },
97
- payload: FormPayload,
98
- errors?: FormSubmissionError[]
98
+ context: RenderContext
99
99
  ) {
100
100
  const { collection } = component
101
101
  const { fieldset: existingFieldset, label } = viewModel
102
102
 
103
- const subViewModels = collection.getViewModel(payload, errors)
103
+ const subViewModels = collection.getViewModel(context)
104
104
 
105
105
  const fieldErrors: string[] = []
106
106
  subViewModels.forEach(({ model }) => {
@@ -1,6 +1,7 @@
1
- import { type MarkdownComponent } from '@defra/forms-model'
1
+ import { type ComponentDef, type MarkdownComponent } from '@defra/forms-model'
2
2
 
3
3
  import { ComponentBase } from './ComponentBase.js'
4
+ import { type RenderContext } from './types.js'
4
5
 
5
6
  export class Markdown extends ComponentBase {
6
7
  declare options: MarkdownComponent['options']
@@ -20,12 +21,15 @@ export class Markdown extends ComponentBase {
20
21
  this.headerStartLevel = 2
21
22
  }
22
23
 
23
- getViewModel() {
24
+ getViewModel(context: RenderContext) {
24
25
  const { content, viewModel } = this
25
26
 
27
+ const { tComponent } = context.translator
28
+
26
29
  return {
27
30
  ...viewModel,
28
- content,
31
+ content:
32
+ tComponent(this as unknown as ComponentDef, 'content') || content,
29
33
  headerStartLevel: this.headerStartLevel
30
34
  }
31
35
  }
@@ -16,16 +16,18 @@ import {
16
16
  import { NumberField } from './NumberField.js'
17
17
  import {
18
18
  type DateInputItem,
19
- type MonthYearState
19
+ type MonthYearState,
20
+ type RenderContext
20
21
  } from './types.js'
21
22
  import { parseStrictDate } from '../date-helper.js'
23
+ import { buildValidationMessages } from '../i18n/buildValidationMessages.js'
24
+ import { type Translator } from '../i18n/types.js'
22
25
  import { messageTemplate } from '../pageControllers/validationOptions.js'
23
26
  import {
24
27
  type ErrorMessageTemplateList,
25
28
  type FormPayload,
26
29
  type FormState,
27
30
  type FormStateValue,
28
- type FormSubmissionError,
29
31
  type FormSubmissionState
30
32
  } from '../types.js'
31
33
  import { convertToLanguageMessages } from '../../../utils/type-utils.js'
@@ -62,7 +64,7 @@ export class MonthYearField extends FormComponent {
62
64
  {
63
65
  type: ComponentType.NumberField,
64
66
  name: `${name}__month`,
65
- title: 'Month',
67
+ title: 'components.monthYearField.month',
66
68
  schema: { min: 1, max: 12, precision: 0 },
67
69
  options: {
68
70
  required: isRequired,
@@ -74,7 +76,7 @@ export class MonthYearField extends FormComponent {
74
76
  {
75
77
  type: ComponentType.NumberField,
76
78
  name: `${name}__year`,
77
- title: 'Year',
79
+ title: 'components.monthYearField.year',
78
80
  schema: { min: 1000, max: 3000, precision: 0 },
79
81
  options: {
80
82
  required: isRequired,
@@ -101,7 +103,10 @@ export class MonthYearField extends FormComponent {
101
103
  return MonthYearField.isMonthYear(value) ? value : undefined
102
104
  }
103
105
 
104
- getDisplayStringFromFormValue(value: MonthYearState | undefined): string {
106
+ getDisplayStringFromFormValue(
107
+ value: MonthYearState | undefined,
108
+ _translator: Translator
109
+ ): string {
105
110
  if (!value) {
106
111
  return ''
107
112
  }
@@ -113,10 +118,13 @@ export class MonthYearField extends FormComponent {
113
118
  return `${monthString} ${value.year}`
114
119
  }
115
120
 
116
- getDisplayStringFromState(state: FormSubmissionState) {
121
+ getDisplayStringFromState(
122
+ state: FormSubmissionState,
123
+ translator: Translator
124
+ ) {
117
125
  const value = this.getFormValueFromState(state)
118
126
 
119
- return this.getDisplayStringFromFormValue(value)
127
+ return this.getDisplayStringFromFormValue(value, translator)
120
128
  }
121
129
 
122
130
  getContextValueFromFormValue(
@@ -145,10 +153,24 @@ export class MonthYearField extends FormComponent {
145
153
  return this.getContextValueFromFormValue(value)
146
154
  }
147
155
 
148
- getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {
156
+ getValidationMessagesOverride(translator: Translator) {
157
+ const { t } = translator
158
+ return convertToLanguageMessages({
159
+ 'any.required': buildValidationMessages(t).objectMissing,
160
+ 'number.base': buildValidationMessages(t).objectMissing,
161
+ 'number.precision': buildValidationMessages(t).dateFormat,
162
+ 'number.integer': buildValidationMessages(t).dateFormat,
163
+ 'number.unsafe': buildValidationMessages(t).dateFormat,
164
+ 'number.min': buildValidationMessages(t).dateFormat,
165
+ 'number.max': buildValidationMessages(t).dateFormat
166
+ })
167
+ }
168
+
169
+ getViewModel(context: RenderContext) {
170
+ const { errors } = context
149
171
  const { collection, name } = this
150
172
 
151
- const viewModel = super.getViewModel(payload, errors)
173
+ const viewModel = super.getViewModel(context)
152
174
  let { fieldset, label } = viewModel
153
175
 
154
176
  // Check for component errors only
@@ -156,7 +178,7 @@ export class MonthYearField extends FormComponent {
156
178
 
157
179
  // Use the component collection to generate the subitems
158
180
  const items: DateInputItem[] = collection
159
- .getViewModel(payload, errors)
181
+ .getViewModel(context)
160
182
  .map(({ model }) => {
161
183
  let { label, type, value, classes, errorMessage } = model
162
184
 
@@ -3,12 +3,9 @@ import Joi, { type CustomValidator, type StringSchema } from 'joi'
3
3
 
4
4
  import { type ComponentBase } from './ComponentBase.js'
5
5
  import { FormComponent } from './FormComponent.js'
6
+ import { type RenderContext } from './types.js'
6
7
  import { messageTemplate } from '../pageControllers/validationOptions.js'
7
- import {
8
- type ErrorMessageTemplateList,
9
- type FormPayload,
10
- type FormSubmissionError
11
- } from '../types.js'
8
+ import { type ErrorMessageTemplateList } from '../types.js'
12
9
 
13
10
  export class MultilineTextField extends FormComponent {
14
11
  declare options: MultilineTextFieldComponent['options']
@@ -94,10 +91,10 @@ export class MultilineTextField extends FormComponent {
94
91
  this.schema = schema
95
92
  }
96
93
 
97
- getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {
94
+ getViewModel(context: RenderContext) {
98
95
  const { schema, options, isCharacterOrWordCount } = this
99
96
 
100
- const viewModel = super.getViewModel(payload, errors)
97
+ const viewModel = super.getViewModel(context)
101
98
  let { maxlength, maxwords, rows } = viewModel
102
99
 
103
100
  if (schema.max) {
@@ -122,7 +119,7 @@ export class MultilineTextField extends FormComponent {
122
119
  }
123
120
 
124
121
  buildMinMaxText(min?: number, max?: number): string {
125
- const minMaxError = messageTemplate.minMax as string
122
+ const minMaxError = messageTemplate.minMax
126
123
  return minMaxError
127
124
  .replace('{{#min}}', min ? min.toString() : '[min length]')
128
125
  .replace('{{#max}}', max ? max.toString() : '[max length]')
@@ -2,6 +2,8 @@ import { type NationalGridFieldNumberFieldComponent } from '@defra/forms-model'
2
2
 
3
3
  import { LocationFieldBase } from './LocationFieldBase.js'
4
4
  import { createLowerFirstExpression } from './helpers/index.js'
5
+ import { t } from '../i18n/index.js'
6
+ import { type ErrorMessageTemplateList } from '../types.js'
5
7
 
6
8
  export class NationalGridFieldNumberField extends LocationFieldBase {
7
9
  declare options: NationalGridFieldNumberFieldComponent['options']
@@ -13,14 +15,13 @@ export class NationalGridFieldNumberField extends LocationFieldBase {
13
15
  const pattern =
14
16
  /^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))\s?([0-9]{4})\s?([0-9]{4})$/
15
17
 
16
- const patternTemplate =
17
- 'Enter a valid National Grid field number for {{lowerFirst(#title)}} like NG 1234 5678'
18
-
19
18
  return {
20
19
  pattern,
21
- patternErrorMessage: createLowerFirstExpression(patternTemplate),
20
+ patternErrorMessage: createLowerFirstExpression(
21
+ t('components.nationalGridField.pattern', 'en-GB')
22
+ ),
22
23
  requiredMessage: createLowerFirstExpression(
23
- 'Enter {{lowerFirst(#title)}}'
24
+ t('components.nationalGridField.required', 'en-GB')
24
25
  )
25
26
  }
26
27
  }
@@ -30,7 +31,7 @@ export class NationalGridFieldNumberField extends LocationFieldBase {
30
31
  {
31
32
  type: 'pattern',
32
33
  template: createLowerFirstExpression(
33
- 'Enter a valid National Grid field number for {{lowerFirst(#title)}} like NG 1234 5678'
34
+ t('components.nationalGridField.pattern', 'en-GB')
34
35
  )
35
36
  }
36
37
  ]
@@ -39,10 +40,23 @@ export class NationalGridFieldNumberField extends LocationFieldBase {
39
40
  /**
40
41
  * Static version of getAllPossibleErrors that doesn't require a component instance.
41
42
  */
42
- static getAllPossibleErrors() {
43
- const instance = Object.create(
44
- NationalGridFieldNumberField.prototype
45
- ) as NationalGridFieldNumberField
46
- return instance.getAllPossibleErrors()
43
+ static getAllPossibleErrors(): ErrorMessageTemplateList {
44
+ return {
45
+ baseErrors: [
46
+ {
47
+ type: 'required',
48
+ template: createLowerFirstExpression(
49
+ t('components.nationalGridField.required', 'en-GB')
50
+ )
51
+ },
52
+ {
53
+ type: 'pattern',
54
+ template: createLowerFirstExpression(
55
+ t('components.nationalGridField.pattern', 'en-GB')
56
+ )
57
+ }
58
+ ],
59
+ advancedSettingsErrors: []
60
+ }
47
61
  }
48
62
  }
@@ -5,13 +5,12 @@ import {
5
5
  FormComponent,
6
6
  isFormValue
7
7
  } from './FormComponent.js'
8
+ import { type RenderContext } from './types.js'
8
9
  import { messageTemplate } from '../pageControllers/validationOptions.js'
9
10
  import {
10
11
  type ErrorMessageTemplateList,
11
- type FormPayload,
12
12
  type FormState,
13
13
  type FormStateValue,
14
- type FormSubmissionError,
15
14
  type FormSubmissionState
16
15
  } from '../types.js'
17
16
 
@@ -88,10 +87,10 @@ export class NumberField extends FormComponent {
88
87
  return this.isValue(value) ? value : undefined
89
88
  }
90
89
 
91
- getViewModel(payload: FormPayload, errors?: FormSubmissionError[]) {
90
+ getViewModel(context: RenderContext) {
92
91
  const { options, schema } = this
93
92
 
94
- const viewModel = super.getViewModel(payload, errors)
93
+ const viewModel = super.getViewModel(context)
95
94
  let { attributes, prefix, suffix, value } = viewModel
96
95
 
97
96
  if (typeof schema.precision === 'undefined' || schema.precision <= 0) {
@@ -2,6 +2,8 @@ import { type OsGridRefFieldComponent } from '@defra/forms-model'
2
2
 
3
3
  import { LocationFieldBase } from './LocationFieldBase.js'
4
4
  import { createLowerFirstExpression } from './helpers/index.js'
5
+ import { t } from '../i18n/index.js'
6
+ import { type ErrorMessageTemplateList } from '../types.js'
5
7
 
6
8
  export class OsGridRefField extends LocationFieldBase {
7
9
  declare options: OsGridRefFieldComponent['options']
@@ -16,14 +18,13 @@ export class OsGridRefField extends LocationFieldBase {
16
18
  const pattern =
17
19
  /^((([sS]|[nN])[a-hA-Hj-zJ-Z])|(([tT]|[oO])[abfglmqrvwABFGLMQRVW])|([hH][l-zL-Z])|([jJ][lmqrvwLMQRVW]))\s?(([0-9]{3})\s?([0-9]{3})|([0-9]{4})\s?([0-9]{4})|([0-9]{5})\s?([0-9]{5}))$/
18
20
 
19
- const patternTemplate =
20
- 'Enter a valid OS grid reference for {{lowerFirst(#title)}} like TQ123456'
21
-
22
21
  return {
23
22
  pattern,
24
- patternErrorMessage: createLowerFirstExpression(patternTemplate),
23
+ patternErrorMessage: createLowerFirstExpression(
24
+ t('components.osGridRefField.pattern', 'en-GB')
25
+ ),
25
26
  requiredMessage: createLowerFirstExpression(
26
- 'Enter {{lowerFirst(#title)}}'
27
+ t('components.osGridRefField.required', 'en-GB')
27
28
  )
28
29
  }
29
30
  }
@@ -33,7 +34,7 @@ export class OsGridRefField extends LocationFieldBase {
33
34
  {
34
35
  type: 'pattern',
35
36
  template: createLowerFirstExpression(
36
- 'Enter a valid OS grid reference for {{lowerFirst(#title)}} like TQ123456'
37
+ t('components.osGridRefField.pattern', 'en-GB')
37
38
  )
38
39
  }
39
40
  ]
@@ -42,8 +43,23 @@ export class OsGridRefField extends LocationFieldBase {
42
43
  /**
43
44
  * Static version of getAllPossibleErrors that doesn't require a component instance.
44
45
  */
45
- static getAllPossibleErrors() {
46
- const instance = Object.create(OsGridRefField.prototype) as OsGridRefField
47
- return instance.getAllPossibleErrors()
46
+ static getAllPossibleErrors(): ErrorMessageTemplateList {
47
+ return {
48
+ baseErrors: [
49
+ {
50
+ type: 'required',
51
+ template: createLowerFirstExpression(
52
+ t('components.osGridRefField.required', 'en-GB')
53
+ )
54
+ },
55
+ {
56
+ type: 'pattern',
57
+ template: createLowerFirstExpression(
58
+ t('components.osGridRefField.pattern', 'en-GB')
59
+ )
60
+ }
61
+ ],
62
+ advancedSettingsErrors: []
63
+ }
48
64
  }
49
65
  }