@ukhomeoffice/cop-react-form-renderer 6.0.6-peter → 6.7.0-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 (390) 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.scss +2 -2
  5. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +463 -769
  6. package/dist/components/CollectionPage/CollectionPage.js +75 -59
  7. package/dist/components/CollectionPage/CollectionPage.test.js +316 -366
  8. package/dist/components/CollectionSummary/BannerStrip.js +15 -14
  9. package/dist/components/CollectionSummary/BannerStrip.scss +2 -2
  10. package/dist/components/CollectionSummary/BannerStrip.test.js +98 -59
  11. package/dist/components/CollectionSummary/CollectionSummary.js +144 -135
  12. package/dist/components/CollectionSummary/CollectionSummary.scss +1 -1
  13. package/dist/components/CollectionSummary/CollectionSummary.test.js +167 -197
  14. package/dist/components/CollectionSummary/Confirmation.js +14 -12
  15. package/dist/components/CollectionSummary/Confirmation.scss +1 -1
  16. package/dist/components/CollectionSummary/Confirmation.test.js +68 -63
  17. package/dist/components/CollectionSummary/RenderListView.js +54 -56
  18. package/dist/components/CollectionSummary/RenderListView.scss +10 -1
  19. package/dist/components/CollectionSummary/RenderListView.test.js +89 -78
  20. package/dist/components/CollectionSummary/SummaryCard.js +135 -145
  21. package/dist/components/CollectionSummary/SummaryCard.scss +2 -1
  22. package/dist/components/CollectionSummary/SummaryCard.test.js +943 -932
  23. package/dist/components/CollectionSummary/SummaryCardDetails.js +120 -62
  24. package/dist/components/CollectionSummary/SummaryCardDetails.scss +43 -6
  25. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +261 -120
  26. package/dist/components/CollectionSummary/SummaryCardValidationContext.js +38 -33
  27. package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +62 -73
  28. package/dist/components/FormComponent/Collection.js +81 -108
  29. package/dist/components/FormComponent/Collection.test.js +909 -943
  30. package/dist/components/FormComponent/Container.js +40 -38
  31. package/dist/components/FormComponent/Container.test.js +314 -345
  32. package/dist/components/FormComponent/FormComponent.js +80 -71
  33. package/dist/components/FormComponent/FormComponent.test.js +353 -414
  34. package/dist/components/FormComponent/helpers/addLabel.js +4 -7
  35. package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
  36. package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +7 -7
  37. package/dist/components/FormComponent/helpers/getComponentError.js +3 -5
  38. package/dist/components/FormComponent/helpers/getComponentError.test.js +14 -14
  39. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +3 -4
  40. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +6 -6
  41. package/dist/components/FormComponent/helpers/index.js +4 -4
  42. package/dist/components/FormPage/FormPage.js +65 -80
  43. package/dist/components/FormPage/FormPage.scss +1 -1
  44. package/dist/components/FormPage/FormPage.test.js +127 -163
  45. package/dist/components/FormRenderer/FormRenderer.js +150 -183
  46. package/dist/components/FormRenderer/FormRenderer.scss +1 -1
  47. package/dist/components/FormRenderer/FormRenderer.test.js +730 -1115
  48. package/dist/components/FormRenderer/handlers/cyaAction.js +2 -2
  49. package/dist/components/FormRenderer/handlers/getPageId.js +1 -3
  50. package/dist/components/FormRenderer/handlers/getPageId.test.js +14 -14
  51. package/dist/components/FormRenderer/handlers/handlers.test.js +32 -32
  52. package/dist/components/FormRenderer/handlers/index.js +1 -1
  53. package/dist/components/FormRenderer/handlers/navigate.js +3 -3
  54. package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
  55. package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
  56. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +15 -15
  57. package/dist/components/FormRenderer/helpers/canCYASubmit.js +1 -3
  58. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +16 -20
  59. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +17 -22
  60. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +16 -16
  61. package/dist/components/FormRenderer/helpers/getCYA.js +3 -5
  62. package/dist/components/FormRenderer/helpers/getCYA.test.js +11 -11
  63. package/dist/components/FormRenderer/helpers/getFormState.js +5 -7
  64. package/dist/components/FormRenderer/helpers/getFormState.test.js +10 -10
  65. package/dist/components/FormRenderer/helpers/getNextPageId.js +13 -24
  66. package/dist/components/FormRenderer/helpers/getNextPageId.test.js +67 -67
  67. package/dist/components/FormRenderer/helpers/getPage.js +2 -4
  68. package/dist/components/FormRenderer/helpers/getPage.test.js +11 -11
  69. package/dist/components/FormRenderer/helpers/getRelevantPages.js +7 -9
  70. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +14 -14
  71. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +5 -5
  72. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +103 -97
  73. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +62 -60
  74. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +71 -78
  75. package/dist/components/FormRenderer/helpers/index.js +2 -4
  76. package/dist/components/FormRenderer/onCYAAction.js +59 -51
  77. package/dist/components/FormRenderer/onCYAAction.test.js +164 -152
  78. package/dist/components/FormRenderer/onPageAction.js +50 -48
  79. package/dist/components/FormRenderer/onPageAction.test.js +241 -217
  80. package/dist/components/FormRenderer/onTaskAction.js +9 -13
  81. package/dist/components/FormRenderer/onTaskAction.test.js +93 -88
  82. package/dist/components/PageActions/ActionButton.js +12 -15
  83. package/dist/components/PageActions/ActionButton.test.js +56 -78
  84. package/dist/components/PageActions/PageActions.js +10 -10
  85. package/dist/components/PageActions/PageActions.test.js +86 -115
  86. package/dist/components/SummaryList/GroupAction.js +9 -17
  87. package/dist/components/SummaryList/GroupAction.test.js +37 -33
  88. package/dist/components/SummaryList/RowAction.js +11 -16
  89. package/dist/components/SummaryList/RowAction.test.js +37 -33
  90. package/dist/components/SummaryList/SummaryList.js +21 -26
  91. package/dist/components/SummaryList/SummaryList.scss +2 -2
  92. package/dist/components/SummaryList/SummaryList.test.js +143 -166
  93. package/dist/components/SummaryList/SummaryListHeadingRow.js +6 -4
  94. package/dist/components/SummaryList/SummaryListRow.js +6 -4
  95. package/dist/components/SummaryList/SummaryListTitleRow.js +5 -3
  96. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +3 -5
  97. package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +22 -22
  98. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +3 -5
  99. package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +22 -22
  100. package/dist/components/SummaryList/helpers/index.js +1 -1
  101. package/dist/components/TaskList/Task.js +19 -29
  102. package/dist/components/TaskList/Task.test.js +83 -76
  103. package/dist/components/TaskList/TaskList.js +45 -71
  104. package/dist/components/TaskList/TaskList.scss +1 -1
  105. package/dist/components/TaskList/TaskList.test.js +113 -111
  106. package/dist/components/TaskList/TaskState.js +7 -5
  107. package/dist/components/TaskList/TaskState.test.js +52 -45
  108. package/dist/components/index.js +7 -7
  109. package/dist/context/HooksContext/HooksContext.js +57 -80
  110. package/dist/context/HooksContext/HooksContext.test.js +26 -35
  111. package/dist/context/HooksContext/index.js +3 -4
  112. package/dist/context/ValidationContext/ValidationContext.js +65 -72
  113. package/dist/context/ValidationContext/ValidationContext.test.js +58 -61
  114. package/dist/context/ValidationContext/index.js +3 -4
  115. package/dist/context/index.js +2 -2
  116. package/dist/hooks/index.js +9 -10
  117. package/dist/hooks/useAxios.js +14 -40
  118. package/dist/hooks/useGetRequest.js +61 -97
  119. package/dist/hooks/useHooks.js +1 -3
  120. package/dist/hooks/useRefData.js +27 -40
  121. package/dist/hooks/useValidation.js +1 -3
  122. package/dist/index.js +13 -14
  123. package/dist/models/CollectionLabels.js +1 -1
  124. package/dist/models/ComponentTypes.js +25 -25
  125. package/dist/models/EventTypes.js +4 -4
  126. package/dist/models/FormPages.js +4 -4
  127. package/dist/models/FormTypes.js +8 -8
  128. package/dist/models/HubFormats.js +3 -3
  129. package/dist/models/PageAction.js +44 -38
  130. package/dist/models/TaskStates.js +29 -28
  131. package/dist/models/index.js +9 -9
  132. package/dist/setupTests.js +30 -31
  133. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  134. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +52 -54
  135. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +15 -25
  136. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +33 -35
  137. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +17 -31
  138. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +42 -44
  139. package/dist/utils/CheckYourAnswers/getCYARow.js +6 -6
  140. package/dist/utils/CheckYourAnswers/getCYARow.test.js +86 -86
  141. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +18 -24
  142. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +15 -16
  143. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +33 -36
  144. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +58 -61
  145. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +83 -89
  146. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +164 -138
  147. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +25 -20
  148. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +103 -97
  149. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +13 -18
  150. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +70 -76
  151. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.js +11 -11
  152. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.test.js +7 -7
  153. package/dist/utils/CheckYourAnswers/index.js +1 -1
  154. package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -5
  155. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +29 -24
  156. package/dist/utils/CollectionPage/addCollectionPageEntry.js +3 -4
  157. package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +7 -27
  158. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +2 -2
  159. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +17 -18
  160. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +29 -19
  161. package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +66 -22
  162. package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
  163. package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +10 -10
  164. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +7 -11
  165. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +22 -22
  166. package/dist/utils/CollectionPage/getCollectionPageData.js +8 -12
  167. package/dist/utils/CollectionPage/getCollectionPageData.test.js +19 -19
  168. package/dist/utils/CollectionPage/getErrorsForCollection.js +55 -0
  169. package/dist/utils/CollectionPage/getErrorsForCollection.test.js +153 -0
  170. package/dist/utils/CollectionPage/getQuickEditPage.js +37 -23
  171. package/dist/utils/CollectionPage/getQuickEditPage.test.js +26 -45
  172. package/dist/utils/CollectionPage/index.js +3 -1
  173. package/dist/utils/CollectionPage/mergeCollectionPages.js +31 -35
  174. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +20 -20
  175. package/dist/utils/CollectionPage/removeCollectionPageEntry.js +4 -6
  176. package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +10 -10
  177. package/dist/utils/CollectionPage/setCollectionPageData.js +16 -17
  178. package/dist/utils/CollectionPage/setCollectionPageData.test.js +38 -20
  179. package/dist/utils/Component/addShowWhen.js +4 -8
  180. package/dist/utils/Component/addShowWhen.test.js +37 -37
  181. package/dist/utils/Component/applyToComponentTree.js +18 -18
  182. package/dist/utils/Component/applyToComponentTree.test.js +27 -32
  183. package/dist/utils/Component/cleanAttributes.js +10 -13
  184. package/dist/utils/Component/cleanAttributes.test.js +17 -18
  185. package/dist/utils/Component/elevateNestedComponents.js +5 -5
  186. package/dist/utils/Component/elevateNestedComponents.test.js +30 -30
  187. package/dist/utils/Component/getComponent.js +88 -94
  188. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +18 -17
  189. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +46 -59
  190. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +39 -48
  191. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +23 -33
  192. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +20 -18
  193. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +17 -22
  194. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +20 -25
  195. package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +10 -9
  196. package/dist/utils/Component/getComponentTests/getComponent.html.test.js +17 -15
  197. package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +9 -8
  198. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +17 -15
  199. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +22 -26
  200. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +155 -175
  201. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +17 -15
  202. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +17 -22
  203. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +57 -72
  204. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +17 -22
  205. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +17 -22
  206. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +31 -38
  207. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +20 -29
  208. package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +2 -2
  209. package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +9 -8
  210. package/dist/utils/Component/getDefaultValue.js +6 -8
  211. package/dist/utils/Component/getDefaultValue.test.js +12 -12
  212. package/dist/utils/Component/getDefaultValueFromConfig.js +22 -21
  213. package/dist/utils/Component/getDefaultValueFromConfig.test.js +31 -31
  214. package/dist/utils/Component/index.js +1 -1
  215. package/dist/utils/Component/isEditable.js +2 -4
  216. package/dist/utils/Component/isEditable.test.js +14 -15
  217. package/dist/utils/Component/optionIsSelected.js +1 -1
  218. package/dist/utils/Component/optionIsSelected.test.js +9 -9
  219. package/dist/utils/Component/setupContainerComponentsPath.js +27 -29
  220. package/dist/utils/Component/setupContainerComponentsPath.test.js +11 -11
  221. package/dist/utils/Component/showComponent.js +1 -1
  222. package/dist/utils/Component/showComponent.test.js +28 -28
  223. package/dist/utils/Component/wrapInFormGroup.js +2 -2
  224. package/dist/utils/Condition/index.js +1 -1
  225. package/dist/utils/Condition/meetsAllConditions.js +8 -8
  226. package/dist/utils/Condition/meetsAllConditions.test.js +20 -20
  227. package/dist/utils/Condition/meetsCondition.js +28 -19
  228. package/dist/utils/Condition/meetsCondition.test.js +476 -376
  229. package/dist/utils/Condition/meetsOneCondition.js +5 -5
  230. package/dist/utils/Condition/meetsOneCondition.test.js +16 -16
  231. package/dist/utils/Condition/setupConditions.js +13 -18
  232. package/dist/utils/Condition/setupConditions.test.js +7 -7
  233. package/dist/utils/Container/getEditableComponents.js +3 -5
  234. package/dist/utils/Container/getEditableComponents.test.js +43 -45
  235. package/dist/utils/Container/index.js +1 -1
  236. package/dist/utils/Container/setupNesting.js +16 -20
  237. package/dist/utils/Container/setupNesting.test.js +27 -30
  238. package/dist/utils/Container/showContainer.js +3 -7
  239. package/dist/utils/Container/showContainer.test.js +30 -30
  240. package/dist/utils/Data/applyFormula.js +38 -48
  241. package/dist/utils/Data/applyFormula.test.js +20 -20
  242. package/dist/utils/Data/getAutocompleteSource.js +18 -26
  243. package/dist/utils/Data/getAutocompleteSource.test.js +80 -86
  244. package/dist/utils/Data/getDataPath.js +18 -28
  245. package/dist/utils/Data/getDataPath.test.js +12 -12
  246. package/dist/utils/Data/getOptions.js +29 -25
  247. package/dist/utils/Data/getOptions.test.js +93 -20
  248. package/dist/utils/Data/getSourceData.js +6 -19
  249. package/dist/utils/Data/getSourceData.test.js +84 -80
  250. package/dist/utils/Data/index.js +1 -1
  251. package/dist/utils/Data/nestInRefdataOptions.js +42 -0
  252. package/dist/utils/Data/nestInRefdataOptions.test.js +236 -0
  253. package/dist/utils/Data/refDataToOptions.js +10 -13
  254. package/dist/utils/Data/refDataToOptions.test.js +19 -19
  255. package/dist/utils/Data/setDataItem.js +7 -8
  256. package/dist/utils/Data/setDataItem.test.js +37 -37
  257. package/dist/utils/Data/setupFormData.js +13 -21
  258. package/dist/utils/Data/setupFormData.test.js +51 -50
  259. package/dist/utils/Data/setupRefDataUrlForComponent.js +20 -26
  260. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +24 -24
  261. package/dist/utils/FormPage/applyConditionalProperties.js +5 -9
  262. package/dist/utils/FormPage/applyConditionalProperties.test.js +15 -18
  263. package/dist/utils/FormPage/getConditionalText.js +3 -3
  264. package/dist/utils/FormPage/getConditionalText.test.js +29 -29
  265. package/dist/utils/FormPage/getFormPage.js +15 -16
  266. package/dist/utils/FormPage/getFormPage.test.js +47 -46
  267. package/dist/utils/FormPage/getFormPages.js +7 -12
  268. package/dist/utils/FormPage/getFormPages.test.js +20 -23
  269. package/dist/utils/FormPage/getPageActions.js +9 -15
  270. package/dist/utils/FormPage/getPageActions.test.js +32 -32
  271. package/dist/utils/FormPage/getParagraphFromText.js +5 -7
  272. package/dist/utils/FormPage/getParagraphFromText.test.js +6 -6
  273. package/dist/utils/FormPage/index.js +2 -4
  274. package/dist/utils/FormPage/showFormPage.js +3 -7
  275. package/dist/utils/FormPage/showFormPage.test.js +32 -32
  276. package/dist/utils/FormPage/showFormPageCYA.js +1 -1
  277. package/dist/utils/FormPage/showFormPageCYA.test.js +8 -8
  278. package/dist/utils/FormPage/useComponent.js +21 -28
  279. package/dist/utils/FormPage/useComponent.test.js +77 -79
  280. package/dist/utils/Format/formatData.js +1 -1
  281. package/dist/utils/Format/formatData.test.js +18 -18
  282. package/dist/utils/Format/formatDataForComponent.js +5 -6
  283. package/dist/utils/Format/formatDataForComponent.test.js +50 -78
  284. package/dist/utils/Format/formatDataForForm.js +6 -8
  285. package/dist/utils/Format/formatDataForForm.test.js +13 -16
  286. package/dist/utils/Format/formatDataForPage.js +4 -5
  287. package/dist/utils/Format/formatDataForPage.test.js +20 -25
  288. package/dist/utils/Format/index.js +1 -1
  289. package/dist/utils/Hub/getFormHub.js +1 -1
  290. package/dist/utils/Hub/getFormHub.test.js +28 -31
  291. package/dist/utils/Hub/index.js +1 -1
  292. package/dist/utils/Meta/constants.js +2 -2
  293. package/dist/utils/Meta/documents/getDocuments.js +1 -1
  294. package/dist/utils/Meta/documents/getDocuments.test.js +24 -16
  295. package/dist/utils/Meta/documents/index.js +1 -1
  296. package/dist/utils/Meta/documents/setDocumentsForField.js +14 -16
  297. package/dist/utils/Meta/documents/setDocumentsForField.test.js +68 -34
  298. package/dist/utils/Meta/index.js +1 -1
  299. package/dist/utils/Operate/checkValueIsTruthy.js +2 -2
  300. package/dist/utils/Operate/checkValueIsTruthy.test.js +16 -16
  301. package/dist/utils/Operate/getFirstOf.js +5 -5
  302. package/dist/utils/Operate/getFirstOf.test.js +31 -31
  303. package/dist/utils/Operate/getIndexOfMatchingValueIn.js +10 -10
  304. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +46 -52
  305. package/dist/utils/Operate/index.js +1 -1
  306. package/dist/utils/Operate/persistValueInFormData.js +3 -3
  307. package/dist/utils/Operate/persistValueInFormData.test.js +22 -20
  308. package/dist/utils/Operate/runPageOperations.js +7 -7
  309. package/dist/utils/Operate/runPageOperations.test.js +35 -36
  310. package/dist/utils/Operate/setValueInFormData.js +2 -2
  311. package/dist/utils/Operate/setValueInFormData.test.js +16 -16
  312. package/dist/utils/Operate/shouldRun.js +6 -6
  313. package/dist/utils/Operate/shouldRun.test.js +21 -27
  314. package/dist/utils/Validate/additional/conditionallyRequired.js +4 -4
  315. package/dist/utils/Validate/additional/conditionallyRequired.test.js +18 -18
  316. package/dist/utils/Validate/additional/index.js +6 -6
  317. package/dist/utils/Validate/additional/index.test.js +12 -12
  318. package/dist/utils/Validate/additional/mustBeAfter.js +2 -2
  319. package/dist/utils/Validate/additional/mustBeAfter.test.js +40 -40
  320. package/dist/utils/Validate/additional/mustBeBefore.js +2 -2
  321. package/dist/utils/Validate/additional/mustBeBefore.test.js +28 -28
  322. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +7 -11
  323. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +37 -41
  324. package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
  325. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +18 -18
  326. package/dist/utils/Validate/additional/mustBeInTheFuture.js +2 -2
  327. package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +12 -12
  328. package/dist/utils/Validate/additional/mustBeInThePast.js +3 -3
  329. package/dist/utils/Validate/additional/mustBeInThePast.test.js +12 -12
  330. package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
  331. package/dist/utils/Validate/additional/mustBeLessThan.test.js +17 -17
  332. package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
  333. package/dist/utils/Validate/additional/mustBeLongerThan.test.js +16 -16
  334. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
  335. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +20 -20
  336. package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
  337. package/dist/utils/Validate/additional/mustBeShorterThan.test.js +16 -16
  338. package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +8 -4
  339. package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +64 -32
  340. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
  341. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +14 -16
  342. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
  343. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +12 -12
  344. package/dist/utils/Validate/additional/mustNotContainSql.js +3 -4
  345. package/dist/utils/Validate/additional/mustNotContainSql.test.js +14 -14
  346. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +2 -2
  347. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +28 -26
  348. package/dist/utils/Validate/additional/utils.js +9 -22
  349. package/dist/utils/Validate/index.js +1 -1
  350. package/dist/utils/Validate/validateCollection.js +19 -25
  351. package/dist/utils/Validate/validateCollection.test.js +74 -66
  352. package/dist/utils/Validate/validateComponent.js +17 -15
  353. package/dist/utils/Validate/validateComponent.test.js +167 -146
  354. package/dist/utils/Validate/validateContainer.js +16 -19
  355. package/dist/utils/Validate/validateContainer.test.js +84 -45
  356. package/dist/utils/Validate/validateDate.js +15 -21
  357. package/dist/utils/Validate/validateDate.test.js +31 -32
  358. package/dist/utils/Validate/validateEmail.js +6 -8
  359. package/dist/utils/Validate/validateEmail.test.js +25 -25
  360. package/dist/utils/Validate/validateMultifile.js +5 -7
  361. package/dist/utils/Validate/validateMultifile.test.js +17 -18
  362. package/dist/utils/Validate/validatePage.js +24 -18
  363. package/dist/utils/Validate/validatePage.test.js +263 -182
  364. package/dist/utils/Validate/validateRegex.js +3 -5
  365. package/dist/utils/Validate/validateRegex.test.js +14 -14
  366. package/dist/utils/Validate/validateRequired.js +4 -6
  367. package/dist/utils/Validate/validateRequired.test.js +18 -18
  368. package/dist/utils/Validate/validateTextArea.js +4 -6
  369. package/dist/utils/Validate/validateTextArea.test.js +20 -20
  370. package/dist/utils/Validate/validateTime.js +11 -18
  371. package/dist/utils/Validate/validateTime.test.js +16 -16
  372. package/dist/utils/index.js +7 -9
  373. package/package.json +5 -5
  374. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/component-used-in-multiple-pages-data.json +0 -4
  375. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/component-used-in-multiple-pages-form.json +0 -61
  376. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-collection-data-removed.json +0 -4
  377. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-collections.json +0 -8
  378. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-components-removed.json +0 -3
  379. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-components.json +0 -5
  380. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-entire-collection-removed.json +0 -3
  381. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-nested-component-removed.json +0 -10
  382. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-nested-components.json +0 -11
  383. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-for-nested-components.json +0 -96
  384. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-collections-delete-entire.json +0 -47
  385. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-collections.json +0 -46
  386. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-components.json +0 -48
  387. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +0 -175
  388. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +0 -113
  389. package/dist/components/FormRenderer/helpers/deleteNodeByPath.js +0 -20
  390. package/dist/components/FormRenderer/helpers/deleteNodeByPath.test.js +0 -56
@@ -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
  });
@@ -9,32 +8,26 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
9
8
  var _react = _interopRequireWildcard(require("react"));
10
9
  var _hooks = require("../../hooks");
11
10
  var _PageAction = require("../../models/PageAction");
11
+ var _elevateNestedComponents = _interopRequireDefault(require("../../utils/Component/elevateNestedComponents"));
12
+ var _getErrorsForCollection = _interopRequireDefault(require("../../utils/CollectionPage/getErrorsForCollection"));
12
13
  var _utils = _interopRequireDefault(require("../../utils"));
13
14
  var _getCYARow = _interopRequireDefault(require("../../utils/CheckYourAnswers/getCYARow"));
14
- var _elevateNestedComponents = _interopRequireDefault(require("../../utils/Component/elevateNestedComponents"));
15
15
  var _Answer = _interopRequireDefault(require("../CheckYourAnswers/Answer"));
16
16
  var _ActionButton = _interopRequireDefault(require("../PageActions/ActionButton"));
17
17
  var _Confirmation = _interopRequireDefault(require("./Confirmation"));
18
18
  var _SummaryCard = _interopRequireDefault(require("./SummaryCard"));
19
19
  var _SummaryCardValidationContext = _interopRequireDefault(require("./SummaryCardValidationContext"));
20
20
  require("./CollectionSummary.scss");
21
- 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); }
22
- 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; }
21
+ 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); }
22
+ 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 && {}.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; }
23
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
- 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; }
25
- 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; }
26
- 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; }
27
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
28
- 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); }
29
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
30
- 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."); }
31
- 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); }
32
- 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; }
33
- 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; } }
34
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // Global imports.
24
+ // Global imports.
25
+
35
26
  // Local imports.
27
+
36
28
  // Styles.
37
- var DEFAULT_ADD_BUTTON_LABEL = exports.DEFAULT_ADD_BUTTON_LABEL = 'Add';
29
+
30
+ const DEFAULT_ADD_BUTTON_LABEL = exports.DEFAULT_ADD_BUTTON_LABEL = 'Add';
38
31
 
39
32
  // A note about validation.
40
33
  //
@@ -48,161 +41,158 @@ var DEFAULT_ADD_BUTTON_LABEL = exports.DEFAULT_ADD_BUTTON_LABEL = 'Add';
48
41
  // errors found by the summary and allow the Summary Card to keep any Quick Edit
49
42
  // errors local to the Quick Edit page.
50
43
 
51
- var CollectionSummary = function CollectionSummary(_ref) {
44
+ const CollectionSummary = _ref => {
52
45
  var _config$confirmation, _config$confirmation2, _config$confirmation3;
53
- var config = _ref.config,
54
- formData = _ref.formData,
55
- onAction = _ref.onAction,
56
- onChange = _ref.onChange,
57
- pages = _ref.pages;
58
- var _useValidation = (0, _hooks.useValidation)(),
59
- errors = _useValidation.errors,
60
- addErrors = _useValidation.addErrors,
61
- clearErrors = _useValidation.clearErrors;
62
- var _useState = (0, _react.useState)(null),
63
- _useState2 = _slicedToArray(_useState, 2),
64
- entryToDelete = _useState2[0],
65
- setEntryToDelete = _useState2[1];
66
- var data = (0, _react.useMemo)(function () {
67
- return _utils.default.CollectionPage.getData(config.collectionName, formData) || [];
68
- }, [formData]);
69
- var masterPage = (0, _react.useMemo)(function () {
70
- var collectionNameParts = config.collectionName.split('.');
71
- var childPages = _utils.default.CollectionPage.mergePages(pages || []) || [];
72
- return collectionNameParts.reduce(function (acc, current, index) {
46
+ let {
47
+ config,
48
+ formData,
49
+ onAction,
50
+ onChange,
51
+ onTopLevelChange,
52
+ pages
53
+ } = _ref;
54
+ const {
55
+ hooks
56
+ } = (0, _hooks.useHooks)();
57
+ const {
58
+ errors,
59
+ addErrors,
60
+ clearErrors,
61
+ queuedErrors,
62
+ enqueueErrors,
63
+ dequeueErrors
64
+ } = (0, _hooks.useValidation)();
65
+ const [entryToDelete, setEntryToDelete] = (0, _react.useState)(null);
66
+ const data = (0, _react.useMemo)(() => _utils.default.CollectionPage.getData(config.collectionName, formData) || [], [formData]);
67
+ const masterPage = (0, _react.useMemo)(() => {
68
+ const collectionNameParts = config.collectionName.split('.');
69
+ let childPages = _utils.default.CollectionPage.mergePages(pages || []) || [];
70
+ return collectionNameParts.reduce((acc, current, index) => {
73
71
  var _childPages$find;
74
- var currentPath = index === 0 ? "".concat(acc).concat(current) : "".concat(acc, ".").concat(current);
72
+ const currentPath = index === 0 ? "".concat(acc).concat(current) : "".concat(acc, ".").concat(current);
75
73
  if (index === collectionNameParts.length - 1) {
76
74
  var _childPages;
77
- return ((_childPages = childPages) === null || _childPages === void 0 ? void 0 : _childPages.find(function (p) {
75
+ return ((_childPages = childPages) === null || _childPages === void 0 ? void 0 : _childPages.find(p => {
78
76
  var _p$collection;
79
77
  return ((_p$collection = p.collection) === null || _p$collection === void 0 ? void 0 : _p$collection.name) === currentPath;
80
78
  })) || null;
81
79
  }
82
- childPages = ((_childPages$find = childPages.find(function (p) {
80
+ childPages = ((_childPages$find = childPages.find(p => {
83
81
  var _p$collection2;
84
82
  return ((_p$collection2 = p.collection) === null || _p$collection2 === void 0 ? void 0 : _p$collection2.name) === currentPath;
85
83
  })) === null || _childPages$find === void 0 ? void 0 : _childPages$find.childPages) || null;
86
84
  return currentPath;
87
85
  }, "");
88
86
  }, [pages]);
89
- var allComponents = (0, _react.useMemo)(function () {
87
+ const allComponents = (0, _react.useMemo)(() => {
90
88
  if (config.card.listView) {
91
89
  var _masterPage$childPage;
92
- var components = (_masterPage$childPage = masterPage.childPages) === null || _masterPage$childPage === void 0 ? void 0 : _masterPage$childPage.reduce(function (acc, page) {
93
- var elevatedComponents = (0, _elevateNestedComponents.default)(page.components, _objectSpread(_objectSpread({}, formData), entryToDelete));
90
+ const components = (_masterPage$childPage = masterPage.childPages) === null || _masterPage$childPage === void 0 ? void 0 : _masterPage$childPage.reduce((acc, page) => {
91
+ const elevatedComponents = (0, _elevateNestedComponents.default)(page.components, {
92
+ ...formData,
93
+ ...entryToDelete
94
+ });
94
95
  return acc.concat(elevatedComponents);
95
96
  }, []);
96
97
  return components || [];
97
98
  }
98
99
  return [];
99
100
  }, [masterPage, formData, entryToDelete, config.card.listView]);
100
- var validateEntries = function validateEntries() {
101
- var stored = [];
102
- // We only clear errors if it's not empty to avoid
101
+ const validateEntries = () => {
102
+ // We only clear queuedErrors if it's not empty to avoid
103
103
  // triggering a race condition with the 'data' memo
104
104
  // above.
105
- if (errors.length > 0) {
106
- stored = errors.filter(function (e) {
107
- return e.id === config.id;
108
- });
109
- clearErrors();
105
+ if (queuedErrors.length > 0) {
106
+ dequeueErrors(e => e.raisedBy === config.id);
110
107
  }
111
- var allErrors = [];
112
- data.forEach(function (entry) {
113
- // Validation of a collection page uses the data from the
114
- // active entry, so here we have to set the active ID before
115
- // validating.
116
- var childPages = masterPage === null || masterPage === void 0 ? void 0 : masterPage.childPages.map(function (page) {
117
- return _objectSpread(_objectSpread({}, page), {}, {
118
- formData: _objectSpread(_objectSpread({}, masterPage.formData), {}, _defineProperty({}, "".concat(config.collectionName, "ActiveId"), entry.id))
119
- });
120
- });
121
- var allPagesErrors = (childPages === null || childPages === void 0 ? void 0 : childPages.flatMap(function (page) {
122
- return _utils.default.Validate.page(page);
123
- })) || [];
124
- // For each error we found, add the entryId so we know what Summary Card
125
- // we have to pass it to.
126
- var entryErrors = allPagesErrors.map(function (e) {
127
- return _objectSpread(_objectSpread({}, e), {}, {
128
- entryId: entry.id
129
- });
130
- });
131
- allErrors = allErrors.concat(entryErrors);
132
- });
133
- if (stored.length > 0) {
134
- allErrors = allErrors.concat(stored);
135
- }
136
- // We only add allErrors if it's not empty to avoid
108
+ const allErrors = (0, _getErrorsForCollection.default)(config, masterPage, formData, hooks);
109
+
110
+ // We only queue allErrors if it's not empty to avoid
137
111
  // triggering a race condition with the 'data' memo
138
112
  // above.
139
113
  if (allErrors.length > 0) {
140
- addErrors(allErrors);
114
+ enqueueErrors(allErrors);
141
115
  }
142
116
  };
143
- (0, _react.useEffect)(function () {
117
+ (0, _react.useEffect)(() => {
144
118
  // An empty array here indicates nothing to validate, higher level validation
145
119
  // such as 'required' is taken care of at the page level not here
146
120
  if (Array.isArray(data) && data.length > 0) {
147
121
  validateEntries();
148
122
  }
149
123
  }, [data]);
150
- var onSummaryCardChange = function onSummaryCardChange(page, entryId) {
151
- if (typeof onAction !== 'function') {
152
- return;
124
+ const onSummaryCardFullEdit = (page, entryId) => {
125
+ if (typeof onAction === 'function') {
126
+ const newData = [].concat(data);
127
+ const entryIndex = data.findIndex(e => e.id === entryId);
128
+ const {
129
+ isDuplicate,
130
+ ...newEntry
131
+ } = data[entryIndex];
132
+ newData[entryIndex] = {
133
+ ...newEntry
134
+ };
135
+ onAction({
136
+ type: _PageAction.PageActionTypes.SAVE_AND_NAVIGATE,
137
+ page,
138
+ addToFormData: [{
139
+ field: "".concat(config.collectionName.split('.').pop(), "ActiveId"),
140
+ value: entryId
141
+ }, {
142
+ field: config.collectionName,
143
+ value: newData,
144
+ isCollection: true
145
+ }]
146
+ });
153
147
  }
154
- onAction({
155
- type: _PageAction.PageActionTypes.SAVE_AND_NAVIGATE,
156
- page: page,
157
- addToFormData: {
158
- field: "".concat(config.collectionName.split('.').pop(), "ActiveId"),
159
- value: entryId
160
- }
161
- });
162
148
  };
163
- var onDuplicate = function onDuplicate(entry) {
149
+ const onDuplicate = entry => {
164
150
  var _config$card;
165
- _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) || []);
166
- var parentCollection = config.collectionName.split('.').shift();
151
+ _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) || [], {
152
+ isDuplicate: true
153
+ });
154
+ const topLevelCollectionName = config.collectionName.split('.').shift();
167
155
  // Report the whole top-level collection as being changed. We have to do this
168
156
  // because of how patch is applied to formData on a page submission.
169
- if (typeof onChange === 'function') {
170
- onChange({
157
+ if (typeof onTopLevelChange === 'function') {
158
+ onTopLevelChange({
171
159
  target: {
172
- name: parentCollection,
173
- value: _utils.default.CollectionPage.getData(parentCollection, formData)
160
+ name: topLevelCollectionName,
161
+ value: _utils.default.CollectionPage.getData(topLevelCollectionName, formData)
174
162
  }
175
163
  });
176
164
  validateEntries();
177
165
  }
178
166
  };
179
- var onDeleteConfirm = function onDeleteConfirm() {
167
+ const onDeleteConfirm = () => {
180
168
  if (!entryToDelete) {
181
169
  return;
182
170
  }
183
171
  _utils.default.CollectionPage.removeEntry(config.collectionName, formData, entryToDelete.id);
184
- var parentCollection = config.collectionName.split('.').shift();
172
+ const topLevelCollectionName = config.collectionName.split('.').shift();
185
173
  // Report the whole top-level collection as being changed. We have to do this
186
174
  // because of how patch is applied to formData on a page submission.
187
- if (typeof onChange === 'function') {
188
- onChange({
175
+ if (typeof onTopLevelChange === 'function') {
176
+ onTopLevelChange({
189
177
  target: {
190
- name: parentCollection,
191
- value: _utils.default.CollectionPage.getData(parentCollection, formData)
178
+ name: topLevelCollectionName,
179
+ value: _utils.default.CollectionPage.getData(topLevelCollectionName, formData)
192
180
  }
193
181
  });
194
182
  }
195
183
  setEntryToDelete(null);
196
184
  validateEntries();
197
185
  };
198
- var renderFieldValue = function renderFieldValue(field) {
199
- var component = allComponents.find(function (c) {
200
- return c.fieldId === field;
201
- });
186
+ const renderFieldValue = field => {
187
+ const component = allComponents.find(c => c.fieldId === field);
202
188
  if (!component) return null;
203
- var row = (0, _getCYARow.default)(_objectSpread(_objectSpread({}, masterPage), {}, {
204
- formData: _objectSpread(_objectSpread({}, formData), entryToDelete)
205
- }), component);
189
+ const row = (0, _getCYARow.default)({
190
+ ...masterPage,
191
+ formData: {
192
+ ...formData,
193
+ ...entryToDelete
194
+ }
195
+ }, component);
206
196
  return /*#__PURE__*/_react.default.createElement("div", {
207
197
  key: field,
208
198
  className: "confirmation-field-value"
@@ -216,20 +206,22 @@ var CollectionSummary = function CollectionSummary(_ref) {
216
206
  id: config.fieldId
217
207
  }, entryToDelete && /*#__PURE__*/_react.default.createElement(_Confirmation.default, {
218
208
  id: "".concat(config.fieldId, ".confirmation"),
219
- message: _utils.default.interpolateString((_config$confirmation = config.confirmation) === null || _config$confirmation === void 0 ? void 0 : _config$confirmation.message, entryToDelete) || null,
209
+ message: _utils.default.interpolateString((_config$confirmation = config.confirmation) === null || _config$confirmation === void 0 ? void 0 : _config$confirmation.message, {
210
+ ...entryToDelete,
211
+ index: entryToDelete.index + 1
212
+ }) || null,
220
213
  confirmLabel: _utils.default.interpolateString((_config$confirmation2 = config.confirmation) === null || _config$confirmation2 === void 0 ? void 0 : _config$confirmation2.label, entryToDelete) || null,
221
214
  onConfirm: onDeleteConfirm,
222
- onCancel: function onCancel() {
223
- return setEntryToDelete(null);
224
- }
215
+ onCancel: () => setEntryToDelete(null)
225
216
  }, config.card.listView ? /*#__PURE__*/_react.default.createElement("div", {
226
217
  className: "confirmation-content"
227
218
  }, (_config$confirmation3 = config.confirmation) === null || _config$confirmation3 === void 0 ? void 0 : _config$confirmation3.displayFields.map(renderFieldValue)) : /*#__PURE__*/_react.default.createElement(_SummaryCard.default, {
228
219
  id: "".concat(config.fieldId, ".confirmationChild"),
229
220
  entryData: entryToDelete,
230
- config: config.card ? _objectSpread(_objectSpread({}, config.card), {}, {
221
+ config: config.card ? {
222
+ ...config.card,
231
223
  quickEdit: null
232
- }) : {},
224
+ } : {},
233
225
  masterPage: masterPage,
234
226
  classModifiers: "nested",
235
227
  hideDetails: true
@@ -243,39 +235,46 @@ var CollectionSummary = function CollectionSummary(_ref) {
243
235
  classModifiers: ['secondary']
244
236
  },
245
237
  onAction: onAction
246
- }), data.map(function (entry, index) {
247
- var isInError = errors.filter(function (e) {
248
- return e.entryId === entry.id;
249
- }).length > 0;
250
- var finalConfig = _objectSpread(_objectSpread({}, config.card), isInError && config.errorCard ? config.errorCard : {});
251
- var key = "".concat(config.fieldId, ".summaryCard").concat(entry.id);
238
+ }), data.map((entry, index) => {
239
+ const isInError = errors.filter(e => e.entryId === entry.id).length > 0;
240
+ const finalConfig = {
241
+ ...config.card,
242
+ ...(entry.isDuplicate && config.duplicatedCard ? config.duplicatedCard : {}),
243
+ ...(isInError && config.errorCard ? config.errorCard : {})
244
+ };
245
+ const key = "".concat(config.fieldId, ".summaryCard").concat(entry.id);
252
246
  return /*#__PURE__*/_react.default.createElement(_SummaryCardValidationContext.default, {
253
247
  entryId: entry.id,
254
- topLevelErrors: errors
248
+ topLevelErrors: errors,
249
+ clearTopLevelErrorsForCard: () => {
250
+ const newErrors = errors.filter(e => e.entryId !== entry.id);
251
+ clearErrors();
252
+ addErrors(newErrors);
253
+ }
255
254
  }, /*#__PURE__*/_react.default.createElement(_SummaryCard.default, {
256
255
  id: key,
257
256
  key: key,
258
- entryData: _objectSpread(_objectSpread({}, entry), {}, {
259
- index: index
260
- }),
257
+ entryData: {
258
+ ...entry,
259
+ index
260
+ },
261
261
  masterPage: masterPage,
262
262
  config: finalConfig || {},
263
- onChange: onSummaryCardChange,
263
+ onFullEdit: onSummaryCardFullEdit,
264
264
  onDuplicate: onDuplicate,
265
- onDelete: function onDelete() {
266
- return setEntryToDelete(entry);
267
- },
268
- onQuickEdit: function onQuickEdit(target) {
265
+ onDelete: () => setEntryToDelete({
266
+ ...entry,
267
+ index
268
+ }),
269
+ onQuickEdit: target => {
269
270
  validateEntries();
270
271
  return onChange(target);
271
272
  },
272
273
  parentCollectionName: config.collectionName.split('.').shift(),
273
274
  childCollections: config.childCollections || [],
274
275
  formData: formData,
275
- classModifiers: entry === entryToDelete ? ['deleting-summary-card'] : [''],
276
- inError: errors.filter(function (e) {
277
- return e.entryId === entry.id;
278
- }).length > 0
276
+ classModifiers: entry.id === (entryToDelete === null || entryToDelete === void 0 ? void 0 : entryToDelete.id) ? ['deleting-summary-card'] : [''],
277
+ inError: errors.filter(e => e.entryId === entry.id).length > 0
279
278
  }));
280
279
  }), config.card.listView && config.addButton && /*#__PURE__*/_react.default.createElement(_ActionButton.default, {
281
280
  id: "".concat(config.fieldId, ".addButton"),
@@ -315,6 +314,14 @@ CollectionSummary.propTypes = {
315
314
  fieldsToIgnore: _propTypes.default.arrayOf(_propTypes.default.string)
316
315
  })
317
316
  }),
317
+ duplicatedCard: _propTypes.default.shape({
318
+ banners: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({})])),
319
+ title: _propTypes.default.string,
320
+ details: _propTypes.default.string,
321
+ duplicateAction: _propTypes.default.shape({
322
+ fieldsToIgnore: _propTypes.default.arrayOf(_propTypes.default.string)
323
+ })
324
+ }),
318
325
  confirmation: _propTypes.default.shape({
319
326
  message: _propTypes.default.string,
320
327
  label: _propTypes.default.string,
@@ -324,12 +331,14 @@ CollectionSummary.propTypes = {
324
331
  }).isRequired,
325
332
  onAction: _propTypes.default.func,
326
333
  onChange: _propTypes.default.func,
334
+ onTopLevelChange: _propTypes.default.func,
327
335
  formData: _propTypes.default.shape({}).isRequired,
328
336
  pages: _propTypes.default.arrayOf(_propTypes.default.shape({}))
329
337
  };
330
338
  CollectionSummary.defaultProps = {
331
339
  onAction: null,
332
340
  onChange: null,
341
+ onTopLevelChange: null,
333
342
  pages: []
334
343
  };
335
344
  var _default = exports.default = CollectionSummary;
@@ -1,4 +1,4 @@
1
- @import "node_modules/govuk-frontend/govuk/_base";
1
+ @import "govuk-frontend/dist/govuk/_base";
2
2
 
3
3
  .hods-form-summary-card.hods-form-summary-card--nested {
4
4
  box-shadow: none;