@ukhomeoffice/cop-react-form-renderer 5.89.0 → 5.90.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 (384) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +15 -15
  2. package/dist/components/CheckYourAnswers/Answer.test.js +132 -181
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +106 -142
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +563 -941
  5. package/dist/components/CheckYourAnswers/index.js +1 -1
  6. package/dist/components/CollectionPage/CollectionPage.js +76 -66
  7. package/dist/components/CollectionPage/CollectionPage.test.js +318 -369
  8. package/dist/components/CollectionPage/index.js +1 -1
  9. package/dist/components/CollectionSummary/BannerStrip.js +15 -15
  10. package/dist/components/CollectionSummary/BannerStrip.test.js +83 -79
  11. package/dist/components/CollectionSummary/CollectionSummary.js +109 -131
  12. package/dist/components/CollectionSummary/CollectionSummary.test.js +198 -180
  13. package/dist/components/CollectionSummary/Confirmation.js +15 -13
  14. package/dist/components/CollectionSummary/Confirmation.test.js +68 -63
  15. package/dist/components/CollectionSummary/RenderListView.js +47 -55
  16. package/dist/components/CollectionSummary/RenderListView.test.js +82 -81
  17. package/dist/components/CollectionSummary/SummaryCard.js +121 -157
  18. package/dist/components/CollectionSummary/SummaryCard.test.js +970 -1000
  19. package/dist/components/CollectionSummary/SummaryCardDetails.js +103 -94
  20. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +187 -195
  21. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +31 -36
  22. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +64 -76
  23. package/dist/components/CollectionSummary/index.js +1 -1
  24. package/dist/components/FormComponent/Collection.js +81 -117
  25. package/dist/components/FormComponent/Collection.scss +1 -1
  26. package/dist/components/FormComponent/Collection.test.js +910 -1082
  27. package/dist/components/FormComponent/Container.js +45 -38
  28. package/dist/components/FormComponent/Container.scss +15 -0
  29. package/dist/components/FormComponent/Container.test.js +379 -411
  30. package/dist/components/FormComponent/FormComponent.js +71 -74
  31. package/dist/components/FormComponent/FormComponent.test.js +354 -415
  32. package/dist/components/FormComponent/helpers/addLabel.js +4 -7
  33. package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
  34. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +8 -8
  35. package/dist/components/FormComponent/helpers/getComponentError.js +3 -5
  36. package/dist/components/FormComponent/helpers/getComponentError.test.js +15 -15
  37. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +3 -4
  38. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +7 -7
  39. package/dist/components/FormComponent/helpers/index.js +5 -5
  40. package/dist/components/FormComponent/index.js +1 -1
  41. package/dist/components/FormPage/FormPage.js +71 -87
  42. package/dist/components/FormPage/FormPage.test.js +133 -170
  43. package/dist/components/FormPage/index.js +1 -1
  44. package/dist/components/FormRenderer/FormRenderer.js +153 -198
  45. package/dist/components/FormRenderer/FormRenderer.test.js +731 -1116
  46. package/dist/components/FormRenderer/handlers/cyaAction.js +3 -3
  47. package/dist/components/FormRenderer/handlers/getPageId.js +1 -3
  48. package/dist/components/FormRenderer/handlers/getPageId.test.js +15 -15
  49. package/dist/components/FormRenderer/handlers/handlers.test.js +33 -33
  50. package/dist/components/FormRenderer/handlers/index.js +2 -2
  51. package/dist/components/FormRenderer/handlers/navigate.js +4 -4
  52. package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
  53. package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
  54. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +16 -16
  55. package/dist/components/FormRenderer/helpers/canCYASubmit.js +1 -3
  56. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +17 -21
  57. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +27 -30
  58. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +21 -21
  59. package/dist/components/FormRenderer/helpers/getCYA.js +5 -7
  60. package/dist/components/FormRenderer/helpers/getCYA.test.js +12 -12
  61. package/dist/components/FormRenderer/helpers/getFormState.js +6 -8
  62. package/dist/components/FormRenderer/helpers/getFormState.test.js +11 -11
  63. package/dist/components/FormRenderer/helpers/getNextPageId.js +18 -32
  64. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +68 -68
  65. package/dist/components/FormRenderer/helpers/getPage.js +2 -4
  66. package/dist/components/FormRenderer/helpers/getPage.test.js +12 -12
  67. package/dist/components/FormRenderer/helpers/getRelevantPages.js +8 -11
  68. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +15 -15
  69. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +12 -13
  70. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +104 -98
  71. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +65 -64
  72. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +72 -79
  73. package/dist/components/FormRenderer/helpers/index.js +2 -2
  74. package/dist/components/FormRenderer/index.js +1 -1
  75. package/dist/components/FormRenderer/onCYAAction.js +61 -54
  76. package/dist/components/FormRenderer/onCYAAction.test.js +165 -153
  77. package/dist/components/FormRenderer/onPageAction.js +45 -41
  78. package/dist/components/FormRenderer/onPageAction.test.js +225 -210
  79. package/dist/components/FormRenderer/onTaskAction.js +11 -15
  80. package/dist/components/FormRenderer/onTaskAction.test.js +94 -89
  81. package/dist/components/PageActions/ActionButton.js +13 -16
  82. package/dist/components/PageActions/ActionButton.test.js +57 -79
  83. package/dist/components/PageActions/PageActions.js +11 -11
  84. package/dist/components/PageActions/PageActions.test.js +87 -116
  85. package/dist/components/PageActions/index.js +1 -1
  86. package/dist/components/SummaryList/GroupAction.js +13 -21
  87. package/dist/components/SummaryList/GroupAction.test.js +41 -37
  88. package/dist/components/SummaryList/RowAction.js +12 -17
  89. package/dist/components/SummaryList/RowAction.test.js +41 -37
  90. package/dist/components/SummaryList/SummaryList.js +23 -28
  91. package/dist/components/SummaryList/SummaryList.test.js +179 -206
  92. package/dist/components/SummaryList/SummaryListHeadingRow.js +8 -6
  93. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +7 -5
  94. package/dist/components/SummaryList/SummaryListRow.js +8 -6
  95. package/dist/components/SummaryList/SummaryListTitleRow.js +7 -5
  96. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +4 -6
  97. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +24 -24
  98. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +4 -6
  99. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +24 -24
  100. package/dist/components/SummaryList/helpers/index.js +2 -2
  101. package/dist/components/SummaryList/index.js +1 -1
  102. package/dist/components/TaskList/Task.js +20 -30
  103. package/dist/components/TaskList/Task.test.js +84 -77
  104. package/dist/components/TaskList/TaskList.js +53 -84
  105. package/dist/components/TaskList/TaskList.test.js +150 -150
  106. package/dist/components/TaskList/TaskState.js +8 -6
  107. package/dist/components/TaskList/TaskState.test.js +56 -49
  108. package/dist/components/TaskList/index.js +1 -1
  109. package/dist/components/index.js +8 -8
  110. package/dist/context/HooksContext/HooksContext.js +58 -81
  111. package/dist/context/HooksContext/HooksContext.test.js +27 -36
  112. package/dist/context/HooksContext/index.js +3 -4
  113. package/dist/context/ValidationContext/ValidationContext.js +44 -95
  114. package/dist/context/ValidationContext/ValidationContext.test.js +58 -70
  115. package/dist/context/ValidationContext/index.js +3 -4
  116. package/dist/context/index.js +3 -3
  117. package/dist/hooks/index.js +10 -11
  118. package/dist/hooks/useAxios.js +15 -41
  119. package/dist/hooks/useGetRequest.js +62 -98
  120. package/dist/hooks/useHooks.js +1 -3
  121. package/dist/hooks/useRefData.js +28 -41
  122. package/dist/hooks/useValidation.js +1 -3
  123. package/dist/index.js +14 -15
  124. package/dist/models/CollectionLabels.js +1 -1
  125. package/dist/models/ComponentTypes.js +25 -25
  126. package/dist/models/EventTypes.js +4 -4
  127. package/dist/models/FormPages.js +4 -4
  128. package/dist/models/FormTypes.js +8 -8
  129. package/dist/models/HubFormats.js +3 -3
  130. package/dist/models/PageAction.js +44 -38
  131. package/dist/models/TaskStates.js +29 -28
  132. package/dist/models/index.js +10 -10
  133. package/dist/setupTests.js +31 -32
  134. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  135. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +53 -55
  136. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +17 -27
  137. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +34 -36
  138. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +20 -34
  139. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +43 -45
  140. package/dist/utils/CheckYourAnswers/getCYARow.js +8 -10
  141. package/dist/utils/CheckYourAnswers/getCYARow.test.js +87 -87
  142. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +19 -25
  143. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +16 -17
  144. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +39 -45
  145. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +72 -75
  146. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +100 -105
  147. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +218 -182
  148. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +26 -21
  149. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +112 -106
  150. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +15 -21
  151. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +77 -83
  152. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +13 -13
  153. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +14 -19
  154. package/dist/utils/CheckYourAnswers/index.js +2 -2
  155. package/dist/utils/CheckYourAnswers/showComponentCYA.js +6 -6
  156. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +26 -26
  157. package/dist/utils/CollectionPage/addCollectionPageEntry.js +3 -3
  158. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +6 -6
  159. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +3 -3
  160. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +21 -22
  161. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +15 -24
  162. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +52 -43
  163. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +3 -3
  164. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +11 -11
  165. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +7 -12
  166. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +23 -23
  167. package/dist/utils/CollectionPage/getCollectionPageData.js +8 -13
  168. package/dist/utils/CollectionPage/getCollectionPageData.test.js +20 -20
  169. package/dist/utils/CollectionPage/getErrorsForCollection.js +25 -26
  170. package/dist/utils/CollectionPage/getErrorsForCollection.test.js +21 -23
  171. package/dist/utils/CollectionPage/getQuickEditPage.js +37 -32
  172. package/dist/utils/CollectionPage/getQuickEditPage.test.js +18 -22
  173. package/dist/utils/CollectionPage/index.js +2 -2
  174. package/dist/utils/CollectionPage/mergeCollectionPages.js +37 -42
  175. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +26 -22
  176. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +5 -7
  177. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +11 -11
  178. package/dist/utils/CollectionPage/setCollectionPageData.js +13 -19
  179. package/dist/utils/CollectionPage/setCollectionPageData.test.js +26 -26
  180. package/dist/utils/Component/addShowWhen.js +4 -8
  181. package/dist/utils/Component/addShowWhen.test.js +38 -38
  182. package/dist/utils/Component/applyToComponentTree.js +19 -20
  183. package/dist/utils/Component/applyToComponentTree.test.js +28 -33
  184. package/dist/utils/Component/cleanAttributes.js +10 -13
  185. package/dist/utils/Component/cleanAttributes.test.js +17 -18
  186. package/dist/utils/Component/elevateNestedComponents.js +6 -7
  187. package/dist/utils/Component/elevateNestedComponents.test.js +34 -34
  188. package/dist/utils/Component/getComponent.js +90 -97
  189. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +19 -18
  190. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +50 -63
  191. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +40 -49
  192. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +30 -40
  193. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +21 -19
  194. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +18 -23
  195. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +22 -27
  196. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +12 -11
  197. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +18 -16
  198. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +10 -9
  199. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +18 -16
  200. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +23 -27
  201. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +155 -175
  202. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +18 -16
  203. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +18 -23
  204. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +58 -73
  205. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +18 -23
  206. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +18 -23
  207. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +34 -41
  208. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +23 -32
  209. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +3 -3
  210. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +10 -9
  211. package/dist/utils/Component/getDefaultValue.js +7 -9
  212. package/dist/utils/Component/getDefaultValue.test.js +13 -13
  213. package/dist/utils/Component/getDefaultValueFromConfig.js +24 -24
  214. package/dist/utils/Component/getDefaultValueFromConfig.test.js +32 -32
  215. package/dist/utils/Component/index.js +2 -2
  216. package/dist/utils/Component/isEditable.js +2 -4
  217. package/dist/utils/Component/isEditable.test.js +14 -15
  218. package/dist/utils/Component/optionIsSelected.js +2 -4
  219. package/dist/utils/Component/optionIsSelected.test.js +12 -12
  220. package/dist/utils/Component/setupContainerComponentsPath.js +29 -31
  221. package/dist/utils/Component/setupContainerComponentsPath.test.js +16 -16
  222. package/dist/utils/Component/showComponent.js +3 -4
  223. package/dist/utils/Component/showComponent.test.js +29 -29
  224. package/dist/utils/Component/wrapInFormGroup.js +4 -4
  225. package/dist/utils/Condition/index.js +2 -2
  226. package/dist/utils/Condition/meetsAllConditions.js +9 -9
  227. package/dist/utils/Condition/meetsAllConditions.test.js +21 -21
  228. package/dist/utils/Condition/meetsCondition.js +20 -31
  229. package/dist/utils/Condition/meetsCondition.test.js +403 -403
  230. package/dist/utils/Condition/meetsOneCondition.js +6 -6
  231. package/dist/utils/Condition/meetsOneCondition.test.js +17 -17
  232. package/dist/utils/Condition/setupConditions.js +14 -19
  233. package/dist/utils/Condition/setupConditions.test.js +8 -8
  234. package/dist/utils/Container/getEditableComponents.js +4 -6
  235. package/dist/utils/Container/getEditableComponents.test.js +44 -46
  236. package/dist/utils/Container/index.js +2 -2
  237. package/dist/utils/Container/setupNesting.js +16 -22
  238. package/dist/utils/Container/setupNesting.test.js +28 -31
  239. package/dist/utils/Container/showContainer.js +4 -8
  240. package/dist/utils/Container/showContainer.test.js +31 -31
  241. package/dist/utils/Data/applyFormula.js +40 -50
  242. package/dist/utils/Data/applyFormula.test.js +26 -26
  243. package/dist/utils/Data/deleteValues.js +4 -8
  244. package/dist/utils/Data/deleteValues.test.js +11 -11
  245. package/dist/utils/Data/getAutocompleteSource.js +20 -29
  246. package/dist/utils/Data/getAutocompleteSource.test.js +81 -87
  247. package/dist/utils/Data/getDataPath.js +20 -30
  248. package/dist/utils/Data/getDataPath.test.js +20 -20
  249. package/dist/utils/Data/getOptions.js +27 -34
  250. package/dist/utils/Data/getOptions.test.js +28 -28
  251. package/dist/utils/Data/getSourceData.js +6 -19
  252. package/dist/utils/Data/getSourceData.test.js +85 -81
  253. package/dist/utils/Data/index.js +2 -2
  254. package/dist/utils/Data/nestInRefdataOptions.js +9 -16
  255. package/dist/utils/Data/nestInRefdataOptions.test.js +17 -17
  256. package/dist/utils/Data/refDataToOptions.js +11 -15
  257. package/dist/utils/Data/refDataToOptions.test.js +20 -20
  258. package/dist/utils/Data/setDataItem.js +7 -8
  259. package/dist/utils/Data/setDataItem.test.js +38 -38
  260. package/dist/utils/Data/setupFormData.js +14 -22
  261. package/dist/utils/Data/setupFormData.test.js +52 -51
  262. package/dist/utils/Data/setupRefDataUrlForComponent.js +21 -28
  263. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +28 -28
  264. package/dist/utils/FormPage/applyConditionalProperties.js +6 -10
  265. package/dist/utils/FormPage/applyConditionalProperties.test.js +16 -19
  266. package/dist/utils/FormPage/getConditionalText.js +4 -4
  267. package/dist/utils/FormPage/getConditionalText.test.js +35 -35
  268. package/dist/utils/FormPage/getFormPage.js +16 -17
  269. package/dist/utils/FormPage/getFormPage.test.js +49 -48
  270. package/dist/utils/FormPage/getFormPages.js +8 -13
  271. package/dist/utils/FormPage/getFormPages.test.js +22 -25
  272. package/dist/utils/FormPage/getPageActions.js +10 -17
  273. package/dist/utils/FormPage/getPageActions.test.js +33 -33
  274. package/dist/utils/FormPage/getParagraphFromText.js +5 -7
  275. package/dist/utils/FormPage/getParagraphFromText.test.js +7 -7
  276. package/dist/utils/FormPage/index.js +3 -5
  277. package/dist/utils/FormPage/showFormPage.js +4 -8
  278. package/dist/utils/FormPage/showFormPage.test.js +33 -33
  279. package/dist/utils/FormPage/showFormPageCYA.js +3 -3
  280. package/dist/utils/FormPage/showFormPageCYA.test.js +9 -9
  281. package/dist/utils/FormPage/useComponent.js +21 -28
  282. package/dist/utils/FormPage/useComponent.test.js +78 -80
  283. package/dist/utils/Format/formatData.js +1 -1
  284. package/dist/utils/Format/formatData.test.js +19 -19
  285. package/dist/utils/Format/formatDataForComponent.js +6 -7
  286. package/dist/utils/Format/formatDataForComponent.test.js +50 -78
  287. package/dist/utils/Format/formatDataForForm.js +6 -8
  288. package/dist/utils/Format/formatDataForForm.test.js +14 -17
  289. package/dist/utils/Format/formatDataForPage.js +4 -5
  290. package/dist/utils/Format/formatDataForPage.test.js +20 -25
  291. package/dist/utils/Format/index.js +2 -2
  292. package/dist/utils/Hub/getFormHub.js +2 -2
  293. package/dist/utils/Hub/getFormHub.test.js +29 -32
  294. package/dist/utils/Hub/index.js +2 -2
  295. package/dist/utils/Meta/constants.js +2 -2
  296. package/dist/utils/Meta/documents/getDocuments.js +1 -4
  297. package/dist/utils/Meta/documents/getDocuments.test.js +25 -17
  298. package/dist/utils/Meta/documents/index.js +2 -2
  299. package/dist/utils/Meta/documents/setDocumentsForField.js +15 -17
  300. package/dist/utils/Meta/documents/setDocumentsForField.test.js +69 -35
  301. package/dist/utils/Meta/index.js +2 -2
  302. package/dist/utils/Operate/checkValueIsTruthy.js +4 -4
  303. package/dist/utils/Operate/checkValueIsTruthy.test.js +17 -17
  304. package/dist/utils/Operate/deleteValueInFormData.js +3 -3
  305. package/dist/utils/Operate/deleteValueInFormData.test.js +15 -15
  306. package/dist/utils/Operate/getFirstOf.js +8 -8
  307. package/dist/utils/Operate/getFirstOf.test.js +33 -33
  308. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +12 -12
  309. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +47 -53
  310. package/dist/utils/Operate/getLength.js +11 -11
  311. package/dist/utils/Operate/getLength.test.js +19 -19
  312. package/dist/utils/Operate/index.js +2 -2
  313. package/dist/utils/Operate/persistValueInFormData.js +6 -6
  314. package/dist/utils/Operate/persistValueInFormData.test.js +23 -21
  315. package/dist/utils/Operate/runPageOperations.js +9 -9
  316. package/dist/utils/Operate/runPageOperations.test.js +36 -37
  317. package/dist/utils/Operate/setValueInFormData.js +5 -5
  318. package/dist/utils/Operate/setValueInFormData.test.js +17 -17
  319. package/dist/utils/Operate/shouldRun.js +8 -8
  320. package/dist/utils/Operate/shouldRun.test.js +22 -28
  321. package/dist/utils/Validate/additional/conditionallyPermittedChange.js +25 -0
  322. package/dist/utils/Validate/additional/conditionallyPermittedChange.test.js +33 -0
  323. package/dist/utils/Validate/additional/conditionallyRequired.js +4 -5
  324. package/dist/utils/Validate/additional/conditionallyRequired.test.js +19 -19
  325. package/dist/utils/Validate/additional/index.js +10 -8
  326. package/dist/utils/Validate/additional/index.test.js +22 -22
  327. package/dist/utils/Validate/additional/mustBeAfter.js +3 -3
  328. package/dist/utils/Validate/additional/mustBeAfter.test.js +41 -41
  329. package/dist/utils/Validate/additional/mustBeBefore.js +3 -3
  330. package/dist/utils/Validate/additional/mustBeBefore.test.js +29 -29
  331. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +9 -14
  332. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +38 -42
  333. package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
  334. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +19 -19
  335. package/dist/utils/Validate/additional/mustBeInTheFuture.js +4 -4
  336. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +13 -13
  337. package/dist/utils/Validate/additional/mustBeInThePast.js +5 -5
  338. package/dist/utils/Validate/additional/mustBeInThePast.test.js +13 -13
  339. package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
  340. package/dist/utils/Validate/additional/mustBeLessThan.test.js +18 -18
  341. package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
  342. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +17 -17
  343. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
  344. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +21 -21
  345. package/dist/utils/Validate/additional/mustBeOneOf.js +1 -1
  346. package/dist/utils/Validate/additional/mustBeOneOf.test.js +13 -13
  347. package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
  348. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +17 -17
  349. package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +5 -5
  350. package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +36 -40
  351. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +3 -5
  352. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +15 -17
  353. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
  354. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +13 -13
  355. package/dist/utils/Validate/additional/mustNotContainSql.js +3 -4
  356. package/dist/utils/Validate/additional/mustNotContainSql.test.js +15 -15
  357. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +3 -5
  358. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +29 -27
  359. package/dist/utils/Validate/additional/utils.js +11 -24
  360. package/dist/utils/Validate/index.js +2 -2
  361. package/dist/utils/Validate/validateCollection.js +21 -27
  362. package/dist/utils/Validate/validateCollection.test.js +85 -77
  363. package/dist/utils/Validate/validateComponent.js +22 -23
  364. package/dist/utils/Validate/validateComponent.test.js +188 -165
  365. package/dist/utils/Validate/validateContainer.js +16 -21
  366. package/dist/utils/Validate/validateContainer.test.js +62 -56
  367. package/dist/utils/Validate/validateDate.js +17 -23
  368. package/dist/utils/Validate/validateDate.test.js +31 -32
  369. package/dist/utils/Validate/validateEmail.js +7 -9
  370. package/dist/utils/Validate/validateEmail.test.js +26 -26
  371. package/dist/utils/Validate/validateMultifile.js +5 -7
  372. package/dist/utils/Validate/validateMultifile.test.js +17 -18
  373. package/dist/utils/Validate/validatePage.js +20 -24
  374. package/dist/utils/Validate/validatePage.test.js +227 -215
  375. package/dist/utils/Validate/validateRegex.js +5 -8
  376. package/dist/utils/Validate/validateRegex.test.js +17 -17
  377. package/dist/utils/Validate/validateRequired.js +5 -7
  378. package/dist/utils/Validate/validateRequired.test.js +19 -19
  379. package/dist/utils/Validate/validateTextArea.js +5 -7
  380. package/dist/utils/Validate/validateTextArea.test.js +21 -21
  381. package/dist/utils/Validate/validateTime.js +12 -19
  382. package/dist/utils/Validate/validateTime.test.js +27 -27
  383. package/dist/utils/index.js +8 -10
  384. package/package.json +3 -2
@@ -1,41 +1,36 @@
1
1
  "use strict";
2
2
 
3
3
  var _runPageOperations = _interopRequireDefault(require("./runPageOperations"));
4
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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 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; }
7
- 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; }
8
- 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; }
9
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
10
- 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); }
11
- describe('Utils.Operate.runPageOperations', function () {
12
- var DATA = {
4
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
5
+ describe('Utils.Operate.runPageOperations', () => {
6
+ const DATA = {
13
7
  alpha: 'abc',
14
8
  bravo: ['bcd', 'cde', 'charlie'],
15
9
  charlie: 'def',
16
10
  delta: 'root',
17
11
  array: ['123', '234', '456']
18
12
  };
19
- it('Should return an empty object when no operations are specified', function () {
20
- var PAGE = {};
21
- var result = (0, _runPageOperations.default)(PAGE, DATA);
13
+ it('Should return an empty object when no operations are specified', () => {
14
+ const PAGE = {};
15
+ const result = (0, _runPageOperations.default)(PAGE, DATA);
22
16
  expect(result).toEqual(DATA);
23
17
  });
24
- it('Should handle a single operation correctly', function () {
25
- var PAGE = {
18
+ it('Should handle a single operation correctly', () => {
19
+ const PAGE = {
26
20
  operations: [{
27
21
  output: 'firstOpResult',
28
22
  function: 'setValueInFormData',
29
23
  field: 'alpha'
30
24
  }]
31
25
  };
32
- var result = (0, _runPageOperations.default)(PAGE, DATA);
33
- expect(result).toEqual(_objectSpread(_objectSpread({}, DATA), {}, {
26
+ const result = (0, _runPageOperations.default)(PAGE, DATA);
27
+ expect(result).toEqual({
28
+ ...DATA,
34
29
  firstOpResult: 'abc'
35
- }));
30
+ });
36
31
  });
37
- it('Should handle a multiple operations correctly', function () {
38
- var PAGE = {
32
+ it('Should handle a multiple operations correctly', () => {
33
+ const PAGE = {
39
34
  operations: [{
40
35
  output: 'firstOpResult',
41
36
  function: 'setValueInFormData',
@@ -46,14 +41,15 @@ describe('Utils.Operate.runPageOperations', function () {
46
41
  field: 'bravo[1]'
47
42
  }]
48
43
  };
49
- var result = (0, _runPageOperations.default)(PAGE, DATA);
50
- expect(result).toEqual(_objectSpread(_objectSpread({}, DATA), {}, {
44
+ const result = (0, _runPageOperations.default)(PAGE, DATA);
45
+ expect(result).toEqual({
46
+ ...DATA,
51
47
  firstOpResult: 'abc',
52
48
  secondOpResult: 'cde'
53
- }));
49
+ });
54
50
  });
55
- it('Should handle chained operations correctly', function () {
56
- var PAGE = {
51
+ it('Should handle chained operations correctly', () => {
52
+ const PAGE = {
57
53
  operations: [{
58
54
  output: 'firstOpResult',
59
55
  function: 'setValueInFormData',
@@ -65,14 +61,15 @@ describe('Utils.Operate.runPageOperations', function () {
65
61
  field: '${firstOpResult}'
66
62
  }]
67
63
  };
68
- var result = (0, _runPageOperations.default)(PAGE, DATA);
69
- expect(result).toEqual(_objectSpread(_objectSpread({}, DATA), {}, {
64
+ const result = (0, _runPageOperations.default)(PAGE, DATA);
65
+ expect(result).toEqual({
66
+ ...DATA,
70
67
  firstOpResult: 'charlie',
71
68
  secondOpResult: 'def'
72
- }));
69
+ });
73
70
  });
74
- it('Should handle an interpolated output string correctly', function () {
75
- var PAGE = {
71
+ it('Should handle an interpolated output string correctly', () => {
72
+ const PAGE = {
76
73
  operations: [{
77
74
  function: 'setValueInFormData',
78
75
  value: 'leaf',
@@ -80,26 +77,28 @@ describe('Utils.Operate.runPageOperations', function () {
80
77
  output: '${delta}.trunk.branch'
81
78
  }]
82
79
  };
83
- var result = (0, _runPageOperations.default)(PAGE, DATA);
84
- expect(result).toEqual(_objectSpread(_objectSpread({}, DATA), {}, {
80
+ const result = (0, _runPageOperations.default)(PAGE, DATA);
81
+ expect(result).toEqual({
82
+ ...DATA,
85
83
  root: {
86
84
  trunk: {
87
85
  branch: 'leaf'
88
86
  }
89
87
  }
90
- }));
88
+ });
91
89
  });
92
- it('Should handle an output string with array indeces in', function () {
93
- var PAGE = {
90
+ it('Should handle an output string with array indeces in', () => {
91
+ const PAGE = {
94
92
  operations: [{
95
93
  function: 'setValueInFormData',
96
94
  value: '000',
97
95
  output: 'array[1]'
98
96
  }]
99
97
  };
100
- var result = (0, _runPageOperations.default)(PAGE, DATA);
101
- expect(result).toEqual(_objectSpread(_objectSpread({}, DATA), {}, {
98
+ const result = (0, _runPageOperations.default)(PAGE, DATA);
99
+ expect(result).toEqual({
100
+ ...DATA,
102
101
  array: ['123', '000', '456']
103
- }));
102
+ });
104
103
  });
105
104
  });
@@ -6,16 +6,16 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
8
  var _getSourceData = _interopRequireDefault(require("../Data/getSourceData"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  // Global imports.
11
11
 
12
12
  // Local imports.
13
13
 
14
- var setValueInFormData = function setValueInFormData(config, data) {
15
- if (config !== null && config !== void 0 && config.field) {
16
- var fieldPath = _copReactComponents.Utils.interpolateString(config.field, data);
14
+ const setValueInFormData = (config, data) => {
15
+ if (config?.field) {
16
+ const fieldPath = _copReactComponents.Utils.interpolateString(config.field, data);
17
17
  return (0, _getSourceData.default)(data, fieldPath) || null;
18
18
  }
19
- return (config === null || config === void 0 ? void 0 : config.value) || null;
19
+ return config?.value || null;
20
20
  };
21
21
  var _default = exports.default = setValueInFormData;
@@ -1,44 +1,44 @@
1
1
  "use strict";
2
2
 
3
3
  var _setValueInFormData = _interopRequireDefault(require("./setValueInFormData"));
4
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
- describe('Utils.Operate.setValueInFormData', function () {
6
- var DATA = {
4
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
5
+ describe('Utils.Operate.setValueInFormData', () => {
6
+ const DATA = {
7
7
  a: '1',
8
8
  b: ['2', '3'],
9
9
  indexOfThree: 1
10
10
  };
11
- it('Should return the value provided in config if no field is specified', function () {
12
- var CONFIG = {
11
+ it('Should return the value provided in config if no field is specified', () => {
12
+ const CONFIG = {
13
13
  value: '2'
14
14
  };
15
- var result = (0, _setValueInFormData.default)(CONFIG, DATA);
15
+ const result = (0, _setValueInFormData.default)(CONFIG, DATA);
16
16
  expect(result).toEqual(CONFIG.value);
17
17
  });
18
- it('Should return the value of the field given in config, if it exists', function () {
19
- var CONFIG = {
18
+ it('Should return the value of the field given in config, if it exists', () => {
19
+ const CONFIG = {
20
20
  field: 'a'
21
21
  };
22
- var result = (0, _setValueInFormData.default)(CONFIG, DATA);
22
+ const result = (0, _setValueInFormData.default)(CONFIG, DATA);
23
23
  expect(result).toEqual(DATA.a);
24
24
  });
25
- it('Should handle interpolated field strings', function () {
25
+ it('Should handle interpolated field strings', () => {
26
26
  // eslint-disable-next-line no-template-curly-in-string
27
- var CONFIG = {
27
+ const CONFIG = {
28
28
  field: 'b[${indexOfThree}]'
29
29
  };
30
- var result = (0, _setValueInFormData.default)(CONFIG, DATA);
30
+ const result = (0, _setValueInFormData.default)(CONFIG, DATA);
31
31
  expect(result).toEqual(DATA.b[1]);
32
32
  });
33
- it('Should return null when an invalid config is used', function () {
34
- var result = (0, _setValueInFormData.default)(null, DATA);
33
+ it('Should return null when an invalid config is used', () => {
34
+ const result = (0, _setValueInFormData.default)(null, DATA);
35
35
  expect(result).toEqual(null);
36
36
  });
37
- it('Should return null when invalid data is used', function () {
38
- var CONFIG = {
37
+ it('Should return null when invalid data is used', () => {
38
+ const CONFIG = {
39
39
  field: 'a'
40
40
  };
41
- var result = (0, _setValueInFormData.default)(CONFIG, null);
41
+ const result = (0, _setValueInFormData.default)(CONFIG, null);
42
42
  expect(result).toEqual(null);
43
43
  });
44
44
  });
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
8
  var _getSourceData = _interopRequireDefault(require("../Data/getSourceData"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  // Global imports.
11
11
 
12
12
  // Local imports.
@@ -18,17 +18,17 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
18
18
  * @param {object} data The page's formData.
19
19
  * @returns
20
20
  */
21
- var shouldRun = function shouldRun(config, data) {
22
- if (config !== null && config !== void 0 && config.condition) {
23
- var configuration = config;
24
- var fieldPath = _copReactComponents.Utils.interpolateString(configuration.field, data);
25
- var fieldValue = (0, _getSourceData.default)(data, fieldPath);
21
+ const shouldRun = (config, data) => {
22
+ if (config?.condition) {
23
+ const configuration = config;
24
+ const fieldPath = _copReactComponents.Utils.interpolateString(configuration.field, data);
25
+ const fieldValue = (0, _getSourceData.default)(data, fieldPath);
26
26
  switch (configuration.condition) {
27
27
  // Only run the operation if a given field's value has changed.
28
28
  case 'changes':
29
29
  {
30
- var lastPath = "".concat(fieldPath, "LastValue");
31
- var lastValue = configuration[lastPath] || null;
30
+ const lastPath = `${fieldPath}LastValue`;
31
+ const lastValue = configuration[lastPath] || null;
32
32
  if (lastValue === null) {
33
33
  // If there isn't a last value then we assume
34
34
  // that this is the first render.
@@ -1,66 +1,60 @@
1
1
  "use strict";
2
2
 
3
3
  var _shouldRun = _interopRequireDefault(require("./shouldRun"));
4
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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 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; }
7
- 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; }
8
- 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; }
9
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
10
- 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); }
11
- describe('Utils.Operate.shouldRun', function () {
12
- var DATA = {
4
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
5
+ describe('Utils.Operate.shouldRun', () => {
6
+ const DATA = {
13
7
  alpha: 'abc',
14
8
  bravo: ''
15
9
  };
16
- it('Should return true if the run_when config is invalid', function () {
10
+ it('Should return true if the run_when config is invalid', () => {
17
11
  expect((0, _shouldRun.default)(null, DATA)).toEqual(true);
18
12
  });
19
- it('Should return true when the condition is \'changes\' and target value has changed', function () {
20
- var CONFIG = {
13
+ it('Should return true when the condition is \'changes\' and target value has changed', () => {
14
+ const CONFIG = {
21
15
  condition: 'changes',
22
16
  field: 'alpha'
23
17
  };
24
- var result = (0, _shouldRun.default)(CONFIG, DATA);
18
+ let result = (0, _shouldRun.default)(CONFIG, DATA);
25
19
  expect(result).toEqual(false); // Expect false as this is the first render.
26
20
  result = (0, _shouldRun.default)(CONFIG, DATA);
27
21
  expect(result).toEqual(false); // Expect false as the field hasn't changed.
28
- result = (0, _shouldRun.default)(CONFIG, _objectSpread(_objectSpread({}, DATA), {}, {
22
+ result = (0, _shouldRun.default)(CONFIG, {
23
+ ...DATA,
29
24
  alpha: 'bcd'
30
- }));
25
+ });
31
26
  expect(result).toEqual(true); // Expect true as the field's value has been updated.
32
27
  });
33
-
34
- it('Should return true when the condition is \'isTruthy\' and target value is truthy', function () {
35
- var CONFIG = {
28
+ it('Should return true when the condition is \'isTruthy\' and target value is truthy', () => {
29
+ const CONFIG = {
36
30
  condition: 'isTruthy',
37
31
  field: 'alpha'
38
32
  };
39
- var result = (0, _shouldRun.default)(CONFIG, DATA);
33
+ const result = (0, _shouldRun.default)(CONFIG, DATA);
40
34
  expect(result).toEqual(true);
41
35
  });
42
- it('Should return false when the condition is \'isTruthy\' and target value is falsy', function () {
43
- var CONFIG = {
36
+ it('Should return false when the condition is \'isTruthy\' and target value is falsy', () => {
37
+ const CONFIG = {
44
38
  condition: 'isTruthy',
45
39
  field: 'bravo'
46
40
  };
47
- var result = (0, _shouldRun.default)(CONFIG, DATA);
41
+ const result = (0, _shouldRun.default)(CONFIG, DATA);
48
42
  expect(result).toEqual(false);
49
43
  });
50
- it('Should return true when the condition is \'isFalsy\' and target value is falsy', function () {
51
- var CONFIG = {
44
+ it('Should return true when the condition is \'isFalsy\' and target value is falsy', () => {
45
+ const CONFIG = {
52
46
  condition: 'isFalsy',
53
47
  field: 'bravo'
54
48
  };
55
- var result = (0, _shouldRun.default)(CONFIG, DATA);
49
+ const result = (0, _shouldRun.default)(CONFIG, DATA);
56
50
  expect(result).toEqual(true);
57
51
  });
58
- it('Should return false when the condition is \'isFalsy\' and target value is truthy', function () {
59
- var CONFIG = {
52
+ it('Should return false when the condition is \'isFalsy\' and target value is truthy', () => {
53
+ const CONFIG = {
60
54
  condition: 'isFalsy',
61
55
  field: 'alpha'
62
56
  };
63
- var result = (0, _shouldRun.default)(CONFIG, DATA);
57
+ const result = (0, _shouldRun.default)(CONFIG, DATA);
64
58
  expect(result).toEqual(false);
65
59
  });
66
60
  });
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ /**
8
+ * Additional validator to not permit a value change if a specified item exists in formData.
9
+ * @param {object} data the changed value
10
+ * @param {object} config the config for the validation must contain
11
+ * a property 'base' holding the value for checking
12
+ * a property 'check' holding the formData item name to check if exists
13
+ * @param {object} formData the form data
14
+ * @returns false if:
15
+ * the 'base' value is not the same as the changed value AND
16
+ * the 'check' value exists in formData as an item
17
+ * otherwise returns true
18
+ */
19
+ const conditionallyPermittedChange = (data, config, _, formData) => {
20
+ if (data !== config.base && formData[config.check]) {
21
+ return false;
22
+ }
23
+ return true;
24
+ };
25
+ var _default = exports.default = conditionallyPermittedChange;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _conditionallyPermittedChange = _interopRequireDefault(require("./conditionallyPermittedChange"));
4
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
5
+ describe('utils', () => {
6
+ describe('Validate', () => {
7
+ describe('additional', () => {
8
+ describe('conditionallyPermittedChange', () => {
9
+ const CONFIG = {
10
+ base: 'Value1',
11
+ check: 'Item1'
12
+ };
13
+ test('should pass if the base value has same value as data parameter', () => {
14
+ const DATA = 'Value1';
15
+ const FORMDATA = {};
16
+ expect((0, _conditionallyPermittedChange.default)(DATA, CONFIG, null, FORMDATA)).toEqual(true);
17
+ });
18
+ test('should fail if the base value is different to data parameter and check item exists in form data', () => {
19
+ const DATA = 'Value2';
20
+ const FORMDATA = {
21
+ Item1: "any"
22
+ };
23
+ expect((0, _conditionallyPermittedChange.default)(DATA, CONFIG, null, FORMDATA)).toEqual(false);
24
+ });
25
+ test('should pass if the base value is different to data parameter and check item not exists in form data', () => {
26
+ const DATA = 'Value2';
27
+ const FORMDATA = {};
28
+ expect((0, _conditionallyPermittedChange.default)(DATA, CONFIG, null, FORMDATA)).toEqual(true);
29
+ });
30
+ });
31
+ });
32
+ });
33
+ });
@@ -13,11 +13,10 @@ exports.default = void 0;
13
13
  * @returns true if the user has entered data into the 'base' field or entered a value into the 'check' field to turn off the validation
14
14
  * otherwise returns false
15
15
  */
16
- var conditionallyRequired = function conditionallyRequired(data, config, component) {
17
- var _data$component$id, _data$component$id2;
18
- var conditional = (_data$component$id = data[component.id]) === null || _data$component$id === void 0 ? void 0 : _data$component$id[config.base];
19
- var checkFieldvalue = (_data$component$id2 = data[component.id]) === null || _data$component$id2 === void 0 ? void 0 : _data$component$id2[config.check];
20
- var checkHasValue = checkFieldvalue && (checkFieldvalue === null || checkFieldvalue === void 0 ? void 0 : checkFieldvalue.length) > 0;
16
+ const conditionallyRequired = (data, config, component) => {
17
+ const conditional = data[component.id]?.[config.base];
18
+ const checkFieldvalue = data[component.id]?.[config.check];
19
+ const checkHasValue = checkFieldvalue && checkFieldvalue?.length > 0;
21
20
  return !!(conditional || checkHasValue);
22
21
  };
23
22
  var _default = exports.default = conditionallyRequired;
@@ -1,16 +1,16 @@
1
1
  "use strict";
2
2
 
3
3
  var _conditionallyRequired = _interopRequireDefault(require("./conditionallyRequired"));
4
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
- describe('utils', function () {
6
- describe('Validate', function () {
7
- describe('additional', function () {
8
- describe('conditionallyRequired', function () {
9
- var CONFIG = {
4
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
5
+ describe('utils', () => {
6
+ describe('Validate', () => {
7
+ describe('additional', () => {
8
+ describe('conditionallyRequired', () => {
9
+ const CONFIG = {
10
10
  base: 'componentOne',
11
11
  check: 'componentTwo'
12
12
  };
13
- var COMPONENT = {
13
+ const COMPONENT = {
14
14
  id: 'containerComponent',
15
15
  fieldId: 'containerComponent',
16
16
  type: 'container',
@@ -24,16 +24,16 @@ describe('utils', function () {
24
24
  type: 'checkboxes'
25
25
  }]
26
26
  };
27
- test('should pass if only the base field has a value', function () {
28
- var DATA = {
27
+ test('should pass if only the base field has a value', () => {
28
+ const DATA = {
29
29
  containerComponent: {
30
30
  componentOne: 'value'
31
31
  }
32
32
  };
33
33
  expect((0, _conditionallyRequired.default)(DATA, CONFIG, COMPONENT)).toEqual(true);
34
34
  });
35
- test('should pass if the base and check fields have values', function () {
36
- var DATA = {
35
+ test('should pass if the base and check fields have values', () => {
36
+ const DATA = {
37
37
  containerComponent: {
38
38
  componentOne: 'value',
39
39
  componentTwo: 'value'
@@ -41,30 +41,30 @@ describe('utils', function () {
41
41
  };
42
42
  expect((0, _conditionallyRequired.default)(DATA, CONFIG, COMPONENT)).toEqual(true);
43
43
  });
44
- test('should pass if only the check field has a value', function () {
45
- var DATA = {
44
+ test('should pass if only the check field has a value', () => {
45
+ const DATA = {
46
46
  containerComponent: {
47
47
  componentTwo: 'value'
48
48
  }
49
49
  };
50
50
  expect((0, _conditionallyRequired.default)(DATA, CONFIG, COMPONENT)).toEqual(true);
51
51
  });
52
- test('should pass if only the check field has a value and that value is an array', function () {
53
- var DATA = {
52
+ test('should pass if only the check field has a value and that value is an array', () => {
53
+ const DATA = {
54
54
  containerComponent: {
55
55
  componentTwo: ['value']
56
56
  }
57
57
  };
58
58
  expect((0, _conditionallyRequired.default)(DATA, CONFIG, COMPONENT)).toEqual(true);
59
59
  });
60
- test('should fail if neither field has a value', function () {
61
- var DATA = {
60
+ test('should fail if neither field has a value', () => {
61
+ const DATA = {
62
62
  containerComponent: {}
63
63
  };
64
64
  expect((0, _conditionallyRequired.default)(DATA, CONFIG, COMPONENT)).toEqual(false);
65
65
  });
66
- test('should fail if there is no data', function () {
67
- var DATA = {};
66
+ test('should fail if there is no data', () => {
67
+ const DATA = {};
68
68
  expect((0, _conditionallyRequired.default)(DATA, CONFIG, COMPONENT)).toEqual(false);
69
69
  });
70
70
  });
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _conditionallyPermittedChange = _interopRequireDefault(require("./conditionallyPermittedChange"));
7
8
  var _conditionallyRequired = _interopRequireDefault(require("./conditionallyRequired"));
8
9
  var _mustBeAfter = _interopRequireDefault(require("./mustBeAfter"));
9
10
  var _mustBeBefore = _interopRequireDefault(require("./mustBeBefore"));
@@ -21,10 +22,11 @@ var _mustEnterAtLeastOne = _interopRequireDefault(require("./mustEnterAtLeastOne
21
22
  var _mustHaveLessThanDecimalPlaces = _interopRequireDefault(require("./mustHaveLessThanDecimalPlaces"));
22
23
  var _mustNotContainSql = _interopRequireDefault(require("./mustNotContainSql"));
23
24
  var _mustSelectOnlyOne = _interopRequireDefault(require("./mustSelectOnlyOne"));
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
26
  // Local imports
26
27
 
27
- var functions = {
28
+ const functions = {
29
+ conditionallyPermittedChange: _conditionallyPermittedChange.default,
28
30
  conditionallyRequired: _conditionallyRequired.default,
29
31
  mustBeAfter: _mustBeAfter.default,
30
32
  mustBeBefore: _mustBeBefore.default,
@@ -43,21 +45,21 @@ var functions = {
43
45
  mustNotContainSql: _mustNotContainSql.default,
44
46
  mustSelectOnlyOne: _mustSelectOnlyOne.default
45
47
  };
46
- var additionalValidation = function additionalValidation(value, config, component, formData) {
47
- var fn = functions[config.function];
48
- var valueToValidate = config.objectValueToUse ? value[config.objectValueToUse] : value;
48
+ const additionalValidation = (value, config, component, formData) => {
49
+ const fn = functions[config.function];
50
+ const valueToValidate = config.objectValueToUse ? value[config.objectValueToUse] : value;
49
51
  if (typeof fn === 'function') {
50
52
  return fn(valueToValidate, config, component, formData) ? undefined : config.message;
51
53
  }
52
54
  return undefined;
53
55
  };
54
- var runAdditionalComponentValidation = function runAdditionalComponentValidation(component, value, formData) {
56
+ const runAdditionalComponentValidation = (component, value, formData) => {
55
57
  // We only care when we have a value - if we don't have one but want one, set `required: true`.
56
58
  // eslint-disable-next-line no-extra-boolean-cast
57
59
  if (!!value) {
58
60
  if (Array.isArray(component.additionalValidation)) {
59
- var error;
60
- component.additionalValidation.forEach(function (config) {
61
+ let error;
62
+ component.additionalValidation.forEach(config => {
61
63
  // If we've already encountered an error, don't run any more validators.
62
64
  if (!error) {
63
65
  error = additionalValidation(value, config, component, formData);