@defra/forms-engine-plugin 5.0.0-alpha.2 → 5.0.0-alpha.20

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 (339) 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.d.ts +153 -5
  11. package/.server/client/javascripts/geospatial-map.js +157 -77
  12. package/.server/client/javascripts/geospatial-map.js.map +1 -1
  13. package/.server/client/javascripts/govuk.js +2 -1
  14. package/.server/client/javascripts/govuk.js.map +1 -1
  15. package/.server/client/javascripts/location-map.d.ts +44 -0
  16. package/.server/client/javascripts/location-map.js +54 -5
  17. package/.server/client/javascripts/location-map.js.map +1 -1
  18. package/.server/client/javascripts/map-constants.d.ts +3 -0
  19. package/.server/client/javascripts/map-constants.js +4 -0
  20. package/.server/client/javascripts/map-constants.js.map +1 -0
  21. package/.server/client/javascripts/map.d.ts +10 -0
  22. package/.server/client/javascripts/map.js +42 -0
  23. package/.server/client/javascripts/map.js.map +1 -1
  24. package/.server/client/javascripts/maps.d.ts +5 -0
  25. package/.server/client/javascripts/maps.js +6 -0
  26. package/.server/client/javascripts/maps.js.map +1 -0
  27. package/.server/client/javascripts/shared.d.ts +1 -4
  28. package/.server/client/javascripts/shared.js +1 -4
  29. package/.server/client/javascripts/shared.js.map +1 -1
  30. package/.server/client/javascripts/sssi-dataset.d.ts +18 -20
  31. package/.server/client/javascripts/sssi-dataset.js +37 -39
  32. package/.server/client/javascripts/sssi-dataset.js.map +1 -1
  33. package/.server/client/stylesheets/maps.scss +4 -0
  34. package/.server/client/stylesheets/shared.scss +1 -5
  35. package/.server/server/constants.d.ts +2 -0
  36. package/.server/server/constants.js +2 -0
  37. package/.server/server/constants.js.map +1 -1
  38. package/.server/server/plugins/engine/__stubs__/definitions.d.ts +29 -0
  39. package/.server/server/plugins/engine/__stubs__/definitions.js +125 -0
  40. package/.server/server/plugins/engine/__stubs__/definitions.js.map +1 -0
  41. package/.server/server/plugins/engine/components/AutocompleteField.d.ts +9 -3
  42. package/.server/server/plugins/engine/components/AutocompleteField.js +12 -0
  43. package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
  44. package/.server/server/plugins/engine/components/CheckboxesField.d.ts +21 -0
  45. package/.server/server/plugins/engine/components/CheckboxesField.js +30 -5
  46. package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
  47. package/.server/server/plugins/engine/components/ComponentBase.d.ts +1 -0
  48. package/.server/server/plugins/engine/components/ComponentBase.js +2 -0
  49. package/.server/server/plugins/engine/components/ComponentBase.js.map +1 -1
  50. package/.server/server/plugins/engine/components/ComponentCollection.js +11 -6
  51. package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
  52. package/.server/server/plugins/engine/components/DatePartsField.d.ts +6 -3
  53. package/.server/server/plugins/engine/components/DatePartsField.js +12 -7
  54. package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
  55. package/.server/server/plugins/engine/components/DeclarationField.d.ts +5 -2
  56. package/.server/server/plugins/engine/components/DeclarationField.js +6 -4
  57. package/.server/server/plugins/engine/components/DeclarationField.js.map +1 -1
  58. package/.server/server/plugins/engine/components/Details.d.ts +1 -0
  59. package/.server/server/plugins/engine/components/EastingNorthingField.d.ts +33 -2
  60. package/.server/server/plugins/engine/components/EastingNorthingField.js +110 -54
  61. package/.server/server/plugins/engine/components/EastingNorthingField.js.map +1 -1
  62. package/.server/server/plugins/engine/components/EmailAddressField.d.ts +4 -1
  63. package/.server/server/plugins/engine/components/EmailAddressField.js +2 -1
  64. package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
  65. package/.server/server/plugins/engine/components/FileUploadField.d.ts +21 -0
  66. package/.server/server/plugins/engine/components/FileUploadField.js +35 -3
  67. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  68. package/.server/server/plugins/engine/components/FormComponent.d.ts +5 -1
  69. package/.server/server/plugins/engine/components/FormComponent.js +5 -2
  70. package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
  71. package/.server/server/plugins/engine/components/GeospatialField.d.ts +23 -0
  72. package/.server/server/plugins/engine/components/GeospatialField.js +33 -9
  73. package/.server/server/plugins/engine/components/GeospatialField.js.map +1 -1
  74. package/.server/server/plugins/engine/components/Html.d.ts +1 -0
  75. package/.server/server/plugins/engine/components/InsetText.d.ts +1 -0
  76. package/.server/server/plugins/engine/components/LatLongField.d.ts +32 -2
  77. package/.server/server/plugins/engine/components/LatLongField.js +85 -48
  78. package/.server/server/plugins/engine/components/LatLongField.js.map +1 -1
  79. package/.server/server/plugins/engine/components/List.d.ts +1 -0
  80. package/.server/server/plugins/engine/components/ListFormComponent.d.ts +1 -0
  81. package/.server/server/plugins/engine/components/LocationFieldBase.d.ts +8 -2
  82. package/.server/server/plugins/engine/components/LocationFieldBase.js +25 -6
  83. package/.server/server/plugins/engine/components/LocationFieldBase.js.map +1 -1
  84. package/.server/server/plugins/engine/components/LocationFieldHelpers.d.ts +12 -3
  85. package/.server/server/plugins/engine/components/LocationFieldHelpers.js +21 -13
  86. package/.server/server/plugins/engine/components/LocationFieldHelpers.js.map +1 -1
  87. package/.server/server/plugins/engine/components/Markdown.d.ts +1 -0
  88. package/.server/server/plugins/engine/components/Markdown.js +1 -1
  89. package/.server/server/plugins/engine/components/Markdown.js.map +1 -1
  90. package/.server/server/plugins/engine/components/MonthYearField.d.ts +5 -2
  91. package/.server/server/plugins/engine/components/MonthYearField.js +13 -9
  92. package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
  93. package/.server/server/plugins/engine/components/MultilineTextField.d.ts +1 -0
  94. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.d.ts +2 -1
  95. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js +4 -3
  96. package/.server/server/plugins/engine/components/NationalGridFieldNumberField.js.map +1 -1
  97. package/.server/server/plugins/engine/components/NotificationBanner.d.ts +1 -0
  98. package/.server/server/plugins/engine/components/NumberField.d.ts +5 -0
  99. package/.server/server/plugins/engine/components/NumberField.js +16 -0
  100. package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
  101. package/.server/server/plugins/engine/components/OsGridRefField.d.ts +103 -1
  102. package/.server/server/plugins/engine/components/OsGridRefField.js +13 -3
  103. package/.server/server/plugins/engine/components/OsGridRefField.js.map +1 -1
  104. package/.server/server/plugins/engine/components/PaymentField.d.ts +3 -0
  105. package/.server/server/plugins/engine/components/PaymentField.js +17 -6
  106. package/.server/server/plugins/engine/components/PaymentField.js.map +1 -1
  107. package/.server/server/plugins/engine/components/SelectField.d.ts +1 -0
  108. package/.server/server/plugins/engine/components/SelectionControlField.d.ts +1 -0
  109. package/.server/server/plugins/engine/components/TelephoneNumberField.d.ts +1 -0
  110. package/.server/server/plugins/engine/components/UkAddressField.d.ts +1 -0
  111. package/.server/server/plugins/engine/components/UkAddressField.js +23 -8
  112. package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
  113. package/.server/server/plugins/engine/components/YesNoField.d.ts +5 -2
  114. package/.server/server/plugins/engine/components/YesNoField.js +17 -8
  115. package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
  116. package/.server/server/plugins/engine/components/helpers/components.js +3 -3
  117. package/.server/server/plugins/engine/components/helpers/components.js.map +1 -1
  118. package/.server/server/plugins/engine/components/helpers/geospatial.d.ts +8 -1
  119. package/.server/server/plugins/engine/components/helpers/geospatial.js +56 -15
  120. package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
  121. package/.server/server/plugins/engine/components/helpers/index.d.ts +7 -0
  122. package/.server/server/plugins/engine/components/helpers/index.js +13 -1
  123. package/.server/server/plugins/engine/components/helpers/index.js.map +1 -1
  124. package/.server/server/plugins/engine/components/types.d.ts +1 -0
  125. package/.server/server/plugins/engine/components/types.js.map +1 -1
  126. package/.server/server/plugins/engine/errors.d.ts +49 -0
  127. package/.server/server/plugins/engine/errors.js +75 -0
  128. package/.server/server/plugins/engine/errors.js.map +1 -0
  129. package/.server/server/plugins/engine/form-availability.d.ts +3 -2
  130. package/.server/server/plugins/engine/form-availability.js +3 -2
  131. package/.server/server/plugins/engine/form-availability.js.map +1 -1
  132. package/.server/server/plugins/engine/form-context.js +2 -2
  133. package/.server/server/plugins/engine/form-context.js.map +1 -1
  134. package/.server/server/plugins/engine/helpers.d.ts +22 -2
  135. package/.server/server/plugins/engine/helpers.js +44 -5
  136. package/.server/server/plugins/engine/helpers.js.map +1 -1
  137. package/.server/server/plugins/engine/i18n/buildValidationMessages.d.ts +4 -1
  138. package/.server/server/plugins/engine/i18n/buildValidationMessages.js +31 -7
  139. package/.server/server/plugins/engine/i18n/buildValidationMessages.js.map +1 -1
  140. package/.server/server/plugins/engine/i18n/createFormTranslator.d.ts +4 -4
  141. package/.server/server/plugins/engine/i18n/createFormTranslator.js +33 -4
  142. package/.server/server/plugins/engine/i18n/createFormTranslator.js.map +1 -1
  143. package/.server/server/plugins/engine/i18n/extractBaseTranslations.d.ts +1 -1
  144. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js +9 -0
  145. package/.server/server/plugins/engine/i18n/extractBaseTranslations.js.map +1 -1
  146. package/.server/server/plugins/engine/i18n/form.d.ts +13 -0
  147. package/.server/server/plugins/engine/i18n/form.js +35 -0
  148. package/.server/server/plugins/engine/i18n/form.js.map +1 -0
  149. package/.server/server/plugins/engine/i18n/languages.d.ts +10 -0
  150. package/.server/server/plugins/engine/i18n/languages.js +19 -0
  151. package/.server/server/plugins/engine/i18n/languages.js.map +1 -0
  152. package/.server/server/plugins/engine/i18n/translations/cy.json +192 -9
  153. package/.server/server/plugins/engine/i18n/translations/en-GB.json +125 -7
  154. package/.server/server/plugins/engine/i18n/types.d.ts +3 -0
  155. package/.server/server/plugins/engine/i18n/types.js.map +1 -1
  156. package/.server/server/plugins/engine/index.d.ts +4 -0
  157. package/.server/server/plugins/engine/index.js +4 -0
  158. package/.server/server/plugins/engine/index.js.map +1 -1
  159. package/.server/server/plugins/engine/models/FormModel.d.ts +0 -4
  160. package/.server/server/plugins/engine/models/FormModel.js +19 -17
  161. package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
  162. package/.server/server/plugins/engine/models/SummaryViewModel.js +9 -4
  163. package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
  164. package/.server/server/plugins/engine/models/unavailable-view-model.d.ts +11 -2
  165. package/.server/server/plugins/engine/models/unavailable-view-model.js +23 -4
  166. package/.server/server/plugins/engine/models/unavailable-view-model.js.map +1 -1
  167. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +3 -5
  168. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  169. package/.server/server/plugins/engine/outputFormatters/human/v1.js +2 -1
  170. package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
  171. package/.server/server/plugins/engine/outputFormatters/machine/v2.d.ts +2 -0
  172. package/.server/server/plugins/engine/outputFormatters/machine/v2.js +2 -0
  173. package/.server/server/plugins/engine/outputFormatters/machine/v2.js.map +1 -1
  174. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.d.ts +7 -1
  175. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js +56 -10
  176. package/.server/server/plugins/engine/pageControllers/FileUploadPageController.js.map +1 -1
  177. package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +1 -1
  178. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +7 -3
  179. package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
  180. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js +3 -4
  181. package/.server/server/plugins/engine/pageControllers/RepeatPageController.js.map +1 -1
  182. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +10 -4
  183. package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
  184. package/.server/server/plugins/engine/pageControllers/helpers/pages.js +2 -1
  185. package/.server/server/plugins/engine/pageControllers/helpers/pages.js.map +1 -1
  186. package/.server/server/plugins/engine/pageControllers/helpers/submission.d.ts +1 -1
  187. package/.server/server/plugins/engine/pageControllers/helpers/submission.js +3 -3
  188. package/.server/server/plugins/engine/pageControllers/helpers/submission.js.map +1 -1
  189. package/.server/server/plugins/engine/pageControllers/validationOptions.d.ts +1 -1
  190. package/.server/server/plugins/engine/pageControllers/validationOptions.js +24 -3
  191. package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
  192. package/.server/server/plugins/engine/types/schema.js +1 -0
  193. package/.server/server/plugins/engine/types/schema.js.map +1 -1
  194. package/.server/server/plugins/engine/types.d.ts +5 -0
  195. package/.server/server/plugins/engine/types.js.map +1 -1
  196. package/.server/server/plugins/engine/unavailable-response.js +5 -2
  197. package/.server/server/plugins/engine/unavailable-response.js.map +1 -1
  198. package/.server/server/plugins/engine/views/components/_location-field-base.html +4 -2
  199. package/.server/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  200. package/.server/server/plugins/engine/views/components/geospatialfield.html +1 -0
  201. package/.server/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  202. package/.server/server/plugins/engine/views/components/osgridreffield.html +4 -1
  203. package/.server/server/plugins/engine/views/components/paymentfield.html +1 -1
  204. package/.server/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  205. package/.server/server/plugins/engine/views/file-upload.html +1 -1
  206. package/.server/server/plugins/engine/views/partials/preview-banner.html +3 -1
  207. package/.server/server/plugins/engine/views/unavailable.html +14 -11
  208. package/.server/server/plugins/nunjucks/filters/applyUrlParam.d.ts +9 -0
  209. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  210. package/.server/server/plugins/nunjucks/filters/applyUrlParam.js.map +1 -0
  211. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js +17 -0
  212. package/.server/server/plugins/nunjucks/filters/applyUrlParam.test.js.map +1 -0
  213. package/.server/server/plugins/nunjucks/filters/field.d.ts +1 -1
  214. package/.server/server/plugins/nunjucks/filters/index.d.ts +1 -0
  215. package/.server/server/plugins/nunjucks/filters/index.js +1 -0
  216. package/.server/server/plugins/nunjucks/filters/index.js.map +1 -1
  217. package/.server/server/plugins/payment/helper.d.ts +11 -1
  218. package/.server/server/plugins/payment/helper.js +18 -2
  219. package/.server/server/plugins/payment/helper.js.map +1 -1
  220. package/.server/server/plugins/payment/helper.test.js +2 -1
  221. package/.server/server/plugins/payment/helper.test.js.map +1 -1
  222. package/.server/server/plugins/payment/service.d.ts +2 -1
  223. package/.server/server/plugins/payment/service.js +5 -2
  224. package/.server/server/plugins/payment/service.js.map +1 -1
  225. package/.server/server/plugins/payment/service.test.js +7 -3
  226. package/.server/server/plugins/payment/service.test.js.map +1 -1
  227. package/.server/server/plugins/payment/types.d.ts +4 -0
  228. package/.server/server/plugins/payment/types.js +1 -0
  229. package/.server/server/plugins/payment/types.js.map +1 -1
  230. package/.server/server/plugins/postcode-lookup/models/index.d.ts +249 -3
  231. package/.server/server/plugins/postcode-lookup/models/index.js +87 -33
  232. package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
  233. package/.server/server/plugins/postcode-lookup/routes/index.d.ts +15 -1
  234. package/.server/server/plugins/postcode-lookup/routes/index.js +47 -15
  235. package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
  236. package/.server/server/plugins/postcode-lookup/routes/index.test.js +84 -0
  237. package/.server/server/plugins/postcode-lookup/routes/index.test.js.map +1 -0
  238. package/.server/server/plugins/postcode-lookup/types.d.ts +12 -0
  239. package/.server/server/plugins/postcode-lookup/types.js +6 -1
  240. package/.server/server/plugins/postcode-lookup/types.js.map +1 -1
  241. package/.server/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  242. package/.server/server/utils/type-utils.d.ts +1 -2
  243. package/.server/server/utils/type-utils.js +0 -3
  244. package/.server/server/utils/type-utils.js.map +1 -1
  245. package/.server/server/utils/utils.d.ts +6 -0
  246. package/.server/server/utils/utils.js +18 -1
  247. package/.server/server/utils/utils.js.map +1 -1
  248. package/.server/server/utils/utils.test.js +21 -1
  249. package/.server/server/utils/utils.test.js.map +1 -1
  250. package/package.json +20 -5
  251. package/src/client/javascripts/file-upload.js +11 -3
  252. package/src/client/javascripts/geospatial-map.js +176 -81
  253. package/src/client/javascripts/govuk.js +2 -0
  254. package/src/client/javascripts/location-map.js +60 -4
  255. package/src/client/javascripts/map-constants.js +3 -0
  256. package/src/client/javascripts/map.js +47 -0
  257. package/src/client/javascripts/maps.js +5 -0
  258. package/src/client/javascripts/shared.js +1 -4
  259. package/src/client/javascripts/sssi-dataset.js +39 -41
  260. package/src/client/stylesheets/maps.scss +4 -0
  261. package/src/client/stylesheets/shared.scss +1 -5
  262. package/src/server/constants.js +2 -0
  263. package/src/server/plugins/engine/__stubs__/definitions.ts +155 -0
  264. package/src/server/plugins/engine/components/AutocompleteField.ts +13 -0
  265. package/src/server/plugins/engine/components/CheckboxesField.ts +38 -5
  266. package/src/server/plugins/engine/components/ComponentBase.ts +2 -0
  267. package/src/server/plugins/engine/components/ComponentCollection.ts +16 -11
  268. package/src/server/plugins/engine/components/DatePartsField.ts +20 -9
  269. package/src/server/plugins/engine/components/DeclarationField.ts +7 -6
  270. package/src/server/plugins/engine/components/EastingNorthingField.ts +185 -89
  271. package/src/server/plugins/engine/components/EmailAddressField.ts +2 -1
  272. package/src/server/plugins/engine/components/FileUploadField.ts +44 -3
  273. package/src/server/plugins/engine/components/FormComponent.ts +6 -5
  274. package/src/server/plugins/engine/components/GeospatialField.ts +47 -9
  275. package/src/server/plugins/engine/components/LatLongField.ts +128 -58
  276. package/src/server/plugins/engine/components/LocationFieldBase.ts +30 -7
  277. package/src/server/plugins/engine/components/LocationFieldHelpers.ts +28 -14
  278. package/src/server/plugins/engine/components/Markdown.ts +2 -3
  279. package/src/server/plugins/engine/components/MonthYearField.ts +20 -15
  280. package/src/server/plugins/engine/components/NationalGridFieldNumberField.ts +9 -3
  281. package/src/server/plugins/engine/components/NumberField.ts +21 -1
  282. package/src/server/plugins/engine/components/OsGridRefField.ts +22 -3
  283. package/src/server/plugins/engine/components/PaymentField.ts +15 -5
  284. package/src/server/plugins/engine/components/UkAddressField.ts +30 -7
  285. package/src/server/plugins/engine/components/YesNoField.ts +17 -9
  286. package/src/server/plugins/engine/components/helpers/components.ts +3 -3
  287. package/src/server/plugins/engine/components/helpers/geospatial.ts +84 -21
  288. package/src/server/plugins/engine/components/helpers/index.ts +19 -0
  289. package/src/server/plugins/engine/components/types.ts +1 -0
  290. package/src/server/plugins/engine/errors.ts +78 -0
  291. package/src/server/plugins/engine/form-availability.ts +8 -2
  292. package/src/server/plugins/engine/form-context.ts +4 -2
  293. package/src/server/plugins/engine/helpers.ts +52 -5
  294. package/src/server/plugins/engine/i18n/buildValidationMessages.ts +16 -8
  295. package/src/server/plugins/engine/i18n/createFormTranslator.ts +62 -11
  296. package/src/server/plugins/engine/i18n/extractBaseTranslations.ts +7 -1
  297. package/src/server/plugins/engine/i18n/form.ts +54 -0
  298. package/src/server/plugins/engine/i18n/languages.ts +19 -0
  299. package/src/server/plugins/engine/i18n/translations/cy.json +192 -9
  300. package/src/server/plugins/engine/i18n/translations/en-GB.json +125 -7
  301. package/src/server/plugins/engine/i18n/types.ts +3 -0
  302. package/src/server/plugins/engine/index.ts +7 -0
  303. package/src/server/plugins/engine/models/FormModel.ts +21 -17
  304. package/src/server/plugins/engine/models/SummaryViewModel.ts +6 -5
  305. package/src/server/plugins/engine/models/unavailable-view-model.ts +26 -5
  306. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +3 -6
  307. package/src/server/plugins/engine/outputFormatters/human/v1.ts +2 -1
  308. package/src/server/plugins/engine/outputFormatters/machine/v2.ts +3 -0
  309. package/src/server/plugins/engine/pageControllers/FileUploadPageController.ts +60 -9
  310. package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +10 -5
  311. package/src/server/plugins/engine/pageControllers/RepeatPageController.ts +2 -2
  312. package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +15 -4
  313. package/src/server/plugins/engine/pageControllers/helpers/pages.ts +2 -1
  314. package/src/server/plugins/engine/pageControllers/helpers/submission.ts +6 -3
  315. package/src/server/plugins/engine/pageControllers/validationOptions.ts +29 -4
  316. package/src/server/plugins/engine/types/schema.ts +1 -0
  317. package/src/server/plugins/engine/types.ts +5 -0
  318. package/src/server/plugins/engine/unavailable-response.ts +6 -2
  319. package/src/server/plugins/engine/views/components/_location-field-base.html +4 -2
  320. package/src/server/plugins/engine/views/components/fileuploadfield.html +1 -1
  321. package/src/server/plugins/engine/views/components/geospatialfield.html +1 -0
  322. package/src/server/plugins/engine/views/components/multilinetextfield.html +12 -1
  323. package/src/server/plugins/engine/views/components/osgridreffield.html +4 -1
  324. package/src/server/plugins/engine/views/components/paymentfield.html +1 -1
  325. package/src/server/plugins/engine/views/components/ukaddressfield.html +1 -1
  326. package/src/server/plugins/engine/views/file-upload.html +1 -1
  327. package/src/server/plugins/engine/views/partials/preview-banner.html +3 -1
  328. package/src/server/plugins/engine/views/unavailable.html +14 -11
  329. package/src/server/plugins/nunjucks/filters/applyUrlParam.js +17 -0
  330. package/src/server/plugins/nunjucks/filters/index.js +1 -0
  331. package/src/server/plugins/payment/helper.js +22 -2
  332. package/src/server/plugins/payment/service.js +6 -2
  333. package/src/server/plugins/payment/types.js +1 -0
  334. package/src/server/plugins/postcode-lookup/models/index.js +75 -43
  335. package/src/server/plugins/postcode-lookup/routes/index.js +73 -16
  336. package/src/server/plugins/postcode-lookup/types.js +6 -1
  337. package/src/server/plugins/postcode-lookup/views/postcode-lookup-details.html +3 -3
  338. package/src/server/utils/type-utils.ts +1 -11
  339. package/src/server/utils/utils.js +19 -1
@@ -19,17 +19,86 @@ export function createManualPayloadSchema(language?: string): Joi.ObjectSchema<P
19
19
  /**
20
20
  * The postcode lookup details form view model
21
21
  * @param {PostcodeLookupSessionData} data
22
+ * @param {Translator} translator
22
23
  * @param {PostcodeLookupDetailsData} [payload]
23
24
  * @param {Error} [err]
24
25
  */
25
- export function detailsViewModel(data: PostcodeLookupSessionData, payload?: PostcodeLookupDetailsData, err?: Error): {
26
+ export function detailsViewModel(data: PostcodeLookupSessionData, translator: Translator, payload?: PostcodeLookupDetailsData, err?: Error): {
27
+ languages: {
28
+ name: string;
29
+ code: string;
30
+ }[];
26
31
  step: string;
27
32
  showTitle: boolean;
28
33
  name: string;
29
34
  serviceUrl: string;
30
35
  pageTitle: string;
36
+ hint: "" | {
37
+ text: string;
38
+ } | undefined;
39
+ backLink: {
40
+ href: string;
41
+ text: string;
42
+ };
43
+ errors: {
44
+ text: string;
45
+ href: string;
46
+ }[] | undefined;
47
+ fields: {
48
+ postcodeQuery: {
49
+ id: string;
50
+ name: string;
51
+ label: {
52
+ text: string;
53
+ };
54
+ hint: {
55
+ text: string;
56
+ };
57
+ value: string | undefined;
58
+ errorMessage: {
59
+ text: string;
60
+ } | undefined;
61
+ };
62
+ buildingNameQuery: {
63
+ id: string;
64
+ name: string;
65
+ label: {
66
+ text: string;
67
+ };
68
+ hint: {
69
+ text: string;
70
+ };
71
+ value: string | undefined;
72
+ errorMessage: {
73
+ text: string;
74
+ } | undefined;
75
+ };
76
+ };
77
+ buttons: {
78
+ continueButton: {
79
+ text: string;
80
+ classes: string;
81
+ };
82
+ manualLink: {
83
+ text: string;
84
+ href: string;
85
+ };
86
+ };
87
+ t: (key: string, opts?: Record<string, unknown>) => string;
88
+ language: string;
89
+ } | {
90
+ languages?: undefined;
91
+ step: string;
92
+ showTitle: boolean;
93
+ name: string;
94
+ serviceUrl: string;
95
+ pageTitle: string;
96
+ hint: "" | {
97
+ text: string;
98
+ } | undefined;
31
99
  backLink: {
32
100
  href: string;
101
+ text: string;
33
102
  };
34
103
  errors: {
35
104
  text: string;
@@ -75,17 +144,93 @@ export function detailsViewModel(data: PostcodeLookupSessionData, payload?: Post
75
144
  href: string;
76
145
  };
77
146
  };
147
+ t: (key: string, opts?: Record<string, unknown>) => string;
148
+ language: string;
78
149
  };
79
150
  /**
80
151
  * The postcode lookup select form view model
81
152
  * @param {{ session: PostcodeLookupSessionData, apiKey: string }} data
153
+ * @param {Translator} translator
82
154
  * @param {PostcodeLookupSelectPayload} [payload]
83
155
  * @param {Error} [err]
84
156
  */
85
157
  export function selectViewModel(data: {
86
158
  session: PostcodeLookupSessionData;
87
159
  apiKey: string;
88
- }, payload?: PostcodeLookupSelectPayload, err?: Error): Promise<{
160
+ }, translator: Translator, payload?: PostcodeLookupSelectPayload, err?: Error): Promise<{
161
+ languages: {
162
+ name: string;
163
+ code: string;
164
+ }[];
165
+ step: string;
166
+ showTitle: boolean;
167
+ name: string;
168
+ serviceUrl: string;
169
+ pageTitle: string;
170
+ backLink: {
171
+ href: string;
172
+ text: string;
173
+ };
174
+ errors: {
175
+ text: string;
176
+ href: string;
177
+ }[] | undefined;
178
+ searchAgainLink: {
179
+ text: string;
180
+ href: string;
181
+ };
182
+ fields: {
183
+ postcodeQuery: {
184
+ id: string;
185
+ name: string;
186
+ type: string;
187
+ value: string;
188
+ };
189
+ buildingNameQuery: {
190
+ id: string;
191
+ name: string;
192
+ type: string;
193
+ value: string;
194
+ };
195
+ uprn: {
196
+ id: string;
197
+ name: string;
198
+ label: {
199
+ text: string;
200
+ } | undefined;
201
+ value: string | undefined;
202
+ errorMessage: {
203
+ text: string;
204
+ } | undefined;
205
+ items: {
206
+ text: string;
207
+ value: string;
208
+ }[] | undefined;
209
+ type: string | undefined;
210
+ };
211
+ };
212
+ details: PostcodeLookupDetailsData;
213
+ addressCount: number;
214
+ singleAddress: Address | undefined;
215
+ hasAddresses: boolean;
216
+ hasMultipleAddresses: boolean;
217
+ addressesFoundText: string | undefined;
218
+ noAddressFoundText: string | undefined;
219
+ buttons: {
220
+ continueButton: {
221
+ href: string | undefined;
222
+ text: string;
223
+ classes: string;
224
+ };
225
+ manualLink: {
226
+ text: string;
227
+ href: string;
228
+ };
229
+ };
230
+ t: (key: string, opts?: Record<string, unknown>) => string;
231
+ language: string;
232
+ } | {
233
+ languages?: undefined;
89
234
  step: string;
90
235
  showTitle: boolean;
91
236
  name: string;
@@ -93,6 +238,7 @@ export function selectViewModel(data: {
93
238
  pageTitle: string;
94
239
  backLink: {
95
240
  href: string;
241
+ text: string;
96
242
  };
97
243
  errors: {
98
244
  text: string;
@@ -150,14 +296,110 @@ export function selectViewModel(data: {
150
296
  href: string;
151
297
  };
152
298
  };
299
+ t: (key: string, opts?: Record<string, unknown>) => string;
300
+ language: string;
153
301
  }>;
154
302
  /**
155
303
  * The postcode lookup manual form view model
156
304
  * @param {PostcodeLookupSessionData} data
305
+ * @param {Translator} translator
157
306
  * @param {PostcodeLookupManualPayload} [payload]
158
307
  * @param {Error} [err]
159
308
  */
160
- export function manualViewModel(data: PostcodeLookupSessionData, payload?: PostcodeLookupManualPayload, err?: Error): {
309
+ export function manualViewModel(data: PostcodeLookupSessionData, translator: Translator, payload?: PostcodeLookupManualPayload, err?: Error): {
310
+ languages: {
311
+ name: string;
312
+ code: string;
313
+ }[];
314
+ step: string;
315
+ showTitle: boolean;
316
+ name: string;
317
+ serviceUrl: string;
318
+ pageTitle: string;
319
+ backLink: {
320
+ href: string;
321
+ text: string;
322
+ };
323
+ errors: {
324
+ text: string;
325
+ href: string;
326
+ }[] | undefined;
327
+ hint: "" | {
328
+ text: string;
329
+ } | undefined;
330
+ fields: {
331
+ addressLine1: {
332
+ id: string;
333
+ name: string;
334
+ label: {
335
+ text: string;
336
+ };
337
+ value: string | undefined;
338
+ errorMessage: {
339
+ text: string;
340
+ } | undefined;
341
+ };
342
+ addressLine2: {
343
+ id: string;
344
+ name: string;
345
+ label: {
346
+ text: string;
347
+ };
348
+ value: string | undefined;
349
+ errorMessage: {
350
+ text: string;
351
+ } | undefined;
352
+ };
353
+ town: {
354
+ id: string;
355
+ name: string;
356
+ label: {
357
+ text: string;
358
+ };
359
+ classes: string;
360
+ value: string | undefined;
361
+ errorMessage: {
362
+ text: string;
363
+ } | undefined;
364
+ };
365
+ county: {
366
+ id: string;
367
+ name: string;
368
+ label: {
369
+ text: string;
370
+ };
371
+ value: string | undefined;
372
+ errorMessage: {
373
+ text: string;
374
+ } | undefined;
375
+ };
376
+ postcode: {
377
+ id: string;
378
+ name: string;
379
+ label: {
380
+ text: string;
381
+ };
382
+ classes: string;
383
+ value: string | undefined;
384
+ errorMessage: {
385
+ text: string;
386
+ } | undefined;
387
+ };
388
+ };
389
+ buttons: {
390
+ continueButton: {
391
+ text: string;
392
+ classes: string;
393
+ };
394
+ detailsLink: {
395
+ text: string;
396
+ href: string;
397
+ };
398
+ };
399
+ t: (key: string, opts?: Record<string, unknown>) => string;
400
+ language: string;
401
+ } | {
402
+ languages?: undefined;
161
403
  step: string;
162
404
  showTitle: boolean;
163
405
  name: string;
@@ -165,6 +407,7 @@ export function manualViewModel(data: PostcodeLookupSessionData, payload?: Postc
165
407
  pageTitle: string;
166
408
  backLink: {
167
409
  href: string;
410
+ text: string;
168
411
  };
169
412
  errors: {
170
413
  text: string;
@@ -242,6 +485,8 @@ export function manualViewModel(data: PostcodeLookupSessionData, payload?: Postc
242
485
  href: string;
243
486
  };
244
487
  };
488
+ t: (key: string, opts?: Record<string, unknown>) => string;
489
+ language: string;
245
490
  };
246
491
  export namespace steps {
247
492
  let details: string;
@@ -256,5 +501,6 @@ import Joi from 'joi';
256
501
  import type { PostcodeLookupSelectPayload } from '../../../../server/plugins/postcode-lookup/types.js';
257
502
  import type { PostcodeLookupManualPayload } from '../../../../server/plugins/postcode-lookup/types.js';
258
503
  import type { PostcodeLookupSessionData } from '../../../../server/plugins/postcode-lookup/types.js';
504
+ import type { Translator } from '../../../../server/plugins/engine/i18n/types.js';
259
505
  import type { PostcodeLookupDetailsData } from '../../../../server/plugins/postcode-lookup/types.js';
260
506
  import type { Address } from '../../../../server/plugins/postcode-lookup/types.js';
@@ -13,6 +13,7 @@ const townFieldName = 'town';
13
13
  const countyFieldName = 'county';
14
14
  const postcodeFieldName = 'postcode';
15
15
  const GOVUK_MARGIN_RIGHT_1 = 'govuk-!-margin-right-1';
16
+ const COMMON_BACK = 'common.back';
16
17
  export const steps = {
17
18
  // Step 1: Postcode/building name input
18
19
  details: 'details',
@@ -338,56 +339,77 @@ function getHref(step) {
338
339
  /**
339
340
  * The postcode lookup details form view model
340
341
  * @param {PostcodeLookupSessionData} data
342
+ * @param {Translator} translator
341
343
  * @param {PostcodeLookupDetailsData} [payload]
342
344
  * @param {Error} [err]
343
345
  */
344
- export function detailsViewModel(data, payload, err) {
346
+ export function detailsViewModel(data, translator, payload, err) {
345
347
  const {
346
- componentTitle: pageTitle,
347
- formName,
348
+ componentId,
349
+ componentHint,
348
350
  sourceUrl,
349
- language = 'en-GB'
351
+ languages
350
352
  } = data.initial;
353
+ const {
354
+ t,
355
+ tComponent,
356
+ tForm
357
+ } = translator;
358
+ const component = /** @type {ComponentDef} */{
359
+ id: componentId
360
+ };
351
361
  const backLink = {
352
- href: sourceUrl
362
+ href: sourceUrl,
363
+ text: t(COMMON_BACK)
353
364
  };
354
365
  const {
355
366
  errors,
356
367
  postcodeQueryError,
357
368
  buildingNameQueryError
358
369
  } = buildErrors(err);
359
- const fields = getDetailsFields(payload ?? data.details, postcodeQueryError, buildingNameQueryError, language);
370
+ const fields = getDetailsFields(payload ?? data.details, postcodeQueryError, buildingNameQueryError, translator.language);
371
+ const hint = componentHint && {
372
+ text: tComponent(component, 'hint')
373
+ };
360
374
  const continueButton = {
361
- text: i18nT('postcodeLookup.findAddress', language),
375
+ text: t('postcodeLookup.findAddress'),
362
376
  classes: GOVUK_MARGIN_RIGHT_1
363
377
  };
364
378
  const manualLink = {
365
- text: i18nT('postcodeLookup.enterManually', language),
379
+ text: t('postcodeLookup.enterManually'),
366
380
  href: getHref(steps.manual)
367
381
  };
382
+ const selector = languages?.length ? {
383
+ languages
384
+ } : {};
368
385
  return {
369
386
  step: steps.details,
370
387
  showTitle: true,
371
- name: formName,
388
+ name: tForm('title'),
372
389
  serviceUrl: sourceUrl,
373
- pageTitle,
390
+ pageTitle: tComponent(component, 'title'),
391
+ hint,
374
392
  backLink,
375
393
  errors,
376
394
  fields,
377
395
  buttons: {
378
396
  continueButton,
379
397
  manualLink
380
- }
398
+ },
399
+ t,
400
+ language: translator.language,
401
+ ...selector
381
402
  };
382
403
  }
383
404
 
384
405
  /**
385
406
  * The postcode lookup select form view model
386
407
  * @param {{ session: PostcodeLookupSessionData, apiKey: string }} data
408
+ * @param {Translator} translator
387
409
  * @param {PostcodeLookupSelectPayload} [payload]
388
410
  * @param {Error} [err]
389
411
  */
390
- export async function selectViewModel(data, payload, err) {
412
+ export async function selectViewModel(data, translator, payload, err) {
391
413
  const {
392
414
  session,
393
415
  apiKey
@@ -400,7 +422,12 @@ export async function selectViewModel(data, payload, err) {
400
422
  postcodeQuery,
401
423
  buildingNameQuery
402
424
  } = details;
403
- const language = initial.language ?? 'en-GB';
425
+ const {
426
+ language,
427
+ t,
428
+ tComponent,
429
+ tForm
430
+ } = translator;
404
431
  const {
405
432
  hasAddresses,
406
433
  hasMultipleAddresses,
@@ -408,39 +435,45 @@ export async function selectViewModel(data, payload, err) {
408
435
  addresses,
409
436
  addressCount
410
437
  } = await getAddresses(postcodeQuery, buildingNameQuery, apiKey);
411
- const title = hasAddresses ? initial.componentTitle : i18nT('postcodeLookup.noAddressFoundTitle', language);
438
+ const title = hasAddresses ? tComponent(/** @type {ComponentDef} */{
439
+ id: initial.componentId
440
+ }, 'title') : t('postcodeLookup.noAddressFoundTitle');
412
441
  const formPath = initial.sourceUrl;
413
442
  const href = getHref();
414
443
  const backLink = {
415
- href
444
+ href,
445
+ text: t(COMMON_BACK)
416
446
  };
417
447
  const {
418
448
  errors,
419
449
  uprnError
420
450
  } = buildErrors(err);
421
451
  const fields = getSelectFields(details, hasMultipleAddresses, singleAddress, payload, uprnError, addresses, language);
422
- const searchAgainText = i18nT('postcodeLookup.searchAgain', language);
452
+ const searchAgainText = t('postcodeLookup.searchAgain');
423
453
  const searchAgainLink = {
424
454
  text: searchAgainText,
425
455
  href
426
456
  };
427
457
  const continueButton = {
428
458
  href: hasAddresses ? undefined : href,
429
- text: hasAddresses ? i18nT('postcodeLookup.useThisAddress', language) : searchAgainText,
459
+ text: hasAddresses ? t('postcodeLookup.useThisAddress') : searchAgainText,
430
460
  classes: GOVUK_MARGIN_RIGHT_1
431
461
  };
432
462
  const manualLink = {
433
- text: i18nT('postcodeLookup.enterManually', language),
463
+ text: t('postcodeLookup.enterManually'),
434
464
  href: `${href}?step=${steps.manual}`
435
465
  };
436
- const addressesFoundText = hasAddresses ? i18nT('postcodeLookup.addressFound', language, {
466
+ const addressesFoundText = hasAddresses ? t('postcodeLookup.addressFound', {
437
467
  count: addressCount
438
468
  }) : undefined;
439
- const noAddressFoundText = !hasAddresses ? i18nT('postcodeLookup.noAddressFoundBody', language) : undefined;
469
+ const noAddressFoundText = !hasAddresses ? t('postcodeLookup.noAddressFoundBody') : undefined;
470
+ const selector = initial.languages?.length ? {
471
+ languages: initial.languages
472
+ } : {};
440
473
  return {
441
474
  step: steps.select,
442
475
  showTitle: true,
443
- name: title,
476
+ name: tForm('title'),
444
477
  serviceUrl: formPath,
445
478
  pageTitle: title,
446
479
  backLink,
@@ -457,27 +490,40 @@ export async function selectViewModel(data, payload, err) {
457
490
  buttons: {
458
491
  continueButton,
459
492
  manualLink
460
- }
493
+ },
494
+ t,
495
+ language,
496
+ ...selector
461
497
  };
462
498
  }
463
499
 
464
500
  /**
465
501
  * The postcode lookup manual form view model
466
502
  * @param {PostcodeLookupSessionData} data
503
+ * @param {Translator} translator
467
504
  * @param {PostcodeLookupManualPayload} [payload]
468
505
  * @param {Error} [err]
469
506
  */
470
- export function manualViewModel(data, payload, err) {
507
+ export function manualViewModel(data, translator, payload, err) {
471
508
  const {
472
- componentTitle,
509
+ componentId,
473
510
  sourceUrl,
474
511
  componentHint,
475
- language = 'en-GB'
512
+ languages
476
513
  } = data.initial;
477
514
  const formPath = sourceUrl;
478
515
  const href = getHref();
516
+ const {
517
+ t,
518
+ tComponent,
519
+ tForm
520
+ } = translator;
521
+ const component = /** @type {ComponentDef} */{
522
+ id: componentId
523
+ };
479
524
  const backLink = {
480
- href
525
+ href,
526
+ text: t(COMMON_BACK)
481
527
  };
482
528
  const {
483
529
  errors,
@@ -488,23 +534,26 @@ export function manualViewModel(data, payload, err) {
488
534
  postcodeError
489
535
  } = buildErrors(err);
490
536
  const hint = componentHint && {
491
- text: componentHint
537
+ text: tComponent(component, 'hint')
492
538
  };
493
- const fields = getManualFields(payload, line1Error, line2Error, townError, countyError, postcodeError, language);
539
+ const fields = getManualFields(payload, line1Error, line2Error, townError, countyError, postcodeError, translator.language);
494
540
  const continueButton = {
495
- text: i18nT('postcodeLookup.useThisAddress', language),
541
+ text: t('postcodeLookup.useThisAddress'),
496
542
  classes: GOVUK_MARGIN_RIGHT_1
497
543
  };
498
544
  const detailsLink = {
499
- text: i18nT('postcodeLookup.findAnAddressInstead', language),
545
+ text: t('postcodeLookup.findAnAddressInstead'),
500
546
  href
501
547
  };
548
+ const selector = languages?.length ? {
549
+ languages
550
+ } : {};
502
551
  return {
503
552
  step: steps.manual,
504
553
  showTitle: true,
505
- name: componentTitle,
554
+ name: tForm('title'),
506
555
  serviceUrl: formPath,
507
- pageTitle: componentTitle,
556
+ pageTitle: tComponent(component, 'title'),
508
557
  backLink,
509
558
  errors,
510
559
  hint,
@@ -512,7 +561,10 @@ export function manualViewModel(data, payload, err) {
512
561
  buttons: {
513
562
  continueButton,
514
563
  detailsLink
515
- }
564
+ },
565
+ t,
566
+ language: translator.language,
567
+ ...selector
516
568
  };
517
569
  }
518
570
 
@@ -520,6 +572,8 @@ export function manualViewModel(data, payload, err) {
520
572
 
521
573
  /**
522
574
  * @import { ObjectSchema, ValidationErrorItem } from 'joi'
575
+ * @import { ComponentDef } from '@defra/forms-model'
523
576
  * @import { Address, PostcodeLookupDetailsData, PostcodeLookupDetailsPayload, PostcodeLookupManualPayload, PostcodeLookupSelectPayload, PostcodeLookupSessionData } from '../../../../server/plugins/postcode-lookup/types.js'
577
+ * @import { Translator } from '../../../../server/plugins/engine/i18n/types.js'
524
578
  */
525
579
  //# sourceMappingURL=index.js.map