@ukhomeoffice/cop-react-form-renderer 6.7.0-alpha → 6.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +22 -16
  2. package/dist/components/CheckYourAnswers/Answer.test.js +180 -92
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +137 -103
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +861 -463
  5. package/dist/components/CollectionPage/CollectionPage.js +63 -73
  6. package/dist/components/CollectionPage/CollectionPage.test.js +366 -316
  7. package/dist/components/CollectionSummary/BannerStrip.js +13 -13
  8. package/dist/components/CollectionSummary/BannerStrip.test.js +76 -80
  9. package/dist/components/CollectionSummary/CollectionSummary.js +126 -99
  10. package/dist/components/CollectionSummary/CollectionSummary.test.js +188 -152
  11. package/dist/components/CollectionSummary/Confirmation.js +12 -14
  12. package/dist/components/CollectionSummary/Confirmation.test.js +63 -68
  13. package/dist/components/CollectionSummary/RenderListView.js +52 -46
  14. package/dist/components/CollectionSummary/RenderListView.scss +1 -1
  15. package/dist/components/CollectionSummary/RenderListView.test.js +77 -78
  16. package/dist/components/CollectionSummary/SummaryCard.js +152 -110
  17. package/dist/components/CollectionSummary/SummaryCard.test.js +1018 -929
  18. package/dist/components/CollectionSummary/SummaryCardDetails.js +137 -94
  19. package/dist/components/CollectionSummary/SummaryCardDetails.scss +13 -4
  20. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +331 -128
  21. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +35 -30
  22. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +74 -62
  23. package/dist/components/FormComponent/Collection.js +108 -74
  24. package/dist/components/FormComponent/Collection.test.js +1081 -909
  25. package/dist/components/FormComponent/Container.js +39 -40
  26. package/dist/components/FormComponent/Container.test.js +412 -312
  27. package/dist/components/FormComponent/FormComponent.js +72 -69
  28. package/dist/components/FormComponent/FormComponent.test.js +414 -353
  29. package/dist/components/FormComponent/helpers/addLabel.js +7 -4
  30. package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
  31. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +7 -7
  32. package/dist/components/FormComponent/helpers/getComponentError.js +5 -3
  33. package/dist/components/FormComponent/helpers/getComponentError.test.js +14 -14
  34. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +4 -3
  35. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +6 -6
  36. package/dist/components/FormComponent/helpers/index.js +4 -4
  37. package/dist/components/FormPage/FormPage.js +80 -65
  38. package/dist/components/FormPage/FormPage.test.js +163 -127
  39. package/dist/components/FormRenderer/FormRenderer.js +180 -143
  40. package/dist/components/FormRenderer/FormRenderer.test.js +1115 -730
  41. package/dist/components/FormRenderer/handlers/cyaAction.js +2 -2
  42. package/dist/components/FormRenderer/handlers/getPageId.js +3 -1
  43. package/dist/components/FormRenderer/handlers/getPageId.test.js +14 -14
  44. package/dist/components/FormRenderer/handlers/handlers.test.js +32 -32
  45. package/dist/components/FormRenderer/handlers/index.js +1 -1
  46. package/dist/components/FormRenderer/handlers/navigate.js +3 -3
  47. package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
  48. package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
  49. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +15 -15
  50. package/dist/components/FormRenderer/helpers/canCYASubmit.js +3 -1
  51. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +20 -16
  52. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +22 -17
  53. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +16 -16
  54. package/dist/components/FormRenderer/helpers/getCYA.js +5 -3
  55. package/dist/components/FormRenderer/helpers/getCYA.test.js +11 -11
  56. package/dist/components/FormRenderer/helpers/getFormState.js +7 -5
  57. package/dist/components/FormRenderer/helpers/getFormState.test.js +10 -10
  58. package/dist/components/FormRenderer/helpers/getNextPageId.js +24 -13
  59. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +67 -67
  60. package/dist/components/FormRenderer/helpers/getPage.js +4 -2
  61. package/dist/components/FormRenderer/helpers/getPage.test.js +11 -11
  62. package/dist/components/FormRenderer/helpers/getRelevantPages.js +9 -7
  63. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +14 -14
  64. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +5 -5
  65. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +97 -103
  66. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +60 -62
  67. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +78 -71
  68. package/dist/components/FormRenderer/helpers/index.js +1 -1
  69. package/dist/components/FormRenderer/onCYAAction.js +51 -59
  70. package/dist/components/FormRenderer/onCYAAction.test.js +152 -164
  71. package/dist/components/FormRenderer/onPageAction.js +39 -43
  72. package/dist/components/FormRenderer/onPageAction.test.js +208 -223
  73. package/dist/components/FormRenderer/onTaskAction.js +13 -9
  74. package/dist/components/FormRenderer/onTaskAction.test.js +88 -93
  75. package/dist/components/PageActions/ActionButton.js +15 -12
  76. package/dist/components/PageActions/ActionButton.test.js +78 -56
  77. package/dist/components/PageActions/PageActions.js +10 -10
  78. package/dist/components/PageActions/PageActions.test.js +115 -86
  79. package/dist/components/SummaryList/GroupAction.js +17 -9
  80. package/dist/components/SummaryList/GroupAction.test.js +33 -37
  81. package/dist/components/SummaryList/RowAction.js +16 -11
  82. package/dist/components/SummaryList/RowAction.test.js +33 -37
  83. package/dist/components/SummaryList/SummaryList.js +34 -21
  84. package/dist/components/SummaryList/SummaryList.scss +15 -0
  85. package/dist/components/SummaryList/SummaryList.test.js +226 -143
  86. package/dist/components/SummaryList/SummaryListHeadingRow.js +4 -6
  87. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +53 -0
  88. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +38 -0
  89. package/dist/components/SummaryList/SummaryListRow.js +4 -6
  90. package/dist/components/SummaryList/SummaryListTitleRow.js +3 -5
  91. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +5 -3
  92. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +22 -22
  93. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +5 -3
  94. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +22 -22
  95. package/dist/components/SummaryList/helpers/index.js +1 -1
  96. package/dist/components/TaskList/Task.js +29 -19
  97. package/dist/components/TaskList/Task.test.js +76 -83
  98. package/dist/components/TaskList/TaskList.js +92 -49
  99. package/dist/components/TaskList/TaskList.scss +24 -0
  100. package/dist/components/TaskList/TaskList.test.js +255 -113
  101. package/dist/components/TaskList/TaskState.js +5 -7
  102. package/dist/components/TaskList/TaskState.test.js +45 -52
  103. package/dist/components/index.js +7 -7
  104. package/dist/context/HooksContext/HooksContext.js +80 -57
  105. package/dist/context/HooksContext/HooksContext.test.js +35 -26
  106. package/dist/context/HooksContext/index.js +4 -3
  107. package/dist/context/ValidationContext/ValidationContext.js +94 -43
  108. package/dist/context/ValidationContext/ValidationContext.test.js +68 -56
  109. package/dist/context/ValidationContext/index.js +4 -3
  110. package/dist/context/index.js +2 -2
  111. package/dist/hooks/index.js +10 -9
  112. package/dist/hooks/useAxios.js +40 -14
  113. package/dist/hooks/useGetRequest.js +97 -61
  114. package/dist/hooks/useHooks.js +3 -1
  115. package/dist/hooks/useRefData.js +39 -26
  116. package/dist/hooks/useValidation.js +3 -1
  117. package/dist/index.js +14 -13
  118. package/dist/models/CollectionLabels.js +1 -1
  119. package/dist/models/ComponentTypes.js +25 -25
  120. package/dist/models/EventTypes.js +4 -4
  121. package/dist/models/FormPages.js +4 -4
  122. package/dist/models/FormTypes.js +8 -8
  123. package/dist/models/HubFormats.js +3 -3
  124. package/dist/models/PageAction.js +38 -44
  125. package/dist/models/TaskStates.js +28 -29
  126. package/dist/models/index.js +9 -9
  127. package/dist/setupTests.js +31 -30
  128. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  129. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +54 -52
  130. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +25 -15
  131. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +35 -33
  132. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +31 -17
  133. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +44 -42
  134. package/dist/utils/CheckYourAnswers/getCYARow.js +6 -6
  135. package/dist/utils/CheckYourAnswers/getCYARow.test.js +86 -86
  136. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +24 -18
  137. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +16 -15
  138. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +36 -33
  139. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +61 -58
  140. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +108 -87
  141. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +281 -162
  142. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +20 -25
  143. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +97 -103
  144. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +18 -13
  145. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +76 -70
  146. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +42 -0
  147. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +56 -0
  148. package/dist/utils/CheckYourAnswers/index.js +1 -1
  149. package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -4
  150. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +25 -25
  151. package/dist/utils/CollectionPage/addCollectionPageEntry.js +2 -2
  152. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +5 -5
  153. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +2 -2
  154. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +18 -17
  155. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +22 -12
  156. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +38 -47
  157. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
  158. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +10 -10
  159. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +11 -7
  160. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +22 -22
  161. package/dist/utils/CollectionPage/getCollectionPageData.js +12 -8
  162. package/dist/utils/CollectionPage/getCollectionPageData.test.js +19 -19
  163. package/dist/utils/CollectionPage/getErrorsForCollection.js +24 -24
  164. package/dist/utils/CollectionPage/getErrorsForCollection.test.js +22 -20
  165. package/dist/utils/CollectionPage/getQuickEditPage.js +31 -35
  166. package/dist/utils/CollectionPage/getQuickEditPage.test.js +27 -15
  167. package/dist/utils/CollectionPage/index.js +1 -1
  168. package/dist/utils/CollectionPage/mergeCollectionPages.js +43 -31
  169. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +26 -26
  170. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +6 -4
  171. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +10 -10
  172. package/dist/utils/CollectionPage/setCollectionPageData.js +16 -10
  173. package/dist/utils/CollectionPage/setCollectionPageData.test.js +24 -24
  174. package/dist/utils/Component/addShowWhen.js +8 -4
  175. package/dist/utils/Component/addShowWhen.test.js +37 -37
  176. package/dist/utils/Component/applyToComponentTree.js +18 -18
  177. package/dist/utils/Component/applyToComponentTree.test.js +32 -27
  178. package/dist/utils/Component/cleanAttributes.js +13 -10
  179. package/dist/utils/Component/cleanAttributes.test.js +18 -17
  180. package/dist/utils/Component/elevateNestedComponents.js +7 -6
  181. package/dist/utils/Component/elevateNestedComponents.test.js +68 -30
  182. package/dist/utils/Component/getComponent.js +94 -88
  183. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +17 -18
  184. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +59 -46
  185. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +48 -39
  186. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +33 -23
  187. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +18 -20
  188. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +22 -17
  189. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +25 -20
  190. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +9 -10
  191. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +15 -17
  192. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +8 -9
  193. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +15 -17
  194. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +26 -22
  195. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +175 -155
  196. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +15 -17
  197. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +22 -17
  198. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +72 -57
  199. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +22 -17
  200. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +22 -17
  201. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +38 -31
  202. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +29 -20
  203. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +2 -2
  204. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +8 -9
  205. package/dist/utils/Component/getDefaultValue.js +8 -6
  206. package/dist/utils/Component/getDefaultValue.test.js +12 -12
  207. package/dist/utils/Component/getDefaultValueFromConfig.js +21 -22
  208. package/dist/utils/Component/getDefaultValueFromConfig.test.js +31 -31
  209. package/dist/utils/Component/index.js +1 -1
  210. package/dist/utils/Component/isEditable.js +4 -2
  211. package/dist/utils/Component/isEditable.test.js +15 -14
  212. package/dist/utils/Component/optionIsSelected.js +6 -1
  213. package/dist/utils/Component/optionIsSelected.test.js +35 -9
  214. package/dist/utils/Component/setupContainerComponentsPath.js +29 -27
  215. package/dist/utils/Component/setupContainerComponentsPath.test.js +11 -11
  216. package/dist/utils/Component/showComponent.js +1 -1
  217. package/dist/utils/Component/showComponent.test.js +28 -28
  218. package/dist/utils/Component/wrapInFormGroup.js +2 -2
  219. package/dist/utils/Condition/index.js +1 -1
  220. package/dist/utils/Condition/meetsAllConditions.js +8 -8
  221. package/dist/utils/Condition/meetsAllConditions.test.js +20 -20
  222. package/dist/utils/Condition/meetsCondition.js +25 -16
  223. package/dist/utils/Condition/meetsCondition.test.js +402 -402
  224. package/dist/utils/Condition/meetsOneCondition.js +5 -5
  225. package/dist/utils/Condition/meetsOneCondition.test.js +16 -16
  226. package/dist/utils/Condition/setupConditions.js +18 -13
  227. package/dist/utils/Condition/setupConditions.test.js +7 -7
  228. package/dist/utils/Container/getEditableComponents.js +5 -3
  229. package/dist/utils/Container/getEditableComponents.test.js +45 -43
  230. package/dist/utils/Container/index.js +1 -1
  231. package/dist/utils/Container/setupNesting.js +20 -16
  232. package/dist/utils/Container/setupNesting.test.js +30 -27
  233. package/dist/utils/Container/showContainer.js +7 -3
  234. package/dist/utils/Container/showContainer.test.js +30 -30
  235. package/dist/utils/Data/applyFormula.js +48 -38
  236. package/dist/utils/Data/applyFormula.test.js +20 -20
  237. package/dist/utils/Data/getAutocompleteSource.js +26 -18
  238. package/dist/utils/Data/getAutocompleteSource.test.js +86 -80
  239. package/dist/utils/Data/getDataPath.js +28 -18
  240. package/dist/utils/Data/getDataPath.test.js +12 -12
  241. package/dist/utils/Data/getOptions.js +30 -24
  242. package/dist/utils/Data/getOptions.test.js +27 -27
  243. package/dist/utils/Data/getSourceData.js +19 -6
  244. package/dist/utils/Data/getSourceData.test.js +80 -84
  245. package/dist/utils/Data/index.js +1 -1
  246. package/dist/utils/Data/nestInRefdataOptions.js +16 -9
  247. package/dist/utils/Data/nestInRefdataOptions.test.js +16 -16
  248. package/dist/utils/Data/refDataToOptions.js +13 -10
  249. package/dist/utils/Data/refDataToOptions.test.js +19 -19
  250. package/dist/utils/Data/setDataItem.js +8 -7
  251. package/dist/utils/Data/setDataItem.test.js +37 -37
  252. package/dist/utils/Data/setupFormData.js +21 -13
  253. package/dist/utils/Data/setupFormData.test.js +50 -51
  254. package/dist/utils/Data/setupRefDataUrlForComponent.js +26 -20
  255. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +24 -24
  256. package/dist/utils/FormPage/applyConditionalProperties.js +9 -5
  257. package/dist/utils/FormPage/applyConditionalProperties.test.js +18 -15
  258. package/dist/utils/FormPage/getConditionalText.js +3 -3
  259. package/dist/utils/FormPage/getConditionalText.test.js +29 -29
  260. package/dist/utils/FormPage/getFormPage.js +16 -15
  261. package/dist/utils/FormPage/getFormPage.test.js +46 -47
  262. package/dist/utils/FormPage/getFormPages.js +12 -7
  263. package/dist/utils/FormPage/getFormPages.test.js +23 -20
  264. package/dist/utils/FormPage/getPageActions.js +15 -9
  265. package/dist/utils/FormPage/getPageActions.test.js +32 -32
  266. package/dist/utils/FormPage/getParagraphFromText.js +7 -5
  267. package/dist/utils/FormPage/getParagraphFromText.test.js +6 -6
  268. package/dist/utils/FormPage/index.js +4 -2
  269. package/dist/utils/FormPage/showFormPage.js +7 -3
  270. package/dist/utils/FormPage/showFormPage.test.js +32 -32
  271. package/dist/utils/FormPage/showFormPageCYA.js +1 -1
  272. package/dist/utils/FormPage/showFormPageCYA.test.js +8 -8
  273. package/dist/utils/FormPage/useComponent.js +28 -21
  274. package/dist/utils/FormPage/useComponent.test.js +79 -77
  275. package/dist/utils/Format/formatData.js +1 -1
  276. package/dist/utils/Format/formatData.test.js +18 -18
  277. package/dist/utils/Format/formatDataForComponent.js +6 -5
  278. package/dist/utils/Format/formatDataForComponent.test.js +78 -50
  279. package/dist/utils/Format/formatDataForForm.js +8 -6
  280. package/dist/utils/Format/formatDataForForm.test.js +16 -13
  281. package/dist/utils/Format/formatDataForPage.js +5 -4
  282. package/dist/utils/Format/formatDataForPage.test.js +25 -20
  283. package/dist/utils/Format/index.js +1 -1
  284. package/dist/utils/Hub/getFormHub.js +1 -1
  285. package/dist/utils/Hub/getFormHub.test.js +31 -28
  286. package/dist/utils/Hub/index.js +1 -1
  287. package/dist/utils/Meta/constants.js +2 -2
  288. package/dist/utils/Meta/documents/getDocuments.js +1 -1
  289. package/dist/utils/Meta/documents/getDocuments.test.js +16 -24
  290. package/dist/utils/Meta/documents/index.js +1 -1
  291. package/dist/utils/Meta/documents/setDocumentsForField.js +16 -14
  292. package/dist/utils/Meta/documents/setDocumentsForField.test.js +34 -68
  293. package/dist/utils/Meta/index.js +1 -1
  294. package/dist/utils/Operate/checkValueIsTruthy.js +2 -2
  295. package/dist/utils/Operate/checkValueIsTruthy.test.js +16 -16
  296. package/dist/utils/Operate/getFirstOf.js +5 -5
  297. package/dist/utils/Operate/getFirstOf.test.js +31 -31
  298. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +10 -10
  299. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +52 -46
  300. package/dist/utils/Operate/getLength.js +50 -0
  301. package/dist/utils/Operate/getLength.test.js +89 -0
  302. package/dist/utils/Operate/index.js +1 -1
  303. package/dist/utils/Operate/persistValueInFormData.js +3 -3
  304. package/dist/utils/Operate/persistValueInFormData.test.js +20 -22
  305. package/dist/utils/Operate/runPageOperations.js +9 -7
  306. package/dist/utils/Operate/runPageOperations.test.js +36 -35
  307. package/dist/utils/Operate/setValueInFormData.js +2 -2
  308. package/dist/utils/Operate/setValueInFormData.test.js +16 -16
  309. package/dist/utils/Operate/shouldRun.js +6 -6
  310. package/dist/utils/Operate/shouldRun.test.js +27 -21
  311. package/dist/utils/Validate/additional/conditionallyRequired.js +4 -4
  312. package/dist/utils/Validate/additional/conditionallyRequired.test.js +18 -18
  313. package/dist/utils/Validate/additional/index.js +6 -6
  314. package/dist/utils/Validate/additional/index.test.js +12 -12
  315. package/dist/utils/Validate/additional/mustBeAfter.js +2 -2
  316. package/dist/utils/Validate/additional/mustBeAfter.test.js +40 -40
  317. package/dist/utils/Validate/additional/mustBeBefore.js +2 -2
  318. package/dist/utils/Validate/additional/mustBeBefore.test.js +28 -28
  319. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +11 -7
  320. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +41 -37
  321. package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
  322. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +18 -18
  323. package/dist/utils/Validate/additional/mustBeInTheFuture.js +2 -2
  324. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +12 -12
  325. package/dist/utils/Validate/additional/mustBeInThePast.js +3 -3
  326. package/dist/utils/Validate/additional/mustBeInThePast.test.js +12 -12
  327. package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
  328. package/dist/utils/Validate/additional/mustBeLessThan.test.js +17 -17
  329. package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
  330. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +16 -16
  331. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
  332. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +20 -20
  333. package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
  334. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +16 -16
  335. package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +4 -4
  336. package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +39 -35
  337. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
  338. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +16 -14
  339. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
  340. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +12 -12
  341. package/dist/utils/Validate/additional/mustNotContainSql.js +4 -3
  342. package/dist/utils/Validate/additional/mustNotContainSql.test.js +14 -14
  343. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +2 -2
  344. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +26 -28
  345. package/dist/utils/Validate/additional/utils.js +22 -9
  346. package/dist/utils/Validate/index.js +1 -1
  347. package/dist/utils/Validate/validateCollection.js +25 -19
  348. package/dist/utils/Validate/validateCollection.test.js +66 -74
  349. package/dist/utils/Validate/validateComponent.js +21 -18
  350. package/dist/utils/Validate/validateComponent.test.js +176 -166
  351. package/dist/utils/Validate/validateContainer.js +20 -15
  352. package/dist/utils/Validate/validateContainer.test.js +52 -58
  353. package/dist/utils/Validate/validateDate.js +21 -15
  354. package/dist/utils/Validate/validateDate.test.js +32 -31
  355. package/dist/utils/Validate/validateEmail.js +8 -6
  356. package/dist/utils/Validate/validateEmail.test.js +25 -25
  357. package/dist/utils/Validate/validateMultifile.js +7 -5
  358. package/dist/utils/Validate/validateMultifile.test.js +18 -17
  359. package/dist/utils/Validate/validatePage.js +22 -19
  360. package/dist/utils/Validate/validatePage.test.js +203 -215
  361. package/dist/utils/Validate/validateRegex.js +5 -3
  362. package/dist/utils/Validate/validateRegex.test.js +14 -14
  363. package/dist/utils/Validate/validateRequired.js +6 -4
  364. package/dist/utils/Validate/validateRequired.test.js +18 -18
  365. package/dist/utils/Validate/validateTextArea.js +6 -4
  366. package/dist/utils/Validate/validateTextArea.test.js +20 -20
  367. package/dist/utils/Validate/validateTime.js +26 -11
  368. package/dist/utils/Validate/validateTime.test.js +62 -16
  369. package/dist/utils/index.js +9 -7
  370. package/package.json +2 -2
  371. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.js +0 -37
  372. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.test.js +0 -41
@@ -9,7 +9,7 @@ exports.default = void 0;
9
9
  * @param {number} config.maxDecimals - the maximum amount of decimal places to allow
10
10
  * @returns true if string has less than maxDecimals decimal places else returns false
11
11
  */
12
- const mustHaveLessThanDecimalPlaces = (string, config) => {
12
+ var mustHaveLessThanDecimalPlaces = function mustHaveLessThanDecimalPlaces(string, config) {
13
13
  if (!string || !string.includes('.')) {
14
14
  return true;
15
15
  }
@@ -2,30 +2,30 @@
2
2
 
3
3
  var _mustHaveLessThanDecimalPlaces = _interopRequireDefault(require("./mustHaveLessThanDecimalPlaces"));
4
4
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
- describe('utils', () => {
6
- describe('Validate', () => {
7
- describe('additional', () => {
8
- describe('mustHaveLessThanDecimalPlaces', () => {
9
- test('should return false given a number with more than the allowed number of decimal places', () => {
10
- const result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999.9999', {
5
+ describe('utils', function () {
6
+ describe('Validate', function () {
7
+ describe('additional', function () {
8
+ describe('mustHaveLessThanDecimalPlaces', function () {
9
+ test('should return false given a number with more than the allowed number of decimal places', function () {
10
+ var result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999.9999', {
11
11
  maxDecimals: 3
12
12
  });
13
13
  expect(result).toEqual(false);
14
14
  });
15
- test('should return true given a number with less than the allowed number of decimal places', () => {
16
- const result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999.99', {
15
+ test('should return true given a number with less than the allowed number of decimal places', function () {
16
+ var result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999.99', {
17
17
  maxDecimals: 3
18
18
  });
19
19
  expect(result).toEqual(true);
20
20
  });
21
- test('should return true given a number with no decimal places', () => {
22
- const result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999', {
21
+ test('should return true given a number with no decimal places', function () {
22
+ var result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999', {
23
23
  maxDecimals: 3
24
24
  });
25
25
  expect(result).toEqual(true);
26
26
  });
27
- test('should return true given nothing', () => {
28
- const result = (0, _mustHaveLessThanDecimalPlaces.default)(undefined, {
27
+ test('should return true given nothing', function () {
28
+ var result = (0, _mustHaveLessThanDecimalPlaces.default)(undefined, {
29
29
  maxDecimals: 3
30
30
  });
31
31
  expect(result).toEqual(true);
@@ -4,13 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
7
8
  // NOTE: SQL RegEx reference:
8
9
  // http://www.symantec.com/connect/articles/detection-sql-injection-and-cross-site-scripting-attacks
9
- const SQL_COMBINED = /(%27)|(')|(--)|(%23)|(#)|((%3D)|(=))[^\n]*((%27)|(')|(--)|(%3B)|(;))|w*((%27)|('))((%6F)|o|(%4F))((%72)|r|(%52))|((%27)|('))union/i;
10
- const mustNotContainSql = value => {
10
+ var SQL_COMBINED = /(%27)|(')|(--)|(%23)|(#)|((%3D)|(=))[^\n]*((%27)|(')|(--)|(%3B)|(;))|w*((%27)|('))((%6F)|o|(%4F))((%72)|r|(%52))|((%27)|('))union/i;
11
+ var mustNotContainSql = function mustNotContainSql(value) {
11
12
  // eslint-disable-next-line no-extra-boolean-cast
12
13
  if (!!value) {
13
- const string = typeof value === 'object' ? JSON.stringify(value) : String(value);
14
+ var string = _typeof(value) === 'object' ? JSON.stringify(value) : String(value);
14
15
  return !SQL_COMBINED.test(string);
15
16
  }
16
17
  return false;
@@ -2,28 +2,28 @@
2
2
 
3
3
  var _mustNotContainSql = _interopRequireDefault(require("./mustNotContainSql"));
4
4
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
- describe('utils', () => {
6
- describe('Validate', () => {
7
- describe('additional', () => {
8
- describe('mustNotContainSql', () => {
9
- test('should return true given a string not containing sql characters', () => {
10
- const result = (0, _mustNotContainSql.default)('test');
5
+ describe('utils', function () {
6
+ describe('Validate', function () {
7
+ describe('additional', function () {
8
+ describe('mustNotContainSql', function () {
9
+ test('should return true given a string not containing sql characters', function () {
10
+ var result = (0, _mustNotContainSql.default)('test');
11
11
  expect(result).toEqual(true);
12
12
  });
13
- test('should return true given non-string datatype is converted to string', () => {
14
- const result = (0, _mustNotContainSql.default)(123);
13
+ test('should return true given non-string datatype is converted to string', function () {
14
+ var result = (0, _mustNotContainSql.default)(123);
15
15
  expect(result).toEqual(true);
16
16
  });
17
- test('should return false given a string containing sql characters', () => {
18
- const result = (0, _mustNotContainSql.default)("test' OR '1'='1'");
17
+ test('should return false given a string containing sql characters', function () {
18
+ var result = (0, _mustNotContainSql.default)("test' OR '1'='1'");
19
19
  expect(result).toEqual(false);
20
20
  });
21
- test('should return false given string is null', () => {
22
- const result = (0, _mustNotContainSql.default)(null);
21
+ test('should return false given string is null', function () {
22
+ var result = (0, _mustNotContainSql.default)(null);
23
23
  expect(result).toEqual(false);
24
24
  });
25
- test('should return false given string is not defined', () => {
26
- const result = (0, _mustNotContainSql.default)(undefined);
25
+ test('should return false given string is not defined', function () {
26
+ var result = (0, _mustNotContainSql.default)(undefined);
27
27
  expect(result).toEqual(false);
28
28
  });
29
29
  });
@@ -10,9 +10,9 @@ exports.default = void 0;
10
10
  * @param {object} component the container component
11
11
  * @returns true if the user has only provided a value for one of the components in the container, otherwise false.
12
12
  */
13
- const mustSelectOnlyOne = (data, _, component) => {
13
+ var mustSelectOnlyOne = function mustSelectOnlyOne(data, _, component) {
14
14
  var _component$components;
15
- const valueCount = (_component$components = component.components) === null || _component$components === void 0 ? void 0 : _component$components.reduce((acc, inner) => {
15
+ var valueCount = (_component$components = component.components) === null || _component$components === void 0 ? void 0 : _component$components.reduce(function (acc, inner) {
16
16
  var _data$component$id;
17
17
  if ((_data$component$id = data[component.id]) !== null && _data$component$id !== void 0 && _data$component$id[inner.id]) {
18
18
  // Account for checkboxes that the user may have unselected
@@ -2,12 +2,16 @@
2
2
 
3
3
  var _mustSelectOnlyOne = _interopRequireDefault(require("./mustSelectOnlyOne"));
4
4
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
- describe('utils', () => {
6
- describe('Validate', () => {
7
- describe('additional', () => {
8
- describe('mustSelectOnlyOne', () => {
9
- const CONTAINER_ID = 'containerId';
10
- const COMPONENT = {
5
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
6
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
8
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
+ describe('utils', function () {
10
+ describe('Validate', function () {
11
+ describe('additional', function () {
12
+ describe('mustSelectOnlyOne', function () {
13
+ var CONTAINER_ID = 'containerId';
14
+ var COMPONENT = {
11
15
  id: CONTAINER_ID,
12
16
  type: 'container',
13
17
  components: [{
@@ -18,34 +22,28 @@ describe('utils', () => {
18
22
  id: 'charlie'
19
23
  }]
20
24
  };
21
- test('should return true if all components are empty', () => {
22
- const DATA = {};
25
+ test('should return true if all components are empty', function () {
26
+ var DATA = {};
23
27
  expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
24
28
  });
25
- test('should return true if one component has data', () => {
26
- const DATA = {
27
- [CONTAINER_ID]: {
28
- alpha: 'text'
29
- }
30
- };
29
+ test('should return true if one component has data', function () {
30
+ var DATA = _defineProperty({}, CONTAINER_ID, {
31
+ alpha: 'text'
32
+ });
31
33
  expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
32
34
  });
33
- test('should return false if more than one component has data', () => {
34
- const DATA = {
35
- [CONTAINER_ID]: {
36
- alpha: 'text',
37
- bravo: 'test'
38
- }
39
- };
35
+ test('should return false if more than one component has data', function () {
36
+ var DATA = _defineProperty({}, CONTAINER_ID, {
37
+ alpha: 'text',
38
+ bravo: 'test'
39
+ });
40
40
  expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(false);
41
41
  });
42
- test('should return true if more than one component has data but one is an empty array', () => {
43
- const DATA = {
44
- [CONTAINER_ID]: {
45
- alpha: 'text',
46
- bravo: []
47
- }
48
- };
42
+ test('should return true if more than one component has data but one is an empty array', function () {
43
+ var DATA = _defineProperty({}, CONTAINER_ID, {
44
+ alpha: 'text',
45
+ bravo: []
46
+ });
49
47
  expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
50
48
  });
51
49
  });
@@ -4,7 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.formattedTime = exports.formatString = exports.DATE_FORMAT = void 0;
7
- const isNumeric = value => /^-?\d+$/.test(value);
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
9
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
10
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
11
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ var isNumeric = function isNumeric(value) {
14
+ return /^-?\d+$/.test(value);
15
+ };
8
16
 
9
17
  /**
10
18
 
@@ -15,20 +23,25 @@ const isNumeric = value => /^-?\d+$/.test(value);
15
23
  * @param {string} dateComponent - the value representing a day or month.
16
24
  * @returns the value (appended with a leading zero, if the value passed in was a single digit)
17
25
  */
18
- const formatInTwoDigits = dateComponent => {
26
+ var formatInTwoDigits = function formatInTwoDigits(dateComponent) {
19
27
  if (isNumeric(dateComponent)) {
20
28
  return dateComponent.padStart(2, '0');
21
29
  }
22
30
  return '';
23
31
  };
24
- const formatString = date => {
25
- const [day, month, year] = date.split('-');
32
+ var formatString = exports.formatString = function formatString(date) {
33
+ var _date$split = date.split('-'),
34
+ _date$split2 = _slicedToArray(_date$split, 3),
35
+ day = _date$split2[0],
36
+ month = _date$split2[1],
37
+ year = _date$split2[2];
26
38
  return "".concat(formatInTwoDigits(day), "-").concat(formatInTwoDigits(month), "-").concat(year);
27
39
  };
28
- exports.formatString = formatString;
29
- const formattedTime = time => {
30
- const [hour, minute] = time.split(':');
40
+ var formattedTime = exports.formattedTime = function formattedTime(time) {
41
+ var _time$split = time.split(':'),
42
+ _time$split2 = _slicedToArray(_time$split, 2),
43
+ hour = _time$split2[0],
44
+ minute = _time$split2[1];
31
45
  return "".concat(formatInTwoDigits(hour), ":").concat(formatInTwoDigits(minute));
32
46
  };
33
- exports.formattedTime = formattedTime;
34
- const DATE_FORMAT = exports.DATE_FORMAT = 'DD-MM-YYYY';
47
+ var DATE_FORMAT = exports.DATE_FORMAT = 'DD-MM-YYYY';
@@ -17,7 +17,7 @@ var _validateTime = _interopRequireDefault(require("./validateTime"));
17
17
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
18
  // Local imports
19
19
 
20
- const Validate = {
20
+ var Validate = {
21
21
  component: _validateComponent.default,
22
22
  container: _validateContainer.default,
23
23
  email: _validateEmail.default,
@@ -7,8 +7,12 @@ exports.default = void 0;
7
7
  var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
8
  var _validateContainer = _interopRequireDefault(require("./validateContainer"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
- // Local imports
11
-
10
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
13
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
15
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // Local imports
12
16
  /**
13
17
  * Validates all of the items within a collection.
14
18
  * @param {object} collection The collection to validate.
@@ -16,26 +20,26 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
16
20
  * @param {object} formData The data at the top level of the form.
17
21
  * @returns Errors for all components for all items within the collection.
18
22
  */
19
- const validateCollection = (collection, items, formData) => {
20
- const errors = [];
23
+ var validateCollection = function validateCollection(collection, items, formData) {
24
+ var errors = [];
21
25
  if (collection && Array.isArray(collection.item) && Array.isArray(items)) {
22
- items.forEach((item, index) => {
23
- const labelCount = (collection.countOffset || 0) + index + 1;
24
- const fullPath = "".concat(collection.full_path || collection.fieldId, "[").concat(index, "]");
25
- const container = {
26
+ items.forEach(function (item, index) {
27
+ var labelCount = (collection.countOffset || 0) + index + 1;
28
+ var fullPath = "".concat(collection.full_path || collection.fieldId, "[").concat(index, "]");
29
+ var container = {
26
30
  full_path: fullPath,
27
- components: collection.item.map(component => {
28
- const newComponent = {
29
- ...component,
31
+ components: collection.item.map(function (component) {
32
+ var newComponent = _objectSpread(_objectSpread({}, component), {}, {
30
33
  full_path: "".concat(fullPath, ".").concat(component.fieldId)
31
- };
34
+ });
32
35
  if (component.custom_errors && Array.isArray(component.custom_errors)) {
33
- newComponent.custom_errors = component.custom_errors.map(error => ({
34
- ...error,
35
- message: _copReactComponents.Utils.interpolateString(index === 0 && error.firstOnlyMessage ? error.firstOnlyMessage : error.message, {
36
- index: labelCount
37
- })
38
- }));
36
+ newComponent.custom_errors = component.custom_errors.map(function (error) {
37
+ return _objectSpread(_objectSpread({}, error), {}, {
38
+ message: _copReactComponents.Utils.interpolateString(index === 0 && error.firstOnlyMessage ? error.firstOnlyMessage : error.message, {
39
+ index: labelCount
40
+ })
41
+ });
42
+ });
39
43
  }
40
44
  return newComponent;
41
45
  })
@@ -43,6 +47,8 @@ const validateCollection = (collection, items, formData) => {
43
47
  errors.push((0, _validateContainer.default)(container, item, formData));
44
48
  });
45
49
  }
46
- return errors.filter(e => !!e).flat();
50
+ return errors.filter(function (e) {
51
+ return !!e;
52
+ }).flat();
47
53
  };
48
54
  var _default = exports.default = validateCollection;
@@ -3,127 +3,119 @@
3
3
  var _models = require("../../models");
4
4
  var _validateCollection = _interopRequireDefault(require("./validateCollection"));
5
5
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
- // Local imports
7
-
8
- describe('utils.Validate.Collection', () => {
9
- const setup = (id, type, label, required, item) => ({
10
- id,
11
- fieldId: id,
12
- type,
13
- label,
14
- required,
15
- item
16
- });
17
- it('should return an empty array when the component is null', () => {
6
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
7
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
9
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // Local imports
10
+ describe('utils.Validate.Collection', function () {
11
+ var setup = function setup(id, type, label, required, item) {
12
+ return {
13
+ id: id,
14
+ fieldId: id,
15
+ type: type,
16
+ label: label,
17
+ required: required,
18
+ item: item
19
+ };
20
+ };
21
+ it('should return an empty array when the component is null', function () {
18
22
  expect((0, _validateCollection.default)(null, [])).toEqual([]);
19
23
  });
20
- it('should return an empty array when the collection has an undefined item array', () => {
21
- const ID = 'collection';
22
- const LABEL = 'field';
23
- const COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, undefined);
24
+ it('should return an empty array when the collection has an undefined item array', function () {
25
+ var ID = 'collection';
26
+ var LABEL = 'field';
27
+ var COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, undefined);
24
28
  expect((0, _validateCollection.default)(COLLECTION, [])).toEqual([]);
25
29
  });
26
- it('should return an empty array when the collection has an empty item array', () => {
27
- const ID = 'collection';
28
- const LABEL = 'field';
29
- const COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, []);
30
+ it('should return an empty array when the collection has an empty item array', function () {
31
+ var ID = 'collection';
32
+ var LABEL = 'field';
33
+ var COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, []);
30
34
  expect((0, _validateCollection.default)(COLLECTION, [])).toEqual([]);
31
35
  });
32
- it('should return an empty array when the collection has only valid items', () => {
33
- const EMAIL_ID = 'email';
34
- const EMAIL_LABEL = 'Email';
35
- const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
36
- const ID = 'collection';
37
- const LABEL = 'field';
38
- const COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, [EMAIL]);
39
- const ITEMS = [{
40
- [EMAIL_ID]: 'alpha.bravo@homeoffice.gov.uk'
41
- }, {
42
- [EMAIL_ID]: 'charlie.delta@homeoffice.gov.uk'
43
- }];
36
+ it('should return an empty array when the collection has only valid items', function () {
37
+ var EMAIL_ID = 'email';
38
+ var EMAIL_LABEL = 'Email';
39
+ var EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
40
+ var ID = 'collection';
41
+ var LABEL = 'field';
42
+ var COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, [EMAIL]);
43
+ var ITEMS = [_defineProperty({}, EMAIL_ID, 'alpha.bravo@homeoffice.gov.uk'), _defineProperty({}, EMAIL_ID, 'charlie.delta@homeoffice.gov.uk')];
44
44
  expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([]);
45
45
  });
46
- it('should return an array containing an error when the collection has an invalid first item', () => {
47
- const EMAIL_ID = 'email';
48
- const EMAIL_LABEL = 'Email';
49
- const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
50
- const ID = 'container';
51
- const LABEL = 'field';
52
- const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
53
- const ITEMS = [{
54
- [EMAIL_ID]: 'alpha.bravo@digital.homeoffice.com'
55
- }, {
56
- [EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
57
- }];
46
+ it('should return an array containing an error when the collection has an invalid first item', function () {
47
+ var EMAIL_ID = 'email';
48
+ var EMAIL_LABEL = 'Email';
49
+ var EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
50
+ var ID = 'container';
51
+ var LABEL = 'field';
52
+ var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
53
+ var ITEMS = [_defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.com'), _defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.gov.uk')];
58
54
  expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([{
59
55
  id: "".concat(ID, "[0].").concat(EMAIL_ID),
60
56
  error: "Enter ".concat(EMAIL_LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk")
61
57
  }]);
62
58
  });
63
- it('should return an array containing an error when the collection has an invalid second item', () => {
64
- const EMAIL_ID = 'email';
65
- const EMAIL_LABEL = 'Email';
66
- const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
67
- const ID = 'container';
68
- const LABEL = 'field';
69
- const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
70
- const ITEMS = [{
71
- [EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
72
- }, {
73
- [EMAIL_ID]: 'alpha.bravo@digital.homeoffice.com'
74
- }];
59
+ it('should return an array containing an error when the collection has an invalid second item', function () {
60
+ var EMAIL_ID = 'email';
61
+ var EMAIL_LABEL = 'Email';
62
+ var EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
63
+ var ID = 'container';
64
+ var LABEL = 'field';
65
+ var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
66
+ var ITEMS = [_defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.gov.uk'), _defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.com')];
75
67
  expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([{
76
68
  id: "".concat(ID, "[1].").concat(EMAIL_ID),
77
69
  error: "Enter ".concat(EMAIL_LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk")
78
70
  }]);
79
71
  });
80
- it('should correctly interpolate error messages using collection\'s index', () => {
81
- const ID = 'container';
82
- const LABEL = 'field';
83
- const TYPE = 'autocomplete';
84
- const ITEM = setup(ID, TYPE, LABEL, true, []);
72
+ it('should correctly interpolate error messages using collection\'s index', function () {
73
+ var ID = 'container';
74
+ var LABEL = 'field';
75
+ var TYPE = 'autocomplete';
76
+ var ITEM = setup(ID, TYPE, LABEL, true, []);
85
77
  ITEM.custom_errors = [{
86
78
  "type": "required",
87
79
  // eslint-disable-next-line no-template-curly-in-string
88
80
  "message": "Test to check that ${index} is 1"
89
81
  }];
90
- const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
82
+ var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
91
83
  COLLECTION.countOffset = 0;
92
84
  expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
93
85
  error: "Test to check that 1 is 1",
94
86
  id: "".concat(ID, "[0].").concat(COLLECTION.type)
95
87
  }]);
96
88
  });
97
- it('should correctly display firstOnlyMessage error message', () => {
98
- const ID = 'container';
99
- const LABEL = 'field';
100
- const TYPE = 'autocomplete';
101
- const ITEM = setup(ID, TYPE, LABEL, true, []);
89
+ it('should correctly display firstOnlyMessage error message', function () {
90
+ var ID = 'container';
91
+ var LABEL = 'field';
92
+ var TYPE = 'autocomplete';
93
+ var ITEM = setup(ID, TYPE, LABEL, true, []);
102
94
  ITEM.custom_errors = [{
103
95
  "type": "required",
104
96
  // eslint-disable-next-line no-template-curly-in-string
105
97
  "message": "Test to check that ${index} is 1",
106
98
  "firstOnlyMessage": "Test for first message"
107
99
  }];
108
- const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
100
+ var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
109
101
  COLLECTION.countOffset = 0;
110
102
  expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
111
103
  error: "Test for first message",
112
104
  id: "".concat(ID, "[0].").concat(COLLECTION.type)
113
105
  }]);
114
106
  });
115
- it('should correctly display message if firstOnlyMessage is undefined', () => {
116
- const ID = 'container';
117
- const LABEL = 'field';
118
- const TYPE = 'autocomplete';
119
- const ITEM = setup(ID, TYPE, LABEL, true, []);
107
+ it('should correctly display message if firstOnlyMessage is undefined', function () {
108
+ var ID = 'container';
109
+ var LABEL = 'field';
110
+ var TYPE = 'autocomplete';
111
+ var ITEM = setup(ID, TYPE, LABEL, true, []);
120
112
  ITEM.custom_errors = [{
121
113
  "type": "required",
122
114
  // eslint-disable-next-line no-template-curly-in-string
123
115
  "message": "Test to check that ${index} is 1",
124
116
  "firstOnlyMessage": undefined
125
117
  }];
126
- const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
118
+ var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
127
119
  COLLECTION.countOffset = 0;
128
120
  expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
129
121
  error: "Test to check that 1 is 1",
@@ -19,8 +19,12 @@ var _validateRequired = _interopRequireDefault(require("./validateRequired"));
19
19
  var _validateTextArea = _interopRequireDefault(require("./validateTextArea"));
20
20
  var _validateTime = _interopRequireDefault(require("./validateTime"));
21
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
- // Local imports
23
-
22
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
23
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
26
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
27
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // Local imports
24
28
  /**
25
29
  * Validates a single component.
26
30
  * @param {object} component The component to validate.
@@ -28,18 +32,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
28
32
  * @param {object} formData The data at the top level of the form.
29
33
  * @returns The first encountered error with the component.
30
34
  */
31
- const validateComponent = (component, outerData, formData) => {
32
- const fd = formData || outerData;
33
- if (!(0, _showComponent.default)(component, fd)) {
35
+ var validateComponent = function validateComponent(component, outerData, formData) {
36
+ var fd = formData || outerData;
37
+ if (!(0, _showComponent.default)(component, _objectSpread(_objectSpread({}, fd), outerData))) {
34
38
  return undefined;
35
39
  }
36
40
  if (component.type === _models.ComponentTypes.CONTAINER) {
37
41
  return (0, _validateContainer.default)(component, outerData, fd);
38
42
  }
39
- let error;
40
- let properties;
41
- const data = outerData && typeof outerData === 'object' ? outerData : {};
42
- let value = data[component.fieldId];
43
+ var error;
44
+ var properties;
45
+ var data = outerData && _typeof(outerData) === 'object' ? outerData : {};
46
+ var value = data[component.fieldId];
43
47
  if (component.type === _models.ComponentTypes.COLLECTION_SUMMARY) {
44
48
  value = (0, _getCollectionPageData.default)(component.collectionName, fd);
45
49
  }
@@ -56,11 +60,10 @@ const validateComponent = (component, outerData, formData) => {
56
60
  case _models.ComponentTypes.DATE:
57
61
  case _models.ComponentTypes.TIME:
58
62
  {
59
- const validator = component.type === _models.ComponentTypes.DATE ? _validateDate.default : _validateTime.default;
60
- const {
61
- message,
62
- propsInError
63
- } = validator(value);
63
+ var validator = component.type === _models.ComponentTypes.DATE ? _validateDate.default : _validateTime.default;
64
+ var _validator = validator(value),
65
+ message = _validator.message,
66
+ propsInError = _validator.propsInError;
64
67
  properties = propsInError;
65
68
  error = message;
66
69
  break;
@@ -70,8 +73,8 @@ const validateComponent = (component, outerData, formData) => {
70
73
  case _models.ComponentTypes.RADIOS:
71
74
  {
72
75
  var _component$data$optio;
73
- let nestedErrors = [];
74
- (_component$data$optio = component.data.options) === null || _component$data$optio === void 0 || _component$data$optio.forEach(option => {
76
+ var nestedErrors = [];
77
+ (_component$data$optio = component.data.options) === null || _component$data$optio === void 0 || _component$data$optio.forEach(function (option) {
75
78
  if (option.nested && (0, _optionIsSelected.default)(formData[component.id], option)) {
76
79
  nestedErrors = nestedErrors.concat((0, _validateContainer.default)({
77
80
  components: option.nested
@@ -110,8 +113,8 @@ const validateComponent = (component, outerData, formData) => {
110
113
  if (error) {
111
114
  return {
112
115
  id: component.full_path || component.id,
113
- error,
114
- properties
116
+ error: error,
117
+ properties: properties
115
118
  };
116
119
  }
117
120
  return undefined;