@ukhomeoffice/cop-react-form-renderer 5.0.0-alpha → 5.0.0

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 (277) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +18 -7
  2. package/dist/components/CheckYourAnswers/Answer.test.js +137 -0
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +70 -46
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.stories.mdx +410 -0
  5. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +551 -0
  6. package/dist/components/CollectionPage/CollectionPage.js +15 -10
  7. package/dist/components/CollectionPage/CollectionPage.test.js +382 -0
  8. package/dist/components/FormComponent/Collection.js +91 -48
  9. package/dist/components/FormComponent/Collection.scss +2 -1
  10. package/dist/components/FormComponent/Collection.test.js +807 -0
  11. package/dist/components/FormComponent/Container.js +35 -16
  12. package/dist/components/FormComponent/Container.test.js +370 -0
  13. package/dist/components/FormComponent/FormComponent.js +39 -13
  14. package/dist/components/FormComponent/FormComponent.stories.mdx +184 -0
  15. package/dist/components/FormComponent/FormComponent.test.js +226 -0
  16. package/dist/components/FormComponent/helpers/addLabel.js +5 -4
  17. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +16 -0
  18. package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +29 -0
  19. package/dist/components/FormComponent/helpers/index.js +8 -1
  20. package/dist/components/FormPage/FormPage.js +69 -30
  21. package/dist/components/FormPage/FormPage.stories.mdx +155 -0
  22. package/dist/components/FormPage/FormPage.test.js +330 -0
  23. package/dist/components/FormRenderer/FormRenderer.js +142 -228
  24. package/dist/components/FormRenderer/FormRenderer.stories.mdx +183 -0
  25. package/dist/components/FormRenderer/FormRenderer.test.js +968 -0
  26. package/dist/components/FormRenderer/handlers/index.js +1 -2
  27. package/dist/components/FormRenderer/handlers/navigate.js +3 -1
  28. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +35 -14
  29. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +88 -5
  30. package/dist/components/FormRenderer/helpers/getCYA.js +11 -2
  31. package/dist/components/FormRenderer/helpers/getNextPageId.js +13 -7
  32. package/dist/components/FormRenderer/helpers/getRelevantPages.js +10 -2
  33. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +1 -1
  34. package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +2 -2
  35. package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +6 -2
  36. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +171 -51
  37. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +307 -24
  38. package/dist/components/FormRenderer/helpers/index.js +1 -2
  39. package/dist/components/FormRenderer/onCYAAction.js +108 -0
  40. package/dist/components/FormRenderer/onCYAAction.test.js +583 -0
  41. package/dist/components/FormRenderer/onPageAction.js +145 -0
  42. package/dist/components/FormRenderer/onPageAction.test.js +678 -0
  43. package/dist/components/FormRenderer/onTaskAction.js +48 -0
  44. package/dist/components/FormRenderer/onTaskAction.test.js +217 -0
  45. package/dist/components/PageActions/ActionButton.js +0 -3
  46. package/dist/components/PageActions/ActionButton.test.js +93 -0
  47. package/dist/components/PageActions/PageActions.js +2 -2
  48. package/dist/components/PageActions/PageActions.stories.mdx +74 -0
  49. package/dist/components/PageActions/PageActions.test.js +132 -0
  50. package/dist/components/SummaryList/GroupAction.js +2 -2
  51. package/dist/components/SummaryList/GroupAction.test.js +80 -0
  52. package/dist/components/SummaryList/RowAction.js +2 -2
  53. package/dist/components/SummaryList/RowAction.test.js +80 -0
  54. package/dist/components/SummaryList/SummaryList.js +29 -12
  55. package/dist/components/SummaryList/SummaryList.scss +19 -0
  56. package/dist/components/SummaryList/SummaryList.stories.mdx +90 -0
  57. package/dist/components/SummaryList/SummaryList.test.js +400 -0
  58. package/dist/components/SummaryList/SummaryListHeadingRow.js +30 -0
  59. package/dist/components/SummaryList/SummaryListRow.js +5 -2
  60. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +2 -1
  61. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +2 -1
  62. package/dist/components/TaskList/Task.js +3 -3
  63. package/dist/components/TaskList/Task.test.js +167 -0
  64. package/dist/components/TaskList/TaskList.js +73 -22
  65. package/dist/components/TaskList/TaskList.stories.mdx +164 -0
  66. package/dist/components/TaskList/TaskList.test.js +389 -0
  67. package/dist/components/TaskList/TaskState.js +2 -2
  68. package/dist/components/TaskList/TaskState.test.js +86 -0
  69. package/dist/components/index.js +14 -0
  70. package/dist/context/HooksContext/HooksContext.js +72 -8
  71. package/dist/context/HooksContext/HooksContext.test.js +44 -0
  72. package/dist/context/ValidationContext/ValidationContext.js +38 -28
  73. package/dist/context/ValidationContext/ValidationContext.test.js +84 -0
  74. package/dist/hooks/useAxios.js +10 -12
  75. package/dist/hooks/useGetRequest.js +48 -49
  76. package/dist/hooks/useRefData.js +7 -4
  77. package/dist/index.js +34 -1
  78. package/dist/json/addressDetails.json +149 -0
  79. package/dist/json/areYouACivilServant.json +7 -0
  80. package/dist/json/firstForm.json +94 -0
  81. package/dist/json/grade.json +108 -0
  82. package/dist/json/group.data.json +21 -0
  83. package/dist/json/group.json +402 -0
  84. package/dist/json/groupOfRow.json +137 -0
  85. package/dist/json/groupOfRowData.json +15 -0
  86. package/dist/json/port.json +346 -0
  87. package/dist/json/saveAndContinue.json +98 -0
  88. package/dist/json/sublocation.json +859 -0
  89. package/dist/json/taskList.json +265 -0
  90. package/dist/json/team.json +17351 -0
  91. package/dist/json/terminal.json +81 -0
  92. package/dist/json/userProfile.data.json +21 -0
  93. package/dist/json/userProfile.json +276 -0
  94. package/dist/models/ComponentTypes.js +8 -0
  95. package/dist/models/PageAction.js +4 -1
  96. package/dist/models/TaskStates.js +10 -2
  97. package/dist/models/index.js +16 -1
  98. package/dist/setupTests.js +46 -0
  99. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  100. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +121 -0
  101. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +6 -2
  102. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +71 -0
  103. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +6 -2
  104. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +55 -0
  105. package/dist/utils/CheckYourAnswers/getCYARow.js +14 -11
  106. package/dist/utils/CheckYourAnswers/getCYARow.test.js +291 -0
  107. package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +4 -1
  108. package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +70 -0
  109. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +15 -10
  110. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +288 -0
  111. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +94 -36
  112. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +414 -0
  113. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +21 -7
  114. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +486 -0
  115. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -3
  116. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +346 -0
  117. package/dist/utils/CheckYourAnswers/showComponentCYA.js +19 -3
  118. package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +143 -0
  119. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +5 -1
  120. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +40 -0
  121. package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +53 -0
  122. package/dist/utils/CollectionPage/mergeCollectionPages.js +25 -17
  123. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +130 -0
  124. package/dist/utils/Component/addShowWhen.js +44 -0
  125. package/dist/utils/Component/addShowWhen.test.js +216 -0
  126. package/dist/utils/Component/applyToComponentTree.js +71 -0
  127. package/dist/utils/Component/applyToComponentTree.test.js +127 -0
  128. package/dist/utils/Component/cleanAttributes.js +8 -2
  129. package/dist/utils/Component/cleanAttributes.test.js +68 -0
  130. package/dist/utils/Component/elevateNestedComponents.js +4 -1
  131. package/dist/utils/Component/elevateNestedComponents.test.js +122 -0
  132. package/dist/utils/Component/getComponent.js +80 -11
  133. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +4 -4
  134. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +25 -24
  135. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +66 -5
  136. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +2 -2
  137. package/dist/utils/Component/getComponentTests/getComponent.details.test.js +9 -7
  138. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +3 -3
  139. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +3 -3
  140. package/dist/utils/Component/getComponentTests/getComponent.list.test.js +44 -0
  141. package/dist/utils/Component/getComponentTests/{getComponent.textarea.test.js → getComponent.multifile.test.js} +29 -21
  142. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +159 -83
  143. package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +43 -0
  144. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +3 -3
  145. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +55 -5
  146. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +3 -9
  147. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +3 -3
  148. package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +109 -0
  149. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +7 -7
  150. package/dist/utils/Component/getDefaultValue.js +4 -1
  151. package/dist/utils/Component/getDefaultValue.test.js +50 -0
  152. package/dist/utils/Component/index.js +2 -0
  153. package/dist/utils/Component/isEditable.js +2 -2
  154. package/dist/utils/Component/isEditable.test.js +43 -0
  155. package/dist/utils/Component/optionIsSelected.js +22 -0
  156. package/dist/utils/Component/optionIsSelected.test.js +42 -0
  157. package/dist/utils/Component/setupContainerComponentsPath.js +40 -0
  158. package/dist/utils/Component/setupContainerComponentsPath.test.js +78 -0
  159. package/dist/utils/Component/showComponent.test.js +156 -0
  160. package/dist/utils/Component/wrapInFormGroup.js +1 -1
  161. package/dist/utils/Condition/meetsAllConditions.js +1 -1
  162. package/dist/utils/Condition/meetsAllConditions.test.js +61 -0
  163. package/dist/utils/Condition/meetsCondition.js +74 -4
  164. package/dist/utils/Condition/meetsCondition.test.js +763 -0
  165. package/dist/utils/Condition/meetsOneCondition.js +1 -1
  166. package/dist/utils/Condition/meetsOneCondition.test.js +100 -0
  167. package/dist/utils/Condition/setupConditions.js +6 -3
  168. package/dist/utils/Condition/setupConditions.test.js +33 -0
  169. package/dist/utils/Container/getEditableComponents.test.js +135 -0
  170. package/dist/utils/Container/setupNesting.js +21 -2
  171. package/dist/utils/Container/setupNesting.test.js +145 -0
  172. package/dist/utils/Container/showContainer.test.js +178 -0
  173. package/dist/utils/Data/applyFormula.js +20 -11
  174. package/dist/utils/Data/applyFormula.test.js +263 -0
  175. package/dist/utils/Data/getAutocompleteSource.js +6 -2
  176. package/dist/utils/Data/getAutocompleteSource.test.js +352 -0
  177. package/dist/utils/Data/getDataPath.test.js +48 -0
  178. package/dist/utils/Data/getOptions.js +17 -3
  179. package/dist/utils/Data/getOptions.test.js +140 -0
  180. package/dist/utils/Data/getSourceData.js +2 -2
  181. package/dist/utils/Data/getSourceData.test.js +153 -0
  182. package/dist/utils/Data/refDataToOptions.js +4 -1
  183. package/dist/utils/Data/refDataToOptions.test.js +196 -0
  184. package/dist/utils/Data/setDataItem.test.js +110 -0
  185. package/dist/utils/Data/setupFormData.js +39 -16
  186. package/dist/utils/Data/setupFormData.test.js +410 -0
  187. package/dist/utils/Data/setupRefDataUrlForComponent.js +4 -1
  188. package/dist/utils/Data/setupRefDataUrlForComponent.test.js +131 -0
  189. package/dist/utils/FormPage/applyConditionalProperties.js +35 -0
  190. package/dist/utils/FormPage/applyConditionalProperties.test.js +61 -0
  191. package/dist/utils/FormPage/getFormPage.js +5 -2
  192. package/dist/utils/FormPage/getFormPage.test.js +206 -0
  193. package/dist/utils/FormPage/getFormPages.js +4 -1
  194. package/dist/utils/FormPage/getFormPages.test.js +97 -0
  195. package/dist/utils/FormPage/getPageActions.js +8 -4
  196. package/dist/utils/FormPage/getPageActions.test.js +114 -0
  197. package/dist/utils/FormPage/getParagraphFromText.test.js +27 -0
  198. package/dist/utils/FormPage/index.js +2 -0
  199. package/dist/utils/FormPage/showFormPage.js +2 -2
  200. package/dist/utils/FormPage/showFormPage.test.js +180 -0
  201. package/dist/utils/FormPage/showFormPageCYA.js +1 -0
  202. package/dist/utils/FormPage/showFormPageCYA.test.js +28 -0
  203. package/dist/utils/FormPage/useComponent.js +29 -14
  204. package/dist/utils/FormPage/useComponent.test.js +167 -0
  205. package/dist/utils/Format/formatData.test.js +45 -0
  206. package/dist/utils/Format/formatDataForComponent.js +2 -1
  207. package/dist/utils/Format/formatDataForComponent.test.js +142 -0
  208. package/dist/utils/Format/formatDataForForm.js +4 -1
  209. package/dist/utils/Format/formatDataForForm.test.js +81 -0
  210. package/dist/utils/Format/formatDataForPage.test.js +99 -0
  211. package/dist/utils/Hub/getFormHub.test.js +105 -0
  212. package/dist/utils/Meta/documents/getDocuments.test.js +4 -1
  213. package/dist/utils/Meta/documents/index.js +2 -2
  214. package/dist/utils/Meta/documents/setDocumentsForField.js +31 -0
  215. package/dist/utils/Meta/documents/setDocumentsForField.test.js +59 -0
  216. package/dist/utils/Operate/checkValueIsTruthy.test.js +42 -0
  217. package/dist/utils/Operate/getFirstOf.js +31 -0
  218. package/dist/utils/Operate/getFirstOf.test.js +86 -0
  219. package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +163 -0
  220. package/dist/utils/Operate/persistValueInFormData.js +2 -1
  221. package/dist/utils/Operate/persistValueInFormData.test.js +115 -0
  222. package/dist/utils/Operate/runPageOperations.js +3 -1
  223. package/dist/utils/Operate/runPageOperations.test.js +105 -0
  224. package/dist/utils/Operate/setValueInFormData.test.js +44 -0
  225. package/dist/utils/Operate/shouldRun.js +16 -13
  226. package/dist/utils/Operate/shouldRun.test.js +66 -0
  227. package/dist/utils/Validate/additional/conditionallyRequired.js +24 -0
  228. package/dist/utils/Validate/additional/conditionallyRequired.test.js +73 -0
  229. package/dist/utils/Validate/additional/index.js +13 -4
  230. package/dist/utils/Validate/additional/mustBeAfter.js +8 -6
  231. package/dist/utils/Validate/additional/mustBeAfter.test.js +15 -1
  232. package/dist/utils/Validate/additional/mustBeBefore.js +9 -5
  233. package/dist/utils/Validate/additional/mustBeBefore.test.js +14 -0
  234. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +1 -1
  235. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +6 -3
  236. package/dist/utils/Validate/additional/mustBeGreaterThan.js +22 -0
  237. package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +56 -0
  238. package/dist/utils/Validate/additional/mustBeInTheFuture.js +1 -1
  239. package/dist/utils/Validate/additional/mustBeInThePast.js +5 -5
  240. package/dist/utils/Validate/additional/mustBeLessThan.js +7 -6
  241. package/dist/utils/Validate/additional/mustBeLessThan.test.js +11 -1
  242. package/dist/utils/Validate/additional/mustBeNumbersOnly.js +9 -5
  243. package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +10 -2
  244. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +1 -0
  245. package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +4 -1
  246. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +19 -0
  247. package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +36 -0
  248. package/dist/utils/Validate/additional/mustSelectOnlyOne.js +29 -0
  249. package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +52 -0
  250. package/dist/utils/Validate/additional/utils.js +18 -18
  251. package/dist/utils/Validate/index.js +6 -0
  252. package/dist/utils/Validate/validateCollection.js +20 -5
  253. package/dist/utils/Validate/validateCollection.test.js +125 -0
  254. package/dist/utils/Validate/validateComponent.js +36 -20
  255. package/dist/utils/Validate/validateComponent.test.js +365 -0
  256. package/dist/utils/Validate/validateContainer.js +9 -3
  257. package/dist/utils/Validate/validateContainer.test.js +75 -0
  258. package/dist/utils/Validate/validateDate.js +4 -3
  259. package/dist/utils/Validate/validateDate.test.js +114 -0
  260. package/dist/utils/Validate/validateEmail.js +14 -1
  261. package/dist/utils/Validate/validateEmail.test.js +74 -0
  262. package/dist/utils/Validate/validateMultifile.js +32 -0
  263. package/dist/utils/Validate/validateMultifile.test.js +47 -0
  264. package/dist/utils/Validate/validatePage.js +12 -6
  265. package/dist/utils/Validate/validatePage.test.js +472 -0
  266. package/dist/utils/Validate/validateRegex.js +2 -5
  267. package/dist/utils/Validate/validateRegex.test.js +42 -0
  268. package/dist/utils/Validate/validateRequired.js +2 -4
  269. package/dist/utils/Validate/validateRequired.test.js +63 -0
  270. package/dist/utils/Validate/validateTextArea.js +37 -0
  271. package/dist/utils/Validate/validateTextArea.test.js +42 -0
  272. package/dist/utils/Validate/validateTime.js +2 -2
  273. package/dist/utils/Validate/validateTime.test.js +59 -0
  274. package/dist/utils/index.js +4 -1
  275. package/package.json +35 -50
  276. package/dist/utils/Meta/documents/setDocumentForField.js +0 -29
  277. package/dist/utils/Meta/documents/setDocumentForField.test.js +0 -49
@@ -0,0 +1,486 @@
1
+ "use strict";
2
+
3
+ var _models = require("../../models");
4
+ var _setupTests = require("../../setupTests");
5
+ var _getCYARowsForContainer = _interopRequireDefault(require("./getCYARowsForContainer"));
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
8
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
10
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
11
+ describe('utils.CheckYourAnswers.getCYARowsForContainer', function () {
12
+ var OUTER_ID = 'a';
13
+ var INNER_ID = 'b';
14
+ it('should get an appropriate row for a container with a single readonly text component', function () {
15
+ var FORM_DATA = {
16
+ container: {
17
+ a: 'Bravo'
18
+ }
19
+ };
20
+ var PAGE = {
21
+ id: 'page',
22
+ formData: FORM_DATA,
23
+ cya_link: {}
24
+ };
25
+ var COMPONENT = {
26
+ type: 'text',
27
+ readonly: true,
28
+ id: 'a',
29
+ fieldId: 'a',
30
+ label: 'Alpha'
31
+ };
32
+ var CONTAINER = {
33
+ id: 'container',
34
+ fieldId: 'container',
35
+ type: _models.ComponentTypes.CONTAINER,
36
+ components: [COMPONENT],
37
+ value: FORM_DATA.container,
38
+ formData: FORM_DATA
39
+ };
40
+ var ON_ACTION = function ON_ACTION() {};
41
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
42
+ expect(ROWS.length).toEqual(1);
43
+ ROWS.forEach(function (row, index) {
44
+ (0, _setupTests.expectObjectLike)(row, {
45
+ pageId: PAGE.id,
46
+ fieldId: CONTAINER.components[index].fieldId,
47
+ key: CONTAINER.components[index].label,
48
+ action: null,
49
+ component: COMPONENT,
50
+ value: 'Bravo'
51
+ });
52
+ });
53
+ });
54
+ it('should get appropriate rows for a container with two editable text components', function () {
55
+ var FORM_DATA = {
56
+ container: {
57
+ a: 'Alpha Charlie',
58
+ b: 'Bravo Charlie'
59
+ }
60
+ };
61
+ var PAGE = {
62
+ id: 'page',
63
+ formData: FORM_DATA,
64
+ cya_link: {}
65
+ };
66
+ var COMPONENT_A = {
67
+ type: 'text',
68
+ id: 'a',
69
+ fieldId: 'a',
70
+ label: 'Alpha'
71
+ };
72
+ var COMPONENT_B = {
73
+ type: 'text',
74
+ id: 'b',
75
+ fieldId: 'b',
76
+ label: 'Bravo'
77
+ };
78
+ var CONTAINER = {
79
+ id: 'container',
80
+ fieldId: 'container',
81
+ type: _models.ComponentTypes.CONTAINER,
82
+ components: [COMPONENT_A, COMPONENT_B],
83
+ value: FORM_DATA.container,
84
+ formData: FORM_DATA
85
+ };
86
+ var ON_ACTION = function ON_ACTION() {};
87
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
88
+ expect(ROWS.length).toEqual(2);
89
+ ROWS.forEach(function (row, index) {
90
+ (0, _setupTests.expectObjectLike)(row, {
91
+ pageId: PAGE.id,
92
+ fieldId: CONTAINER.components[index].fieldId,
93
+ key: CONTAINER.components[index].label,
94
+ component: CONTAINER.components[index],
95
+ value: "".concat(CONTAINER.components[index].label, " Charlie")
96
+ });
97
+ (0, _setupTests.expectObjectLike)(row.action, {
98
+ onAction: ON_ACTION
99
+ });
100
+ });
101
+ });
102
+ it("should filter out any components that shouldn't be shown", function () {
103
+ var FORM_DATA = {
104
+ container: {
105
+ a: 'Alpha Charlie',
106
+ b: 'Bravo Charlie'
107
+ }
108
+ };
109
+ var PAGE = {
110
+ id: 'page',
111
+ formData: FORM_DATA,
112
+ cya_link: {}
113
+ };
114
+ var COMPONENT_A = {
115
+ type: 'text',
116
+ id: 'a',
117
+ fieldId: 'a',
118
+ label: 'Alpha'
119
+ };
120
+ var COMPONENT_B = {
121
+ type: 'text',
122
+ id: 'b',
123
+ fieldId: 'b',
124
+ label: 'Bravo'
125
+ };
126
+ var COMPONENT_C = {
127
+ type: 'heading',
128
+ content: 'Heading component'
129
+ };
130
+ var CONTAINER = {
131
+ id: 'container',
132
+ fieldId: 'container',
133
+ type: _models.ComponentTypes.CONTAINER,
134
+ components: [COMPONENT_A, COMPONENT_B, COMPONENT_C],
135
+ value: FORM_DATA.container,
136
+ formData: FORM_DATA
137
+ };
138
+ var ON_ACTION = function ON_ACTION() {};
139
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
140
+ expect(ROWS.length).toEqual(2);
141
+ ROWS.forEach(function (row, index) {
142
+ (0, _setupTests.expectObjectLike)(row, {
143
+ pageId: PAGE.id,
144
+ fieldId: CONTAINER.components[index].fieldId,
145
+ key: CONTAINER.components[index].label,
146
+ component: CONTAINER.components[index],
147
+ value: "".concat(CONTAINER.components[index].label, " Charlie")
148
+ });
149
+ (0, _setupTests.expectObjectLike)(row.action, {
150
+ onAction: ON_ACTION
151
+ });
152
+ });
153
+ });
154
+ it('should get an appropriate row for a container with a single readonly text component inside a nested container', function () {
155
+ var FORM_DATA = {
156
+ container: {
157
+ nested: {
158
+ a: 'Bravo'
159
+ }
160
+ }
161
+ };
162
+ var PAGE = {
163
+ id: 'page',
164
+ formData: FORM_DATA,
165
+ cya_link: {}
166
+ };
167
+ var COMPONENT = {
168
+ type: 'text',
169
+ readonly: true,
170
+ id: 'a',
171
+ fieldId: 'a',
172
+ label: 'Alpha'
173
+ };
174
+ var NESTED_CONTAINER = {
175
+ id: 'nested',
176
+ fieldId: 'nested',
177
+ type: _models.ComponentTypes.CONTAINER,
178
+ components: [COMPONENT],
179
+ value: FORM_DATA.container.nested,
180
+ formData: FORM_DATA
181
+ };
182
+ var CONTAINER = {
183
+ id: 'container',
184
+ fieldId: 'container',
185
+ type: _models.ComponentTypes.CONTAINER,
186
+ components: [NESTED_CONTAINER],
187
+ value: FORM_DATA.container,
188
+ formData: FORM_DATA
189
+ };
190
+ var ON_ACTION = function ON_ACTION() {};
191
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
192
+ expect(ROWS.length).toEqual(1);
193
+ ROWS.forEach(function (row, index) {
194
+ (0, _setupTests.expectObjectLike)(row, {
195
+ pageId: PAGE.id,
196
+ fieldId: NESTED_CONTAINER.components[index].fieldId,
197
+ key: NESTED_CONTAINER.components[index].label,
198
+ action: null,
199
+ component: COMPONENT,
200
+ value: 'Bravo'
201
+ });
202
+ });
203
+ });
204
+ it('should get an appropriate row for a container with a single readonly text component inside a nested container but no formData', function () {
205
+ var FORM_DATA = undefined;
206
+ var PAGE = {
207
+ id: 'page',
208
+ formData: FORM_DATA,
209
+ cya_link: {}
210
+ };
211
+ var COMPONENT = {
212
+ type: 'text',
213
+ readonly: true,
214
+ id: 'a',
215
+ fieldId: 'a',
216
+ label: 'Alpha'
217
+ };
218
+ var NESTED_CONTAINER = {
219
+ id: 'nested',
220
+ fieldId: 'nested',
221
+ type: _models.ComponentTypes.CONTAINER,
222
+ components: [COMPONENT]
223
+ };
224
+ var CONTAINER = {
225
+ id: 'container',
226
+ fieldId: 'container',
227
+ type: _models.ComponentTypes.CONTAINER,
228
+ components: [NESTED_CONTAINER]
229
+ };
230
+ var ON_ACTION = function ON_ACTION() {};
231
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, undefined, ON_ACTION);
232
+ expect(ROWS.length).toEqual(1);
233
+ ROWS.forEach(function (row, index) {
234
+ (0, _setupTests.expectObjectLike)(row, {
235
+ pageId: PAGE.id,
236
+ fieldId: NESTED_CONTAINER.components[index].fieldId,
237
+ key: NESTED_CONTAINER.components[index].label,
238
+ action: null,
239
+ component: COMPONENT,
240
+ value: ''
241
+ });
242
+ });
243
+ });
244
+ it('should get an appropriate row for a collection with a single text component inside a container', function () {
245
+ var FORM_DATA = _defineProperty({}, OUTER_ID, [_defineProperty({}, INNER_ID, 'Bravo'), _defineProperty({}, INNER_ID, 'Charlie')]);
246
+ var PAGE = {
247
+ id: 'page',
248
+ formData: FORM_DATA,
249
+ cya_link: {},
250
+ collection: 'collectionName'
251
+ };
252
+ var COLLECTION_COMPONENT = {
253
+ type: 'collection',
254
+ id: OUTER_ID,
255
+ fieldId: OUTER_ID,
256
+ label: 'Alpha',
257
+ item: [{
258
+ id: INNER_ID,
259
+ fieldId: INNER_ID,
260
+ label: INNER_ID,
261
+ type: 'text'
262
+ }]
263
+ };
264
+ var CONTAINER = {
265
+ id: 'container',
266
+ fieldId: 'container',
267
+ type: _models.ComponentTypes.CONTAINER,
268
+ components: [COLLECTION_COMPONENT],
269
+ value: FORM_DATA.container,
270
+ formData: FORM_DATA
271
+ };
272
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA, function () {});
273
+ expect(ROWS.length).toEqual(4);
274
+ var checkTitleRow = function checkTitleRow(index, row) {
275
+ expect(row).toEqual({
276
+ pageId: PAGE.id,
277
+ fieldId: CONTAINER.components[0].fieldId,
278
+ key: "Item ".concat(index + 1),
279
+ action: null,
280
+ full_path: "".concat(OUTER_ID, "[").concat(index, "]"),
281
+ type: 'title'
282
+ });
283
+ };
284
+ var checkValueRow = function checkValueRow(index, row, value) {
285
+ (0, _setupTests.expectObjectLike)(row, {
286
+ pageId: PAGE.id,
287
+ fieldId: INNER_ID,
288
+ key: INNER_ID,
289
+ id: INNER_ID,
290
+ component: {
291
+ fieldId: INNER_ID,
292
+ full_path: "".concat(OUTER_ID, "[").concat(index, "].").concat(INNER_ID),
293
+ id: INNER_ID,
294
+ label: INNER_ID,
295
+ type: 'text'
296
+ },
297
+ value: value,
298
+ full_path: "".concat(OUTER_ID, "[").concat(index, "].").concat(INNER_ID)
299
+ });
300
+ };
301
+ checkTitleRow(0, ROWS[0]);
302
+ checkValueRow(0, ROWS[1], 'Bravo');
303
+ checkTitleRow(1, ROWS[2]);
304
+ checkValueRow(1, ROWS[3], 'Charlie');
305
+ });
306
+ it('should conditionally show an appropriate row for a single text component inside a container belonging to a partial-collection', function () {
307
+ var FORM_DATA = {
308
+ collectionName: [{
309
+ container: _defineProperty({}, INNER_ID, 'Bravo'),
310
+ other_data: true
311
+ }, {
312
+ container: _defineProperty({}, INNER_ID, 'Charlie'),
313
+ other_data: false
314
+ }]
315
+ };
316
+ var PAGE = {
317
+ id: 'page',
318
+ formData: FORM_DATA,
319
+ cya_link: {},
320
+ collection: 'collectionName'
321
+ };
322
+ var CONTAINER = {
323
+ id: 'container',
324
+ fieldId: 'container',
325
+ type: _models.ComponentTypes.CONTAINER,
326
+ components: [{
327
+ id: INNER_ID,
328
+ fieldId: INNER_ID,
329
+ label: INNER_ID,
330
+ type: 'text'
331
+ }],
332
+ formData: FORM_DATA,
333
+ show_when: {
334
+ field: 'other_data',
335
+ op: '=',
336
+ value: true
337
+ }
338
+ };
339
+ expect((0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.collectionName[0], function () {}).length).toEqual(1);
340
+ expect((0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.collectionName[1], function () {})).toBeFalsy();
341
+ });
342
+ it('should get the appropriate number for rows components with nested components inside a container', function () {
343
+ var FORM_DATA = {
344
+ container: {
345
+ a: 'B',
346
+ nested: 'Bravo'
347
+ }
348
+ };
349
+ var PAGE = {
350
+ id: 'page',
351
+ formData: FORM_DATA,
352
+ cya_link: {}
353
+ };
354
+ var NESTED_COMPONENT = {
355
+ id: 'nested',
356
+ fieldId: 'nested',
357
+ type: _models.ComponentTypes.TEXT
358
+ };
359
+ var COMPONENT = {
360
+ type: 'radios',
361
+ id: 'a',
362
+ fieldId: 'a',
363
+ label: 'Alpha',
364
+ data: {
365
+ options: [{
366
+ value: 'B',
367
+ label: 'B',
368
+ nested: [NESTED_COMPONENT]
369
+ }, {
370
+ value: 'A',
371
+ label: 'A'
372
+ }]
373
+ }
374
+ };
375
+ var CONTAINER = {
376
+ id: 'container',
377
+ fieldId: 'container',
378
+ type: _models.ComponentTypes.CONTAINER,
379
+ components: [COMPONENT],
380
+ value: FORM_DATA.container,
381
+ formData: FORM_DATA
382
+ };
383
+ var ON_ACTION = function ON_ACTION() {};
384
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION);
385
+ expect(ROWS.length).toEqual(2);
386
+ });
387
+ it('should ignore the result of the override function if it returns nullish', function () {
388
+ var FORM_DATA = {
389
+ container: {
390
+ a: 'Alpha Charlie',
391
+ b: 'Bravo Charlie'
392
+ }
393
+ };
394
+ var PAGE = {
395
+ id: 'page',
396
+ formData: FORM_DATA,
397
+ cya_link: {}
398
+ };
399
+ var COMPONENT_A = {
400
+ type: 'text',
401
+ id: 'a',
402
+ fieldId: 'a',
403
+ label: 'Alpha'
404
+ };
405
+ var COMPONENT_B = {
406
+ type: 'text',
407
+ id: 'b',
408
+ fieldId: 'b',
409
+ label: 'Bravo'
410
+ };
411
+ var CONTAINER = {
412
+ id: 'container',
413
+ fieldId: 'container',
414
+ type: _models.ComponentTypes.CONTAINER,
415
+ components: [COMPONENT_A, COMPONENT_B],
416
+ value: FORM_DATA.container,
417
+ formData: FORM_DATA
418
+ };
419
+ var ON_ACTION = function ON_ACTION() {};
420
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION, function () {
421
+ return null;
422
+ });
423
+ expect(ROWS.length).toEqual(2);
424
+ ROWS.forEach(function (row, index) {
425
+ (0, _setupTests.expectObjectLike)(row, {
426
+ pageId: PAGE.id,
427
+ fieldId: CONTAINER.components[index].fieldId,
428
+ key: CONTAINER.components[index].label,
429
+ component: CONTAINER.components[index],
430
+ value: "".concat(CONTAINER.components[index].label, " Charlie")
431
+ });
432
+ (0, _setupTests.expectObjectLike)(row.action, {
433
+ onAction: ON_ACTION
434
+ });
435
+ });
436
+ });
437
+ it('should use rows produced by the override function if provided', function () {
438
+ var FORM_DATA = {
439
+ container: {
440
+ a: 'Alpha Charlie',
441
+ b: 'Bravo Charlie'
442
+ }
443
+ };
444
+ var PAGE = {
445
+ id: 'page',
446
+ formData: FORM_DATA,
447
+ cya_link: {}
448
+ };
449
+ var COMPONENT_A = {
450
+ type: 'text',
451
+ id: 'a',
452
+ fieldId: 'a',
453
+ label: 'Alpha'
454
+ };
455
+ var COMPONENT_B = {
456
+ type: 'text',
457
+ id: 'b',
458
+ fieldId: 'b',
459
+ label: 'Bravo'
460
+ };
461
+ var CONTAINER = {
462
+ id: 'container',
463
+ fieldId: 'container',
464
+ type: _models.ComponentTypes.CONTAINER,
465
+ components: [COMPONENT_A, COMPONENT_B],
466
+ value: FORM_DATA.container,
467
+ formData: FORM_DATA
468
+ };
469
+ var ON_ACTION = function ON_ACTION() {};
470
+ // eslint-disable-next-line arrow-body-style
471
+ var OVERRIDE = function OVERRIDE(page, comp) {
472
+ // This will be called for each component in the container,
473
+ // returning a custom row object.
474
+ return {
475
+ key: "CustomRowFor".concat(comp.label)
476
+ };
477
+ };
478
+ var ROWS = (0, _getCYARowsForContainer.default)(PAGE, CONTAINER, FORM_DATA.container, ON_ACTION, OVERRIDE);
479
+ expect(ROWS.length).toEqual(2);
480
+ expect(ROWS).toEqual([{
481
+ key: 'CustomRowForAlpha'
482
+ }, {
483
+ key: 'CustomRowForBravo'
484
+ }]);
485
+ });
486
+ });
@@ -21,24 +21,32 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
21
21
  *
22
22
  * @param {object} page The page to show components for.
23
23
  * @param {Function} onAction A function to invoke if the change link on any row is clicked.
24
+ * @param {Function} fnOverride An optional override for getting the CYA rows for each component.
24
25
  *
25
26
  * @returns An array of configuration objects for Check your answers rows.
26
27
  */
27
28
  var getCYARowsForPage = function getCYARowsForPage(page, onAction) {
29
+ var fnOverride = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
28
30
  if (_FormPage.default.showCYA(page, page.formData)) {
29
31
  var _page$groups;
30
32
  if (page.collection) {
31
- return (0, _getCYARowsForCollectionPage.default)(page, onAction);
33
+ return (0, _getCYARowsForCollectionPage.default)(page, onAction, fnOverride);
32
34
  }
33
35
  var allComponents = (0, _elevateNestedComponents.default)(page.components, page.formData);
34
36
  var rows = allComponents.filter(function (c) {
35
37
  return (0, _showComponentCYA.default)(c, page.formData);
36
38
  }).flatMap(function (component) {
39
+ if (typeof fnOverride === 'function') {
40
+ var overrideRows = fnOverride(page, component, onAction);
41
+ if (overrideRows) {
42
+ return overrideRows;
43
+ }
44
+ }
37
45
  switch (component.type) {
38
46
  case _models.ComponentTypes.CONTAINER:
39
- return (0, _getCYARowsForContainer.default)(page, component, page.formData[component.fieldId], onAction);
47
+ return (0, _getCYARowsForContainer.default)(page, component, page.formData[component.fieldId], onAction, fnOverride);
40
48
  case _models.ComponentTypes.COLLECTION:
41
- return (0, _getCYARowsForCollection.default)(page, component, page.formData[component.fieldId], onAction);
49
+ return (0, _getCYARowsForCollection.default)(page, component, page.formData[component.fieldId], onAction, fnOverride);
42
50
  default:
43
51
  return (0, _getCYARow.default)(page, component, onAction);
44
52
  }