@defra/forms-engine-plugin 5.0.0-alpha.1 → 5.0.0-alpha.11

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 (301) hide show
  1. package/.public/javascripts/application.min.js +1 -1
  2. package/.public/javascripts/application.min.js.LICENSE.txt +7 -0
  3. package/.public/javascripts/application.min.js.map +1 -1
  4. package/.public/javascripts/shared.min.js +1 -1
  5. package/.public/javascripts/shared.min.js.LICENSE.txt +7 -0
  6. package/.public/javascripts/shared.min.js.map +1 -1
  7. package/.public/stylesheets/application.min.css.map +1 -1
  8. package/.server/client/javascripts/file-upload.js +6 -3
  9. package/.server/client/javascripts/file-upload.js.map +1 -1
  10. package/.server/client/javascripts/geospatial-map.js +10 -31
  11. package/.server/client/javascripts/geospatial-map.js.map +1 -1
  12. package/.server/client/javascripts/govuk.js +2 -1
  13. package/.server/client/javascripts/govuk.js.map +1 -1
  14. package/.server/client/javascripts/location-map.js +11 -2
  15. package/.server/client/javascripts/location-map.js.map +1 -1
  16. package/.server/client/javascripts/map.d.ts +6 -0
  17. package/.server/client/javascripts/map.js +37 -0
  18. package/.server/client/javascripts/map.js.map +1 -1
  19. package/.server/client/javascripts/maps.d.ts +5 -0
  20. package/.server/client/javascripts/maps.js +6 -0
  21. package/.server/client/javascripts/maps.js.map +1 -0
  22. package/.server/client/javascripts/shared.d.ts +1 -3
  23. package/.server/client/javascripts/shared.js +1 -3
  24. package/.server/client/javascripts/shared.js.map +1 -1
  25. package/.server/client/javascripts/sssi-dataset.d.ts +18 -20
  26. package/.server/client/javascripts/sssi-dataset.js +37 -39
  27. package/.server/client/javascripts/sssi-dataset.js.map +1 -1
  28. package/.server/client/stylesheets/maps.scss +4 -0
  29. package/.server/client/stylesheets/shared.scss +1 -5
  30. package/.server/server/constants.d.ts +2 -0
  31. package/.server/server/constants.js +2 -0
  32. package/.server/server/constants.js.map +1 -1
  33. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +9 -3
  34. package/.server/server/plugins/engine/components/AutocompleteField.js +12 -0
  35. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  36. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +4 -1
  37. package/.server/server/plugins/engine/components/CheckboxesField.js +13 -0
  38. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  39. package/.server/server/plugins/engine/components/ComponentBase.d.ts +1 -0
  40. package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
  41. package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
  42. package/.server/server/plugins/engine/components/ComponentCollection.js +11 -6
  43. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  44. package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
  45. package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
  46. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  47. package/.server/server/plugins/engine/components/DeclarationField.d.ts +5 -2
  48. package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
  49. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  50. package/.server/server/plugins/engine/components/Details.d.ts +1 -0
  51. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +29 -2
  52. package/.server/server/plugins/engine/components/EastingNorthingField.js +110 -54
  53. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  54. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
  55. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
  56. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  57. package/.server/server/plugins/engine/components/FileUploadField.d.ts +12 -0
  58. package/.server/server/plugins/engine/components/FileUploadField.js +23 -3
  59. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  60. package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
  61. package/.server/server/plugins/engine/components/FormComponent.js +5 -2
  62. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  63. package/.server/server/plugins/engine/components/GeospatialField.d.ts +1 -0
  64. package/.server/server/plugins/engine/components/GeospatialField.js +1 -1
  65. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  66. package/.server/server/plugins/engine/components/Html.d.ts +1 -0
  67. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
  68. package/.server/server/plugins/engine/components/LatLongField.d.ts +28 -2
  69. package/.server/server/plugins/engine/components/LatLongField.js +85 -48
  70. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  71. package/.server/server/plugins/engine/components/List.d.ts +1 -0
  72. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +1 -0
  73. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
  74. package/.server/server/plugins/engine/components/LocationFieldBase.js +18 -5
  75. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  76. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +8 -3
  77. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +13 -12
  78. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  79. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
  80. package/.server/server/plugins/engine/components/Markdown.js +1 -1
  81. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  82. package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
  83. package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
  84. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  85. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
  86. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  87. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
  88. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  89. package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
  90. package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
  91. package/.server/server/plugins/engine/components/NumberField.js +16 -0
  92. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  93. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +2 -1
  94. package/.server/server/plugins/engine/components/OsGridRefField.js +4 -3
  95. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  96. package/.server/server/plugins/engine/components/PaymentField.d.ts +3 -0
  97. package/.server/server/plugins/engine/components/PaymentField.js +17 -6
  98. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  99. package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
  100. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
  101. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
  102. package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
  103. package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
  104. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  105. package/.server/server/plugins/engine/components/YesNoField.d.ts +5 -2
  106. package/.server/server/plugins/engine/components/YesNoField.js +17 -8
  107. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  108. package/.server/server/plugins/engine/components/helpers/components.js +1 -2
  109. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  110. package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +3 -1
  111. package/.server/server/plugins/engine/components/helpers/geospatial.js +32 -0
  112. package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
  113. package/.server/server/plugins/engine/components/helpers/index.d.ts +7 -0
  114. package/.server/server/plugins/engine/components/helpers/index.js +13 -1
  115. package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
  116. package/.server/server/plugins/engine/components/types.d.ts +1 -0
  117. package/.server/server/plugins/engine/components/types.js.map +1 -1
  118. package/.server/server/plugins/engine/helpers.d.ts +22 -2
  119. package/.server/server/plugins/engine/helpers.js +44 -5
  120. package/.server/server/plugins/engine/helpers.js.map +1 -1
  121. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +3 -0
  122. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +10 -7
  123. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
  124. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
  125. package/.server/server/plugins/engine/i18n/createFormTranslator.js +33 -4
  126. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
  127. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
  128. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
  129. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
  130. package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
  131. package/.server/server/plugins/engine/i18n/form.js +35 -0
  132. package/.server/server/plugins/engine/i18n/form.js.map +1 -0
  133. package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
  134. package/.server/server/plugins/engine/i18n/languages.js +19 -0
  135. package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
  136. package/.server/server/plugins/engine/i18n/translations/cy.json +85 -8
  137. package/.server/server/plugins/engine/i18n/translations/en-GB.json +55 -6
  138. package/.server/server/plugins/engine/i18n/types.d.ts +2 -0
  139. package/.server/server/plugins/engine/i18n/types.js.map +1 -1
  140. package/.server/server/plugins/engine/index.d.ts +4 -0
  141. package/.server/server/plugins/engine/index.js +4 -0
  142. package/.server/server/plugins/engine/index.js.map +1 -1
  143. package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
  144. package/.server/server/plugins/engine/models/FormModel.js +9 -15
  145. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  146. package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
  147. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  148. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +3 -5
  149. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  150. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  151. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  152. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +2 -0
  153. package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
  154. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  155. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +7 -1
  156. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +56 -10
  157. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  158. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
  159. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +7 -3
  160. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  161. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
  162. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  163. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
  164. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  165. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +1 -1
  166. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +3 -3
  167. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  168. package/.server/server/plugins/engine/pageControllers/validationOptions.js +23 -2
  169. package/.server/server/plugins/engine/pageControllers/validationOptions.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 +5 -0
  173. package/.server/server/plugins/engine/types.js.map +1 -1
  174. package/.server/server/plugins/engine/views/components/_location-field-base.html +2 -1
  175. package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -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/file-upload.html +1 -1
  180. package/.server/server/plugins/engine/views/partials/preview-banner.html +3 -1
  181. package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
  182. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  183. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
  184. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
  185. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
  186. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  187. package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
  188. package/.server/server/plugins/nunjucks/filters/index.js +1 -0
  189. package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
  190. package/.server/server/plugins/payment/helper.d.ts +11 -1
  191. package/.server/server/plugins/payment/helper.js +18 -2
  192. package/.server/server/plugins/payment/helper.js.map +1 -1
  193. package/.server/server/plugins/payment/helper.test.js +2 -1
  194. package/.server/server/plugins/payment/helper.test.js.map +1 -1
  195. package/.server/server/plugins/payment/service.d.ts +2 -1
  196. package/.server/server/plugins/payment/service.js +5 -2
  197. package/.server/server/plugins/payment/service.js.map +1 -1
  198. package/.server/server/plugins/payment/service.test.js +7 -3
  199. package/.server/server/plugins/payment/service.test.js.map +1 -1
  200. package/.server/server/plugins/payment/types.d.ts +4 -0
  201. package/.server/server/plugins/payment/types.js +1 -0
  202. package/.server/server/plugins/payment/types.js.map +1 -1
  203. package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
  204. package/.server/server/plugins/postcode-lookup/models/index.js +87 -33
  205. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  206. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
  207. package/.server/server/plugins/postcode-lookup/routes/index.js +47 -15
  208. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  209. package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
  210. package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
  211. package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
  212. package/.server/server/plugins/postcode-lookup/types.js +6 -1
  213. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  214. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  215. package/.server/server/utils/type-utils.d.ts +1 -2
  216. package/.server/server/utils/type-utils.js +0 -3
  217. package/.server/server/utils/type-utils.js.map +1 -1
  218. package/.server/server/utils/utils.d.ts +6 -0
  219. package/.server/server/utils/utils.js +18 -1
  220. package/.server/server/utils/utils.js.map +1 -1
  221. package/.server/server/utils/utils.test.js +21 -1
  222. package/.server/server/utils/utils.test.js.map +1 -1
  223. package/package.json +9 -2
  224. package/src/client/javascripts/file-upload.js +11 -3
  225. package/src/client/javascripts/geospatial-map.js +7 -34
  226. package/src/client/javascripts/govuk.js +2 -0
  227. package/src/client/javascripts/location-map.js +9 -1
  228. package/src/client/javascripts/map.js +42 -0
  229. package/src/client/javascripts/maps.js +5 -0
  230. package/src/client/javascripts/shared.js +1 -3
  231. package/src/client/javascripts/sssi-dataset.js +39 -41
  232. package/src/client/stylesheets/maps.scss +4 -0
  233. package/src/client/stylesheets/shared.scss +1 -5
  234. package/src/server/constants.js +2 -0
  235. package/src/server/plugins/engine/components/AutocompleteField.ts +13 -0
  236. package/src/server/plugins/engine/components/CheckboxesField.ts +13 -1
  237. package/src/server/plugins/engine/components/ComponentBase.ts +2 -0
  238. package/src/server/plugins/engine/components/ComponentCollection.ts +16 -11
  239. package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
  240. package/src/server/plugins/engine/components/DeclarationField.ts +7 -6
  241. package/src/server/plugins/engine/components/EastingNorthingField.ts +185 -89
  242. package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
  243. package/src/server/plugins/engine/components/FileUploadField.ts +24 -3
  244. package/src/server/plugins/engine/components/FormComponent.ts +6 -5
  245. package/src/server/plugins/engine/components/GeospatialField.ts +6 -1
  246. package/src/server/plugins/engine/components/LatLongField.ts +128 -58
  247. package/src/server/plugins/engine/components/LocationFieldBase.ts +23 -6
  248. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +20 -13
  249. package/src/server/plugins/engine/components/Markdown.ts +2 -3
  250. package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
  251. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
  252. package/src/server/plugins/engine/components/NumberField.ts +21 -1
  253. package/src/server/plugins/engine/components/OsGridRefField.ts +9 -3
  254. package/src/server/plugins/engine/components/PaymentField.ts +15 -5
  255. package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
  256. package/src/server/plugins/engine/components/YesNoField.ts +17 -9
  257. package/src/server/plugins/engine/components/helpers/components.ts +1 -2
  258. package/src/server/plugins/engine/components/helpers/geospatial.ts +53 -0
  259. package/src/server/plugins/engine/components/helpers/index.ts +19 -0
  260. package/src/server/plugins/engine/components/types.ts +1 -0
  261. package/src/server/plugins/engine/helpers.ts +52 -5
  262. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +10 -7
  263. package/src/server/plugins/engine/i18n/createFormTranslator.ts +62 -11
  264. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
  265. package/src/server/plugins/engine/i18n/form.ts +54 -0
  266. package/src/server/plugins/engine/i18n/languages.ts +19 -0
  267. package/src/server/plugins/engine/i18n/translations/cy.json +85 -8
  268. package/src/server/plugins/engine/i18n/translations/en-GB.json +55 -6
  269. package/src/server/plugins/engine/i18n/types.ts +2 -0
  270. package/src/server/plugins/engine/index.ts +7 -0
  271. package/src/server/plugins/engine/models/FormModel.ts +9 -15
  272. package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
  273. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +3 -6
  274. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
  275. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
  276. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +60 -9
  277. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +10 -5
  278. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
  279. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
  280. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +6 -3
  281. package/src/server/plugins/engine/pageControllers/validationOptions.ts +27 -2
  282. package/src/server/plugins/engine/types/schema.ts +1 -0
  283. package/src/server/plugins/engine/types.ts +5 -0
  284. package/src/server/plugins/engine/views/components/_location-field-base.html +2 -1
  285. package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  286. package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  287. package/src/server/plugins/engine/views/components/paymentfield.html +1 -1
  288. package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  289. package/src/server/plugins/engine/views/file-upload.html +1 -1
  290. package/src/server/plugins/engine/views/partials/preview-banner.html +3 -1
  291. package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  292. package/src/server/plugins/nunjucks/filters/index.js +1 -0
  293. package/src/server/plugins/payment/helper.js +22 -2
  294. package/src/server/plugins/payment/service.js +6 -2
  295. package/src/server/plugins/payment/types.js +1 -0
  296. package/src/server/plugins/postcode-lookup/models/index.js +75 -43
  297. package/src/server/plugins/postcode-lookup/routes/index.js +73 -16
  298. package/src/server/plugins/postcode-lookup/types.js +6 -1
  299. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  300. package/src/server/utils/type-utils.ts +1 -11
  301. package/src/server/utils/utils.js +19 -1
@@ -3,6 +3,7 @@ import { StatusCodes } from 'http-status-codes'
3
3
  import Joi from 'joi'
4
4
 
5
5
  import { EXTERNAL_STATE_APPENDAGE } from '../../../constants.js'
6
+ import { getCachedPluginTranslator } from '../../engine/i18n/form.js'
6
7
  import {
7
8
  JOURNEY_BASE_URL,
8
9
  createDetailsPayloadSchema,
@@ -15,6 +16,7 @@ import {
15
16
  steps
16
17
  } from '../models/index.js'
17
18
  import * as service from '../service.js'
19
+ import { resolveLanguage } from '../../../utils/utils.js'
18
20
 
19
21
  const viewName = 'postcode-lookup-details'
20
22
 
@@ -22,7 +24,7 @@ const viewName = 'postcode-lookup-details'
22
24
  * Get the session state associated with this journey
23
25
  * @param {PostcodeLookupRequest} request
24
26
  */
25
- function getSessionState(request) {
27
+ export function getSessionState(request) {
26
28
  /**
27
29
  * @type {PostcodeLookupSessionData | null | undefined}
28
30
  */
@@ -63,6 +65,32 @@ function flashComponentState(request, componentName, address) {
63
65
 
64
66
  request.yar.flash(EXTERNAL_STATE_APPENDAGE, appendage, true)
65
67
  }
68
+ /**
69
+ * Get a cached translator, or create a new one if not in the cache
70
+ * @param {PostcodeLookupRequest} request
71
+ * @param {PostcodeLookupDispatchData} initial
72
+ * @param { string | string[] | undefined } language
73
+ */
74
+ export async function getDispatchTranslator(request, initial, language) {
75
+ const { formId, formStatus } = initial
76
+
77
+ // Override language if passed as a query param
78
+ if (language) {
79
+ request.yar.set('language', language)
80
+ }
81
+
82
+ const typedReq = /** @type {AnyFormRequest} */ (/** @type {any} */ (request))
83
+ const lang = resolveLanguage(typedReq)
84
+
85
+ const translator = await getCachedPluginTranslator(
86
+ typedReq,
87
+ /** @type {FormMetadata} */ ({ id: formId }),
88
+ formStatus,
89
+ lang
90
+ )
91
+
92
+ return translator
93
+ }
66
94
 
67
95
  /**
68
96
  * Initialises and dispatches the request to the postcode lookup journey
@@ -101,15 +129,21 @@ function getRoute() {
101
129
  return {
102
130
  method: 'GET',
103
131
  path: JOURNEY_BASE_URL,
104
- handler(request, h) {
132
+ async handler(request, h) {
105
133
  const { query } = request
106
- const { step } = query
134
+ const { step, language } = query
107
135
  const session = getSessionState(request)
108
136
 
137
+ const translator = await getDispatchTranslator(
138
+ request,
139
+ session.initial,
140
+ language
141
+ )
142
+
109
143
  const model =
110
144
  step === steps.manual
111
- ? manualViewModel(session)
112
- : detailsViewModel(session)
145
+ ? manualViewModel(session, translator)
146
+ : detailsViewModel(session, translator)
113
147
 
114
148
  return h.view(viewName, model)
115
149
  },
@@ -117,7 +151,8 @@ function getRoute() {
117
151
  validate: {
118
152
  query: Joi.object()
119
153
  .keys({
120
- step: Joi.string().allow(steps.details, steps.manual).optional()
154
+ step: Joi.string().allow(steps.details, steps.manual).optional(),
155
+ language: Joi.string().allow('en-GB', 'cy').optional()
121
156
  })
122
157
  .optional()
123
158
  }
@@ -172,7 +207,13 @@ function postRoute(options) {
172
207
  async function detailsPostHandler(request, h, options) {
173
208
  const session = getSessionState(request)
174
209
  const { ordnanceSurveyApiKey: apiKey } = options
175
- const language = session.initial.language ?? 'en-GB'
210
+ const translator = await getDispatchTranslator(
211
+ request,
212
+ session.initial,
213
+ request.query.language
214
+ )
215
+ const language = translator.language
216
+
176
217
  const { value: details, error } = createDetailsPayloadSchema(
177
218
  language
178
219
  ).validate(request.payload)
@@ -180,7 +221,7 @@ async function detailsPostHandler(request, h, options) {
180
221
  let model
181
222
 
182
223
  if (error) {
183
- model = detailsViewModel(session, details, error)
224
+ model = detailsViewModel(session, translator, details, error)
184
225
 
185
226
  return h.view(viewName, model)
186
227
  }
@@ -191,7 +232,7 @@ async function detailsPostHandler(request, h, options) {
191
232
  // Store the updated session
192
233
  request.yar.set(JOURNEY_BASE_URL, session)
193
234
 
194
- model = await selectViewModel({ session, apiKey })
235
+ model = await selectViewModel({ session, apiKey }, translator)
195
236
 
196
237
  return h.view(viewName, model)
197
238
  }
@@ -205,13 +246,23 @@ async function detailsPostHandler(request, h, options) {
205
246
  async function selectPostHandler(request, h, options) {
206
247
  const session = getSessionState(request)
207
248
  const { ordnanceSurveyApiKey: apiKey } = options
208
- const language = session.initial.language ?? 'en-GB'
249
+ const translator = await getDispatchTranslator(
250
+ request,
251
+ session.initial,
252
+ request.query.language
253
+ )
254
+ const language = translator.language
209
255
  const { value: select, error } = createSelectPayloadSchema(language).validate(
210
256
  request.payload
211
257
  )
212
258
 
213
259
  if (error) {
214
- const model = await selectViewModel({ session, apiKey }, select, error)
260
+ const model = await selectViewModel(
261
+ { session, apiKey },
262
+ translator,
263
+ select,
264
+ error
265
+ )
215
266
 
216
267
  return h.view(viewName, model)
217
268
  }
@@ -235,9 +286,14 @@ async function selectPostHandler(request, h, options) {
235
286
  * @param {PostcodeLookupPostRequest} request
236
287
  * @param {ResponseToolkit<PostcodeLookupPostRequestRefs>} h
237
288
  */
238
- function manualPostHandler(request, h) {
289
+ async function manualPostHandler(request, h) {
239
290
  const session = getSessionState(request)
240
- const language = session.initial.language ?? 'en-GB'
291
+ const translator = await getDispatchTranslator(
292
+ request,
293
+ session.initial,
294
+ request.query.language
295
+ )
296
+ const language = translator.language
241
297
 
242
298
  const { value: manual, error } = createManualPayloadSchema(language).validate(
243
299
  request.payload,
@@ -247,7 +303,7 @@ function manualPostHandler(request, h) {
247
303
  )
248
304
 
249
305
  if (error) {
250
- const model = manualViewModel(session, manual, error)
306
+ const model = manualViewModel(session, translator, manual, error)
251
307
 
252
308
  return h.view(viewName, model)
253
309
  }
@@ -261,7 +317,8 @@ function manualPostHandler(request, h) {
261
317
 
262
318
  /**
263
319
  * @import { ResponseToolkit, ServerRoute } from '@hapi/hapi'
264
- * @import { PostcodeLookupManualPayload, PostcodeLookupDetailsPayload, PostcodeLookupSelectPayload, Address, PostcodeLookupGetRequestRefs, PostcodeLookupPostRequestRefs, PostcodeLookupRequest, PostcodeLookupPostRequest, PostcodeLookupConfiguration, PostcodeLookupDispatchData, PostcodeLookupSessionData } from '../types.js'
320
+ * @import { FormMetadata } from '@defra/forms-model'
321
+ * @import { PostcodeLookupManualPayload, Address, PostcodeLookupGetRequestRefs, PostcodeLookupPostRequestRefs, PostcodeLookupRequest, PostcodeLookupPostRequest, PostcodeLookupConfiguration, PostcodeLookupDispatchData, PostcodeLookupSessionData } from '../types.js'
265
322
  * @import { FormRequestPayload, FormResponseToolkit } from '../../../routes/types.js'
266
- * @import { ExternalStateAppendage } from '../../engine/types.js'
323
+ * @import { AnyFormRequest, ExternalStateAppendage } from '../../engine/types.js'
267
324
  */
@@ -14,12 +14,16 @@
14
14
  /**
15
15
  * @typedef {{
16
16
  * sourceUrl: string,
17
+ * formId: string
17
18
  * formName: string
19
+ * formStatus: FormStatus
20
+ * componentId: string
18
21
  * componentName: string
19
22
  * componentTitle: string,
20
23
  * componentHint?: string
21
24
  * step?: string
22
25
  * language?: string
26
+ * languages?: { name: string, code: string}[]
23
27
  * }} PostcodeLookupDispatchData
24
28
  */
25
29
 
@@ -49,6 +53,7 @@
49
53
  * Postcode lookup query params
50
54
  * @typedef {object} PostcodeLookupQuery
51
55
  * @property {string} [step] - step
56
+ * @property {string} [language] - language
52
57
  */
53
58
 
54
59
  /**
@@ -140,5 +145,5 @@
140
145
 
141
146
  /**
142
147
  * @import { Request } from '@hapi/hapi'
143
- * @import { FormPayload } from '../engine/types.js'
148
+ * @import { FormStatus } from '@defra/forms-model'
144
149
  */
@@ -33,7 +33,7 @@
33
33
  <!-- Postcode lookup select -->
34
34
  <!-- Postcode lookup details display -->
35
35
  {%- set detailsHtml -%}
36
- <strong>{{ details.postcodeQuery }}</strong>{% if details.buildingNameQuery %} and <strong>{{ details.buildingNameQuery }}</strong>{% endif %}
36
+ <strong>{{ details.postcodeQuery }}</strong>{% if details.buildingNameQuery %} {{ t('common.and')}} <strong>{{ details.buildingNameQuery }}</strong>{% endif %}
37
37
  {%- endset -%}
38
38
 
39
39
  {% if hasAddresses %}
@@ -72,9 +72,9 @@
72
72
  {{ govukButton(buttons.continueButton) }}
73
73
 
74
74
  {% if buttons.manualLink %}
75
- <p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.manualLink.href }}">{{buttons.manualLink.text}}</a></p>
75
+ <p class="govuk-body">{{ t('common.or')}} <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.manualLink.href }}">{{buttons.manualLink.text}}</a></p>
76
76
  {% elif buttons.detailsLink %}
77
- <p class="govuk-body">or <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.detailsLink.href }}">{{buttons.detailsLink.text}}</a></p>
77
+ <p class="govuk-body">{{ t('common.or')}} <a class="govuk-link govuk-link--no-visited-state" href="{{ buttons.detailsLink.href }}">{{buttons.detailsLink.text}}</a></p>
78
78
  {% endif %}
79
79
  </div>
80
80
  </form>
@@ -1,14 +1,4 @@
1
- import Joi, {
2
- type JoiExpression,
3
- type LanguageMessages,
4
- type LanguageMessagesExt
5
- } from 'joi'
6
-
7
- export function convertToLanguageMessages(
8
- extLanguageMessages: LanguageMessagesExt
9
- ): LanguageMessages {
10
- return extLanguageMessages as unknown as LanguageMessages
11
- }
1
+ import Joi, { type JoiExpression } from 'joi'
12
2
 
13
3
  export function createJoiExpression(expr: string): JoiExpression {
14
4
  return Joi.expression(expr) as unknown as JoiExpression
@@ -44,6 +44,24 @@ export function resolveLanguage(request) {
44
44
  }
45
45
 
46
46
  /**
47
- * @import { FormMetadata } from '@defra/forms-model'
47
+ * Create a comma-separated list with the last seperator being 'or'
48
+ * @param { string[] | undefined } items
49
+ * @param {string} [finalSeparator]
50
+ */
51
+ export function joinWithOr(items, finalSeparator = 'or') {
52
+ if (!items || items.length === 0) {
53
+ return ''
54
+ }
55
+ if (items.length === 1) {
56
+ return items[0]
57
+ }
58
+ if (items.length === 2) {
59
+ return `${items[0]} ${finalSeparator} ${items[1]}`
60
+ }
61
+
62
+ return `${items.slice(0, -1).join(', ')} ${finalSeparator} ${items.at(-1)}`
63
+ }
64
+
65
+ /**
48
66
  * @import { AnyFormRequest } from '../plugins/engine/types.js'
49
67
  */