@ukhomeoffice/cop-react-form-renderer 5.44.1-alpha → 5.45.2-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +12 -12
  2. package/dist/components/CheckYourAnswers/Answer.test.js +92 -127
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +101 -131
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +464 -769
  5. package/dist/components/CollectionPage/CollectionPage.js +66 -58
  6. package/dist/components/CollectionPage/CollectionPage.test.js +300 -342
  7. package/dist/components/CollectionSummary/BannerStrip.js +12 -12
  8. package/dist/components/CollectionSummary/BannerStrip.test.js +63 -59
  9. package/dist/components/CollectionSummary/CollectionSummary.js +104 -77
  10. package/dist/components/CollectionSummary/CollectionSummary.test.js +126 -81
  11. package/dist/components/CollectionSummary/Confirmation.js +14 -12
  12. package/dist/components/CollectionSummary/Confirmation.test.js +68 -63
  13. package/dist/components/CollectionSummary/SummaryCard.js +96 -131
  14. package/dist/components/CollectionSummary/SummaryCard.test.js +959 -810
  15. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +66 -0
  16. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +86 -0
  17. package/dist/components/FormComponent/Collection.js +73 -107
  18. package/dist/components/FormComponent/Collection.test.js +809 -945
  19. package/dist/components/FormComponent/Container.js +40 -38
  20. package/dist/components/FormComponent/Container.test.js +314 -345
  21. package/dist/components/FormComponent/FormComponent.js +67 -70
  22. package/dist/components/FormComponent/FormComponent.test.js +284 -342
  23. package/dist/components/FormComponent/helpers/addLabel.js +4 -7
  24. package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
  25. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +7 -7
  26. package/dist/components/FormComponent/helpers/getComponentError.js +3 -5
  27. package/dist/components/FormComponent/helpers/getComponentError.test.js +14 -14
  28. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +3 -4
  29. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +6 -6
  30. package/dist/components/FormComponent/helpers/index.js +4 -4
  31. package/dist/components/FormPage/FormPage.js +65 -80
  32. package/dist/components/FormPage/FormPage.test.js +127 -163
  33. package/dist/components/FormRenderer/FormRenderer.js +142 -178
  34. package/dist/components/FormRenderer/FormRenderer.test.js +730 -1115
  35. package/dist/components/FormRenderer/handlers/cyaAction.js +2 -2
  36. package/dist/components/FormRenderer/handlers/getPageId.js +1 -3
  37. package/dist/components/FormRenderer/handlers/getPageId.test.js +14 -14
  38. package/dist/components/FormRenderer/handlers/handlers.test.js +32 -32
  39. package/dist/components/FormRenderer/handlers/index.js +1 -1
  40. package/dist/components/FormRenderer/handlers/navigate.js +3 -3
  41. package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
  42. package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
  43. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +9 -9
  44. package/dist/components/FormRenderer/helpers/canCYASubmit.js +1 -3
  45. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +16 -20
  46. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +17 -22
  47. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +16 -16
  48. package/dist/components/FormRenderer/helpers/getCYA.js +3 -5
  49. package/dist/components/FormRenderer/helpers/getCYA.test.js +11 -11
  50. package/dist/components/FormRenderer/helpers/getFormState.js +5 -7
  51. package/dist/components/FormRenderer/helpers/getFormState.test.js +10 -10
  52. package/dist/components/FormRenderer/helpers/getNextPageId.js +13 -24
  53. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +67 -67
  54. package/dist/components/FormRenderer/helpers/getPage.js +2 -4
  55. package/dist/components/FormRenderer/helpers/getPage.test.js +11 -11
  56. package/dist/components/FormRenderer/helpers/getRelevantPages.js +7 -9
  57. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +14 -14
  58. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +6 -7
  59. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +96 -110
  60. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +62 -60
  61. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +71 -73
  62. package/dist/components/FormRenderer/helpers/index.js +1 -1
  63. package/dist/components/FormRenderer/onCYAAction.js +59 -51
  64. package/dist/components/FormRenderer/onCYAAction.test.js +164 -152
  65. package/dist/components/FormRenderer/onPageAction.js +43 -39
  66. package/dist/components/FormRenderer/onPageAction.test.js +223 -206
  67. package/dist/components/FormRenderer/onTaskAction.js +9 -13
  68. package/dist/components/FormRenderer/onTaskAction.test.js +93 -88
  69. package/dist/components/PageActions/ActionButton.js +12 -15
  70. package/dist/components/PageActions/ActionButton.test.js +56 -78
  71. package/dist/components/PageActions/PageActions.js +10 -10
  72. package/dist/components/PageActions/PageActions.test.js +86 -115
  73. package/dist/components/SummaryList/GroupAction.js +9 -17
  74. package/dist/components/SummaryList/GroupAction.test.js +37 -33
  75. package/dist/components/SummaryList/RowAction.js +11 -16
  76. package/dist/components/SummaryList/RowAction.test.js +37 -33
  77. package/dist/components/SummaryList/SummaryList.js +21 -26
  78. package/dist/components/SummaryList/SummaryList.test.js +143 -166
  79. package/dist/components/SummaryList/SummaryListHeadingRow.js +6 -4
  80. package/dist/components/SummaryList/SummaryListRow.js +6 -4
  81. package/dist/components/SummaryList/SummaryListTitleRow.js +5 -3
  82. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +3 -5
  83. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +22 -22
  84. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +3 -5
  85. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +22 -22
  86. package/dist/components/SummaryList/helpers/index.js +1 -1
  87. package/dist/components/TaskList/Task.js +19 -29
  88. package/dist/components/TaskList/Task.test.js +83 -76
  89. package/dist/components/TaskList/TaskList.js +45 -71
  90. package/dist/components/TaskList/TaskList.test.js +113 -111
  91. package/dist/components/TaskList/TaskState.js +7 -5
  92. package/dist/components/TaskList/TaskState.test.js +52 -45
  93. package/dist/components/index.js +7 -7
  94. package/dist/context/HooksContext/HooksContext.js +58 -79
  95. package/dist/context/HooksContext/HooksContext.test.js +26 -35
  96. package/dist/context/HooksContext/index.js +3 -4
  97. package/dist/context/ValidationContext/ValidationContext.js +32 -72
  98. package/dist/context/ValidationContext/ValidationContext.test.js +47 -59
  99. package/dist/context/ValidationContext/index.js +3 -4
  100. package/dist/context/index.js +2 -2
  101. package/dist/hooks/index.js +9 -10
  102. package/dist/hooks/useAxios.js +14 -40
  103. package/dist/hooks/useGetRequest.js +61 -97
  104. package/dist/hooks/useHooks.js +1 -3
  105. package/dist/hooks/useRefData.js +26 -39
  106. package/dist/hooks/useValidation.js +1 -3
  107. package/dist/index.js +13 -14
  108. package/dist/models/CollectionLabels.js +1 -1
  109. package/dist/models/ComponentTypes.js +25 -25
  110. package/dist/models/EventTypes.js +4 -4
  111. package/dist/models/FormPages.js +4 -4
  112. package/dist/models/FormTypes.js +8 -8
  113. package/dist/models/HubFormats.js +3 -3
  114. package/dist/models/PageAction.js +44 -38
  115. package/dist/models/TaskStates.js +30 -28
  116. package/dist/models/index.js +9 -9
  117. package/dist/setupTests.js +30 -31
  118. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  119. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +52 -54
  120. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +15 -25
  121. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +33 -35
  122. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +17 -31
  123. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +42 -44
  124. package/dist/utils/CheckYourAnswers/getCYARow.js +6 -6
  125. package/dist/utils/CheckYourAnswers/getCYARow.test.js +86 -86
  126. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +18 -24
  127. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +15 -16
  128. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +33 -36
  129. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +58 -60
  130. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +79 -88
  131. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +146 -124
  132. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +25 -20
  133. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +103 -97
  134. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +13 -18
  135. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +70 -76
  136. package/dist/utils/CheckYourAnswers/index.js +1 -1
  137. package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -4
  138. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +24 -24
  139. package/dist/utils/CollectionPage/addCollectionPageEntry.js +1 -1
  140. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +5 -5
  141. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +2 -2
  142. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +17 -17
  143. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +9 -18
  144. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +27 -22
  145. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
  146. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +10 -10
  147. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +7 -11
  148. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +22 -22
  149. package/dist/utils/CollectionPage/getCollectionPageData.js +8 -12
  150. package/dist/utils/CollectionPage/getCollectionPageData.test.js +19 -19
  151. package/dist/utils/CollectionPage/getQuickEditPage.js +19 -19
  152. package/dist/utils/CollectionPage/getQuickEditPage.test.js +12 -16
  153. package/dist/utils/CollectionPage/index.js +1 -1
  154. package/dist/utils/CollectionPage/mergeCollectionPages.js +29 -30
  155. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +17 -17
  156. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +4 -6
  157. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +10 -10
  158. package/dist/utils/CollectionPage/setCollectionPageData.js +8 -12
  159. package/dist/utils/CollectionPage/setCollectionPageData.test.js +17 -17
  160. package/dist/utils/Component/addShowWhen.js +4 -8
  161. package/dist/utils/Component/addShowWhen.test.js +37 -37
  162. package/dist/utils/Component/applyToComponentTree.js +18 -18
  163. package/dist/utils/Component/applyToComponentTree.test.js +27 -32
  164. package/dist/utils/Component/cleanAttributes.js +10 -13
  165. package/dist/utils/Component/cleanAttributes.test.js +17 -18
  166. package/dist/utils/Component/elevateNestedComponents.js +5 -5
  167. package/dist/utils/Component/elevateNestedComponents.test.js +30 -30
  168. package/dist/utils/Component/getComponent.js +88 -94
  169. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +18 -17
  170. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +46 -59
  171. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +39 -48
  172. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +23 -33
  173. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +20 -18
  174. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +17 -22
  175. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +20 -25
  176. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +10 -9
  177. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +17 -15
  178. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +9 -8
  179. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +17 -15
  180. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +22 -26
  181. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +155 -175
  182. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +17 -15
  183. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +17 -22
  184. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +57 -70
  185. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +17 -22
  186. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +17 -22
  187. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +31 -38
  188. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +20 -29
  189. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +2 -2
  190. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +9 -8
  191. package/dist/utils/Component/getDefaultValue.js +6 -8
  192. package/dist/utils/Component/getDefaultValue.test.js +12 -12
  193. package/dist/utils/Component/getDefaultValueFromConfig.js +22 -21
  194. package/dist/utils/Component/getDefaultValueFromConfig.test.js +31 -31
  195. package/dist/utils/Component/index.js +1 -1
  196. package/dist/utils/Component/isEditable.js +2 -4
  197. package/dist/utils/Component/isEditable.test.js +14 -15
  198. package/dist/utils/Component/optionIsSelected.js +1 -1
  199. package/dist/utils/Component/optionIsSelected.test.js +9 -9
  200. package/dist/utils/Component/setupContainerComponentsPath.js +27 -29
  201. package/dist/utils/Component/setupContainerComponentsPath.test.js +11 -11
  202. package/dist/utils/Component/showComponent.js +1 -1
  203. package/dist/utils/Component/showComponent.test.js +28 -28
  204. package/dist/utils/Component/wrapInFormGroup.js +2 -2
  205. package/dist/utils/Condition/index.js +1 -1
  206. package/dist/utils/Condition/meetsAllConditions.js +7 -7
  207. package/dist/utils/Condition/meetsAllConditions.test.js +17 -17
  208. package/dist/utils/Condition/meetsCondition.js +14 -17
  209. package/dist/utils/Condition/meetsCondition.test.js +376 -376
  210. package/dist/utils/Condition/meetsOneCondition.js +5 -5
  211. package/dist/utils/Condition/meetsOneCondition.test.js +16 -16
  212. package/dist/utils/Condition/setupConditions.js +13 -18
  213. package/dist/utils/Condition/setupConditions.test.js +7 -7
  214. package/dist/utils/Container/getEditableComponents.js +3 -5
  215. package/dist/utils/Container/getEditableComponents.test.js +43 -45
  216. package/dist/utils/Container/index.js +1 -1
  217. package/dist/utils/Container/setupNesting.js +16 -20
  218. package/dist/utils/Container/setupNesting.test.js +27 -30
  219. package/dist/utils/Container/showContainer.js +3 -7
  220. package/dist/utils/Container/showContainer.test.js +30 -30
  221. package/dist/utils/Data/applyFormula.js +38 -48
  222. package/dist/utils/Data/applyFormula.test.js +20 -20
  223. package/dist/utils/Data/getAutocompleteSource.js +18 -26
  224. package/dist/utils/Data/getAutocompleteSource.test.js +80 -86
  225. package/dist/utils/Data/getDataPath.js +18 -28
  226. package/dist/utils/Data/getDataPath.test.js +12 -12
  227. package/dist/utils/Data/getOptions.js +19 -25
  228. package/dist/utils/Data/getOptions.test.js +20 -20
  229. package/dist/utils/Data/getSourceData.js +6 -19
  230. package/dist/utils/Data/getSourceData.test.js +84 -80
  231. package/dist/utils/Data/index.js +1 -1
  232. package/dist/utils/Data/refDataToOptions.js +10 -13
  233. package/dist/utils/Data/refDataToOptions.test.js +19 -19
  234. package/dist/utils/Data/setDataItem.js +7 -8
  235. package/dist/utils/Data/setDataItem.test.js +37 -37
  236. package/dist/utils/Data/setupFormData.js +13 -21
  237. package/dist/utils/Data/setupFormData.test.js +51 -50
  238. package/dist/utils/Data/setupRefDataUrlForComponent.js +20 -26
  239. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +24 -24
  240. package/dist/utils/FormPage/applyConditionalProperties.js +5 -9
  241. package/dist/utils/FormPage/applyConditionalProperties.test.js +15 -18
  242. package/dist/utils/FormPage/getFormPage.js +15 -16
  243. package/dist/utils/FormPage/getFormPage.test.js +47 -46
  244. package/dist/utils/FormPage/getFormPages.js +7 -12
  245. package/dist/utils/FormPage/getFormPages.test.js +20 -23
  246. package/dist/utils/FormPage/getPageActions.js +9 -15
  247. package/dist/utils/FormPage/getPageActions.test.js +32 -32
  248. package/dist/utils/FormPage/getPageTitle.js +2 -2
  249. package/dist/utils/FormPage/getPageTitle.test.js +22 -22
  250. package/dist/utils/FormPage/getParagraphFromText.js +5 -7
  251. package/dist/utils/FormPage/getParagraphFromText.test.js +6 -6
  252. package/dist/utils/FormPage/index.js +1 -1
  253. package/dist/utils/FormPage/showFormPage.js +3 -7
  254. package/dist/utils/FormPage/showFormPage.test.js +32 -32
  255. package/dist/utils/FormPage/showFormPageCYA.js +1 -1
  256. package/dist/utils/FormPage/showFormPageCYA.test.js +8 -8
  257. package/dist/utils/FormPage/useComponent.js +21 -28
  258. package/dist/utils/FormPage/useComponent.test.js +78 -79
  259. package/dist/utils/Format/formatData.js +1 -1
  260. package/dist/utils/Format/formatData.test.js +18 -18
  261. package/dist/utils/Format/formatDataForComponent.js +5 -6
  262. package/dist/utils/Format/formatDataForComponent.test.js +50 -77
  263. package/dist/utils/Format/formatDataForForm.js +6 -8
  264. package/dist/utils/Format/formatDataForForm.test.js +13 -15
  265. package/dist/utils/Format/formatDataForPage.js +4 -5
  266. package/dist/utils/Format/formatDataForPage.test.js +20 -23
  267. package/dist/utils/Format/index.js +1 -1
  268. package/dist/utils/Hub/getFormHub.js +1 -1
  269. package/dist/utils/Hub/getFormHub.test.js +28 -31
  270. package/dist/utils/Hub/index.js +1 -1
  271. package/dist/utils/Meta/constants.js +2 -2
  272. package/dist/utils/Meta/documents/getDocuments.js +1 -1
  273. package/dist/utils/Meta/documents/getDocuments.test.js +24 -16
  274. package/dist/utils/Meta/documents/index.js +1 -1
  275. package/dist/utils/Meta/documents/setDocumentsForField.js +14 -16
  276. package/dist/utils/Meta/documents/setDocumentsForField.test.js +68 -34
  277. package/dist/utils/Meta/index.js +1 -1
  278. package/dist/utils/Operate/checkValueIsTruthy.js +2 -2
  279. package/dist/utils/Operate/checkValueIsTruthy.test.js +16 -16
  280. package/dist/utils/Operate/getFirstOf.js +5 -5
  281. package/dist/utils/Operate/getFirstOf.test.js +31 -31
  282. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +10 -10
  283. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +46 -46
  284. package/dist/utils/Operate/index.js +1 -1
  285. package/dist/utils/Operate/persistValueInFormData.js +3 -3
  286. package/dist/utils/Operate/persistValueInFormData.test.js +22 -20
  287. package/dist/utils/Operate/runPageOperations.js +7 -7
  288. package/dist/utils/Operate/runPageOperations.test.js +35 -36
  289. package/dist/utils/Operate/setValueInFormData.js +2 -2
  290. package/dist/utils/Operate/setValueInFormData.test.js +16 -16
  291. package/dist/utils/Operate/shouldRun.js +6 -6
  292. package/dist/utils/Operate/shouldRun.test.js +21 -26
  293. package/dist/utils/Validate/additional/conditionallyRequired.js +4 -4
  294. package/dist/utils/Validate/additional/conditionallyRequired.test.js +18 -18
  295. package/dist/utils/Validate/additional/index.js +6 -6
  296. package/dist/utils/Validate/additional/index.test.js +12 -12
  297. package/dist/utils/Validate/additional/mustBeAfter.js +2 -2
  298. package/dist/utils/Validate/additional/mustBeAfter.test.js +40 -40
  299. package/dist/utils/Validate/additional/mustBeBefore.js +2 -2
  300. package/dist/utils/Validate/additional/mustBeBefore.test.js +28 -28
  301. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +7 -11
  302. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +37 -41
  303. package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
  304. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +18 -18
  305. package/dist/utils/Validate/additional/mustBeInTheFuture.js +2 -2
  306. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +12 -12
  307. package/dist/utils/Validate/additional/mustBeInThePast.js +3 -3
  308. package/dist/utils/Validate/additional/mustBeInThePast.test.js +12 -12
  309. package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
  310. package/dist/utils/Validate/additional/mustBeLessThan.test.js +17 -17
  311. package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
  312. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +16 -16
  313. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
  314. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +20 -20
  315. package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
  316. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +16 -16
  317. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
  318. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +14 -16
  319. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
  320. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +12 -12
  321. package/dist/utils/Validate/additional/mustNotContainSql.js +3 -4
  322. package/dist/utils/Validate/additional/mustNotContainSql.test.js +14 -14
  323. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +2 -2
  324. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +28 -26
  325. package/dist/utils/Validate/additional/utils.js +9 -22
  326. package/dist/utils/Validate/index.js +1 -1
  327. package/dist/utils/Validate/validateCollection.js +19 -25
  328. package/dist/utils/Validate/validateCollection.test.js +74 -66
  329. package/dist/utils/Validate/validateComponent.js +17 -15
  330. package/dist/utils/Validate/validateComponent.test.js +167 -146
  331. package/dist/utils/Validate/validateContainer.js +14 -19
  332. package/dist/utils/Validate/validateContainer.test.js +49 -45
  333. package/dist/utils/Validate/validateDate.js +11 -17
  334. package/dist/utils/Validate/validateDate.test.js +28 -29
  335. package/dist/utils/Validate/validateEmail.js +6 -8
  336. package/dist/utils/Validate/validateEmail.test.js +25 -25
  337. package/dist/utils/Validate/validateMultifile.js +5 -7
  338. package/dist/utils/Validate/validateMultifile.test.js +17 -18
  339. package/dist/utils/Validate/validatePage.js +17 -18
  340. package/dist/utils/Validate/validatePage.test.js +185 -182
  341. package/dist/utils/Validate/validateRegex.js +3 -5
  342. package/dist/utils/Validate/validateRegex.test.js +14 -14
  343. package/dist/utils/Validate/validateRequired.js +4 -6
  344. package/dist/utils/Validate/validateRequired.test.js +18 -18
  345. package/dist/utils/Validate/validateTextArea.js +4 -6
  346. package/dist/utils/Validate/validateTextArea.test.js +20 -20
  347. package/dist/utils/Validate/validateTime.js +7 -14
  348. package/dist/utils/Validate/validateTime.test.js +14 -14
  349. package/dist/utils/index.js +7 -9
  350. package/package.json +2 -2
@@ -16,21 +16,21 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
16
16
 
17
17
  // Styles.
18
18
 
19
- var DEFAULT_CLASS = exports.DEFAULT_CLASS = 'hods-form-banner-strip';
20
- var BannerStrip = function BannerStrip(_ref) {
21
- var id = _ref.id,
22
- banners = _ref.banners,
23
- formData = _ref.formData,
24
- classModifiers = _ref.classModifiers;
25
- var classes = _utils.default.classBuilder(DEFAULT_CLASS, classModifiers, '');
26
- var filteredBanners = banners.filter(function (banner) {
27
- return _utils.default.Component.show(banner, formData);
28
- });
19
+ const DEFAULT_CLASS = exports.DEFAULT_CLASS = 'hods-form-banner-strip';
20
+ const BannerStrip = _ref => {
21
+ let {
22
+ id,
23
+ banners,
24
+ formData,
25
+ classModifiers
26
+ } = _ref;
27
+ const classes = _utils.default.classBuilder(DEFAULT_CLASS, classModifiers, '');
28
+ const filteredBanners = banners.filter(banner => _utils.default.Component.show(banner, formData));
29
29
  return /*#__PURE__*/_react.default.createElement("div", {
30
30
  id: id,
31
31
  className: classes()
32
- }, filteredBanners.map(function (banner, index) {
33
- var bannerId = "".concat(id, "-banner-").concat(index);
32
+ }, filteredBanners.map((banner, index) => {
33
+ const bannerId = "".concat(id, "-banner-").concat(index);
34
34
  if (typeof banner === 'string') {
35
35
  return /*#__PURE__*/_react.default.createElement("div", {
36
36
  id: bannerId,
@@ -1,124 +1,128 @@
1
1
  "use strict";
2
2
 
3
- 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); }
4
3
  var _copReactComponents = require("@ukhomeoffice/cop-react-components");
5
4
  var _react = _interopRequireDefault(require("react"));
6
5
  var _setupTests = require("../../setupTests");
7
6
  var _BannerStrip = _interopRequireWildcard(require("./BannerStrip"));
8
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
9
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
7
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
8
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
10
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
10
  // Global imports.
12
11
 
13
12
  // Local imports.
14
13
 
15
- describe('components.CollectionSummary.BannerStrip', function () {
16
- var ID = 'testBanner';
17
- var BANNERS = ['Banner 1', 'Banner 2'];
18
- var FORM_DATA = {
14
+ describe('components.CollectionSummary.BannerStrip', () => {
15
+ const ID = 'testBanner';
16
+ const BANNERS = ['Banner 1', 'Banner 2'];
17
+ const FORM_DATA = {
19
18
  textField: 'banner'
20
19
  };
21
- var classes = _copReactComponents.Utils.classBuilder(_BannerStrip.DEFAULT_CLASS, [], '');
22
- var checkSetup = function checkSetup(container) {
23
- var bannerStripDiv = container.children[0];
20
+ const classes = _copReactComponents.Utils.classBuilder(_BannerStrip.DEFAULT_CLASS, [], '');
21
+ const checkSetup = container => {
22
+ const bannerStripDiv = container.children[0];
24
23
  expect(bannerStripDiv.tagName).toEqual('DIV');
25
24
  expect(bannerStripDiv.id).toEqual(ID);
26
25
  return bannerStripDiv;
27
26
  };
28
- it('should correctly render a BannerStrip component with plain-text banners', function () {
29
- var _renderWithValidation = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
30
- id: ID,
31
- banners: BANNERS,
32
- formData: FORM_DATA
33
- })),
34
- container = _renderWithValidation.container;
35
- var bannerStripDiv = checkSetup(container);
27
+ it('should correctly render a BannerStrip component with plain-text banners', () => {
28
+ const {
29
+ container
30
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
31
+ id: ID,
32
+ banners: BANNERS,
33
+ formData: FORM_DATA
34
+ }));
35
+ const bannerStripDiv = checkSetup(container);
36
36
  expect(bannerStripDiv.tagName).toEqual('DIV');
37
37
  expect(bannerStripDiv.classList).toContain(_BannerStrip.DEFAULT_CLASS);
38
38
  expect(bannerStripDiv.children.length).toEqual(2); // One for each banner provided.
39
39
 
40
- var firstBanner = bannerStripDiv.children[0];
40
+ const firstBanner = bannerStripDiv.children[0];
41
41
  expect(firstBanner.tagName).toEqual('DIV');
42
42
  expect(firstBanner.classList).toContain(classes('banner'));
43
43
  expect(firstBanner.textContent).toEqual(BANNERS[0]);
44
- var secondBanner = bannerStripDiv.children[1];
44
+ const secondBanner = bannerStripDiv.children[1];
45
45
  expect(secondBanner.tagName).toEqual('DIV');
46
46
  expect(secondBanner.classList).toContain(classes('banner'));
47
47
  expect(secondBanner.textContent).toEqual(BANNERS[1]);
48
48
  });
49
- it('should correctly render a BannerStrip component with tag banners', function () {
50
- var TAG_BANNERS = [{
49
+ it('should correctly render a BannerStrip component with tag banners', () => {
50
+ const TAG_BANNERS = [{
51
51
  text: 'Banner 1'
52
52
  }, {
53
53
  text: 'Banner 2'
54
54
  }];
55
- var _renderWithValidation2 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
56
- id: ID,
57
- banners: TAG_BANNERS,
58
- formData: FORM_DATA
59
- })),
60
- container = _renderWithValidation2.container;
61
- var bannerStripDiv = checkSetup(container);
55
+ const {
56
+ container
57
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
58
+ id: ID,
59
+ banners: TAG_BANNERS,
60
+ formData: FORM_DATA
61
+ }));
62
+ const bannerStripDiv = checkSetup(container);
62
63
  expect(bannerStripDiv.tagName).toEqual('DIV');
63
64
  expect(bannerStripDiv.classList).toContain(_BannerStrip.DEFAULT_CLASS);
64
65
  expect(bannerStripDiv.children.length).toEqual(2); // One for each banner provided.
65
66
 
66
- var firstBanner = bannerStripDiv.children[0];
67
+ const firstBanner = bannerStripDiv.children[0];
67
68
  expect(firstBanner.tagName).toEqual('STRONG');
68
69
  expect(firstBanner.classList).toContain(classes('tag'));
69
70
  expect(firstBanner.textContent).toEqual(BANNERS[0]);
70
- var secondBanner = bannerStripDiv.children[1];
71
+ const secondBanner = bannerStripDiv.children[1];
71
72
  expect(secondBanner.tagName).toEqual('STRONG');
72
73
  expect(secondBanner.classList).toContain(classes('tag'));
73
74
  expect(secondBanner.textContent).toEqual(BANNERS[1]);
74
75
  });
75
- it('should correctly interpolate banners', function () {
76
- var INTERPOLATED_BANNERS = [{
76
+ it('should correctly interpolate banners', () => {
77
+ const INTERPOLATED_BANNERS = [{
77
78
  // eslint-disable-next-line no-template-curly-in-string
78
79
  text: 'An interpolated ${textField}'
79
80
  },
80
81
  // eslint-disable-next-line no-template-curly-in-string
81
82
  'Another interpolated ${textField}'];
82
- var _renderWithValidation3 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
83
- id: ID,
84
- banners: INTERPOLATED_BANNERS,
85
- formData: FORM_DATA
86
- })),
87
- container = _renderWithValidation3.container;
88
- var bannerStripDiv = checkSetup(container);
83
+ const {
84
+ container
85
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
86
+ id: ID,
87
+ banners: INTERPOLATED_BANNERS,
88
+ formData: FORM_DATA
89
+ }));
90
+ const bannerStripDiv = checkSetup(container);
89
91
  expect(bannerStripDiv.children.length).toEqual(2); // One for each banner provided.
90
92
 
91
- var firstBanner = bannerStripDiv.children[0];
93
+ const firstBanner = bannerStripDiv.children[0];
92
94
  expect(firstBanner.tagName).toEqual('STRONG');
93
95
  expect(firstBanner.classList).toContain(classes('tag'));
94
96
  expect(firstBanner.textContent).toEqual("An interpolated ".concat(FORM_DATA.textField));
95
- var secondBanner = bannerStripDiv.children[1];
97
+ const secondBanner = bannerStripDiv.children[1];
96
98
  expect(secondBanner.tagName).toEqual('DIV');
97
99
  expect(secondBanner.classList).toContain(classes('banner'));
98
100
  expect(secondBanner.textContent).toEqual("Another interpolated ".concat(FORM_DATA.textField));
99
101
  });
100
- it('should render no banners if none are provided', function () {
101
- var _renderWithValidation4 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
102
- id: ID,
103
- formData: FORM_DATA
104
- })),
105
- container = _renderWithValidation4.container;
106
- var bannerStripDiv = checkSetup(container);
102
+ it('should render no banners if none are provided', () => {
103
+ const {
104
+ container
105
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
106
+ id: ID,
107
+ formData: FORM_DATA
108
+ }));
109
+ const bannerStripDiv = checkSetup(container);
107
110
  expect(bannerStripDiv.tagName).toEqual('DIV');
108
111
  expect(bannerStripDiv.classList).toContain(_BannerStrip.DEFAULT_CLASS);
109
112
  expect(bannerStripDiv.children.length).toEqual(0);
110
113
  });
111
- it('should correctly render a BannerStrip component with a plain string banner', function () {
112
- var PLAIN_STRING_BANNER = 'banner';
113
- var _renderWithValidation5 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
114
- id: ID,
115
- banners: [PLAIN_STRING_BANNER],
116
- formData: FORM_DATA
117
- })),
118
- container = _renderWithValidation5.container;
119
- var bannerStripDiv = checkSetup(container);
114
+ it('should correctly render a BannerStrip component with a plain string banner', () => {
115
+ const PLAIN_STRING_BANNER = 'banner';
116
+ const {
117
+ container
118
+ } = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
119
+ id: ID,
120
+ banners: [PLAIN_STRING_BANNER],
121
+ formData: FORM_DATA
122
+ }));
123
+ const bannerStripDiv = checkSetup(container);
120
124
  expect(bannerStripDiv.children.length).toEqual(1); // One banner provided.
121
- var plainStringBanner = bannerStripDiv.children[0];
125
+ const plainStringBanner = bannerStripDiv.children[0];
122
126
  expect(plainStringBanner.tagName).toEqual('DIV');
123
127
  expect(plainStringBanner.classList.contains(classes('banner'))).toBe(true);
124
128
  expect(plainStringBanner.textContent).toEqual(PLAIN_STRING_BANNER);
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
 
3
- 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); }
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
@@ -10,87 +9,112 @@ var _react = _interopRequireWildcard(require("react"));
10
9
  var _PageAction = require("../../models/PageAction");
11
10
  var _utils = _interopRequireDefault(require("../../utils"));
12
11
  var _ActionButton = _interopRequireDefault(require("../PageActions/ActionButton"));
12
+ var _hooks = require("../../hooks");
13
13
  var _Confirmation = _interopRequireDefault(require("./Confirmation"));
14
14
  var _SummaryCard = _interopRequireDefault(require("./SummaryCard"));
15
+ var _SummaryCardValidationContext = _interopRequireDefault(require("./SummaryCardValidationContext"));
15
16
  require("./CollectionSummary.scss");
16
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
18
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
- 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; }
20
- 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; }
21
- 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; }
22
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
23
- 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); }
24
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
- 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."); }
26
- 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); }
27
- 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; }
28
- 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; } }
29
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // Global imports.
20
+ // Global imports.
21
+
30
22
  // Local imports.
23
+
31
24
  // Styles.
32
- var DEFAULT_ADD_BUTTON_LABEL = exports.DEFAULT_ADD_BUTTON_LABEL = 'Add';
33
- var CollectionSummary = function CollectionSummary(_ref) {
25
+
26
+ const DEFAULT_ADD_BUTTON_LABEL = exports.DEFAULT_ADD_BUTTON_LABEL = 'Add';
27
+
28
+ // A note about validation.
29
+ //
30
+ // A Collection Summary validates each entry whenever the list of entries changes
31
+ // in any way. This was required as duplicating entries can lead to entries being
32
+ // invalid as soon as they are created - something that is impossible to flag
33
+ // to the user given that validation currently only occurs in onPageAction.
34
+ //
35
+ // The Summary Cards themselves are wrapped in their own custom Validation Contexts,
36
+ // see (SummaryCardValidationContext.jsx). These contexts are provided with any
37
+ // errors found by the summary and allow the Summary Card to keep any Quick Edit
38
+ // errors local to the Quick Edit page.
39
+
40
+ const CollectionSummary = _ref => {
34
41
  var _config$confirmation, _config$confirmation2;
35
- var config = _ref.config,
36
- formData = _ref.formData,
37
- onAction = _ref.onAction,
38
- onChange = _ref.onChange,
39
- pages = _ref.pages;
40
- var _useState = (0, _react.useState)([]),
41
- _useState2 = _slicedToArray(_useState, 2),
42
- duplicatedEntries = _useState2[0],
43
- setDuplicatedEntries = _useState2[1];
44
- var _useState3 = (0, _react.useState)(null),
45
- _useState4 = _slicedToArray(_useState3, 2),
46
- entryToDelete = _useState4[0],
47
- setEntryToDelete = _useState4[1];
48
- var data = (0, _react.useMemo)(function () {
49
- return _utils.default.CollectionPage.getData(config.collectionName, formData) || [];
50
- }, [formData]);
51
- var masterPage = (0, _react.useMemo)(function () {
52
- var newMasterPages = _utils.default.CollectionPage.mergePages(pages || []) || [];
53
- return newMasterPages.find(function (page) {
42
+ let {
43
+ config,
44
+ formData,
45
+ onAction,
46
+ onChange,
47
+ pages
48
+ } = _ref;
49
+ const {
50
+ errors,
51
+ addErrors,
52
+ clearErrors
53
+ } = (0, _hooks.useValidation)();
54
+ const [entryToDelete, setEntryToDelete] = (0, _react.useState)(null);
55
+ const data = (0, _react.useMemo)(() => _utils.default.CollectionPage.getData(config.collectionName, formData) || [], [formData]);
56
+ const masterPage = (0, _react.useMemo)(() => {
57
+ const newMasterPages = _utils.default.CollectionPage.mergePages(pages || []) || [];
58
+ return newMasterPages.find(page => {
54
59
  var _page$collection;
55
60
  return ((_page$collection = page.collection) === null || _page$collection === void 0 ? void 0 : _page$collection.name) === config.collectionName;
56
61
  });
57
62
  }, [pages]);
58
- (0, _react.useEffect)(function () {
59
- var storedEntries = localStorage.getItem('duplicatedEntries');
60
- if (storedEntries) {
61
- setDuplicatedEntries(JSON.parse(storedEntries));
63
+ const validateEntries = () => {
64
+ // We only clear errors if it's not empty to avoid
65
+ // triggering a race condition with the 'data' memo
66
+ // above.
67
+ if (errors.length > 0) {
68
+ clearErrors();
62
69
  }
63
- }, []);
64
- var removeDuplicatedEntry = function removeDuplicatedEntry(entryId) {
65
- var filteredEntries = duplicatedEntries.filter(function (id) {
66
- return id !== entryId;
70
+ let allErrors = [];
71
+ data.forEach(entry => {
72
+ // Validation of a collection page uses the data from the
73
+ // active entry, so here we have to set the active ID before
74
+ // validating.
75
+ const childPages = masterPage === null || masterPage === void 0 ? void 0 : masterPage.childPages.map(page => ({
76
+ ...page,
77
+ formData: {
78
+ ...masterPage.formData,
79
+ ["".concat(config.collectionName, "ActiveId")]: entry.id
80
+ }
81
+ }));
82
+ const allPagesErrors = (childPages === null || childPages === void 0 ? void 0 : childPages.flatMap(page => _utils.default.Validate.page(page))) || [];
83
+ // For each error we found, add the entryId so we know what Summary Card
84
+ // we have to pass it to.
85
+ const entryErrors = allPagesErrors.map(e => ({
86
+ ...e,
87
+ entryId: entry.id
88
+ }));
89
+ allErrors = allErrors.concat(entryErrors);
67
90
  });
68
- localStorage.setItem('duplicatedEntries', JSON.stringify(filteredEntries));
69
- setDuplicatedEntries(filteredEntries);
91
+ // We only add allErrors if it's not empty to avoid
92
+ // triggering a race condition with the 'data' memo
93
+ // above.
94
+ if (allErrors.length > 0) {
95
+ addErrors(allErrors);
96
+ }
70
97
  };
71
- var onSummaryCardChange = function onSummaryCardChange(page, entryId) {
72
- removeDuplicatedEntry(entryId);
98
+ (0, _react.useEffect)(() => {
99
+ validateEntries();
100
+ }, [data]);
101
+ const onSummaryCardChange = (page, entryId) => {
73
102
  if (typeof onAction !== 'function') {
74
103
  return;
75
104
  }
76
105
  onAction({
77
106
  type: _PageAction.PageActionTypes.SAVE_AND_NAVIGATE,
78
- page: page,
107
+ page,
79
108
  addToFormData: {
80
109
  field: "".concat(config.collectionName.split('.').pop(), "ActiveId"),
81
110
  value: entryId
82
111
  }
83
112
  });
84
113
  };
85
- var onDuplicate = function onDuplicate(entry) {
114
+ const onDuplicate = entry => {
86
115
  var _config$card;
87
- var newEntryId = _utils.default.CollectionPage.duplicateEntry(config.collectionName, formData, entry.id, ((_config$card = config.card) === null || _config$card === void 0 || (_config$card = _config$card.duplicateAction) === null || _config$card === void 0 ? void 0 : _config$card.fieldsToIgnore) || []);
88
- if (newEntryId) {
89
- var newData = [].concat(duplicatedEntries, [newEntryId]);
90
- localStorage.setItem('duplicatedEntries', JSON.stringify(newData));
91
- setDuplicatedEntries(newData);
92
- }
93
- var parentCollection = config.collectionName.split('.').shift();
116
+ _utils.default.CollectionPage.duplicateEntry(config.collectionName, formData, entry.id, ((_config$card = config.card) === null || _config$card === void 0 || (_config$card = _config$card.duplicateAction) === null || _config$card === void 0 ? void 0 : _config$card.fieldsToIgnore) || []);
117
+ const parentCollection = config.collectionName.split('.').shift();
94
118
  // Report the whole top-level collection as being changed. We have to do this
95
119
  // because of how patch is applied to formData on a page submission.
96
120
  if (typeof onChange === 'function') {
@@ -100,14 +124,15 @@ var CollectionSummary = function CollectionSummary(_ref) {
100
124
  value: _utils.default.CollectionPage.getData(parentCollection, formData)
101
125
  }
102
126
  });
127
+ validateEntries();
103
128
  }
104
129
  };
105
- var onDeleteConfirm = function onDeleteConfirm() {
130
+ const onDeleteConfirm = () => {
106
131
  if (!entryToDelete) {
107
132
  return;
108
133
  }
109
134
  _utils.default.CollectionPage.removeEntry(config.collectionName, formData, entryToDelete.id);
110
- var parentCollection = config.collectionName.split('.').shift();
135
+ const parentCollection = config.collectionName.split('.').shift();
111
136
  // Report the whole top-level collection as being changed. We have to do this
112
137
  // because of how patch is applied to formData on a page submission.
113
138
  if (typeof onChange === 'function') {
@@ -119,6 +144,7 @@ var CollectionSummary = function CollectionSummary(_ref) {
119
144
  });
120
145
  }
121
146
  setEntryToDelete(null);
147
+ validateEntries();
122
148
  };
123
149
  return /*#__PURE__*/_react.default.createElement("div", {
124
150
  id: config.fieldId
@@ -127,15 +153,14 @@ var CollectionSummary = function CollectionSummary(_ref) {
127
153
  message: _utils.default.interpolateString((_config$confirmation = config.confirmation) === null || _config$confirmation === void 0 ? void 0 : _config$confirmation.message, entryToDelete) || null,
128
154
  confirmLabel: _utils.default.interpolateString((_config$confirmation2 = config.confirmation) === null || _config$confirmation2 === void 0 ? void 0 : _config$confirmation2.label, entryToDelete) || null,
129
155
  onConfirm: onDeleteConfirm,
130
- onCancel: function onCancel() {
131
- return setEntryToDelete(null);
132
- }
156
+ onCancel: () => setEntryToDelete(null)
133
157
  }, /*#__PURE__*/_react.default.createElement(_SummaryCard.default, {
134
158
  id: "".concat(config.fieldId, ".confirmationChild"),
135
159
  entryData: entryToDelete,
136
- config: config.card ? _objectSpread(_objectSpread({}, config.card), {}, {
160
+ config: config.card ? {
161
+ ...config.card,
137
162
  quickEdit: null
138
- }) : {},
163
+ } : {},
139
164
  masterPage: masterPage,
140
165
  classModifiers: "nested",
141
166
  hideDetails: true
@@ -149,31 +174,33 @@ var CollectionSummary = function CollectionSummary(_ref) {
149
174
  classModifiers: ['secondary']
150
175
  },
151
176
  onAction: onAction
152
- }), data.map(function (entry, index) {
153
- var key = "".concat(config.fieldId, ".summaryCard").concat(entry.id);
154
- return /*#__PURE__*/_react.default.createElement(_SummaryCard.default, {
177
+ }), data.map((entry, index) => {
178
+ const key = "".concat(config.fieldId, ".summaryCard").concat(entry.id);
179
+ return /*#__PURE__*/_react.default.createElement(_SummaryCardValidationContext.default, {
180
+ entryId: entry.id,
181
+ topLevelErrors: errors
182
+ }, /*#__PURE__*/_react.default.createElement(_SummaryCard.default, {
155
183
  id: key,
156
184
  key: key,
157
- entryData: _objectSpread(_objectSpread({}, entry), {}, {
158
- index: index
159
- }),
185
+ entryData: {
186
+ ...entry,
187
+ index
188
+ },
160
189
  masterPage: masterPage,
161
190
  config: config.card || {},
162
191
  onChange: onSummaryCardChange,
163
192
  onDuplicate: onDuplicate,
164
- onDelete: function onDelete() {
165
- return setEntryToDelete(entry);
166
- },
193
+ onDelete: () => setEntryToDelete(entry),
167
194
  pages: pages,
168
- onQuickEdit: function onQuickEdit(target, entryId) {
169
- removeDuplicatedEntry(entryId);
170
- onChange(target);
195
+ onQuickEdit: target => {
196
+ validateEntries();
197
+ return onChange(target);
171
198
  },
172
199
  parentCollectionName: config.collectionName.split('.').shift(),
173
200
  formData: formData,
174
201
  classModifiers: entry === entryToDelete ? ['deleting-summary-card'] : [''],
175
- isDuplicated: duplicatedEntries.includes(entry.id)
176
- });
202
+ inError: errors.filter(e => e.entryId === entry.id).length > 0
203
+ }));
177
204
  }));
178
205
  };
179
206
  CollectionSummary.propTypes = {