@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,346 @@
1
+ "use strict";
2
+
3
+ var _setupTests = require("../../setupTests");
4
+ var _models = require("../../models");
5
+ var _getCYARowsForPage = _interopRequireDefault(require("./getCYARowsForPage"));
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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
9
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
10
+ 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; }
11
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
12
+ 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); }
13
+ describe('utils', function () {
14
+ describe('CheckYourAnswers', function () {
15
+ describe('getCYARowsForPage', function () {
16
+ it('should get a appropriate row for a page with a single readonly text component', function () {
17
+ var COMPONENT = {
18
+ type: 'text',
19
+ readonly: true,
20
+ id: 'a',
21
+ fieldId: 'a',
22
+ label: 'Alpha'
23
+ };
24
+ var PAGE = {
25
+ id: 'page',
26
+ components: [COMPONENT],
27
+ formData: {
28
+ a: 'Bravo'
29
+ }
30
+ };
31
+ var ON_ACTION = function ON_ACTION() {};
32
+ var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION);
33
+ expect(ROWS.length).toEqual(1);
34
+ ROWS.forEach(function (row, index) {
35
+ (0, _setupTests.expectObjectLike)(row, {
36
+ pageId: PAGE.id,
37
+ fieldId: PAGE.components[index].fieldId,
38
+ key: PAGE.components[index].label,
39
+ action: null,
40
+ component: COMPONENT,
41
+ value: 'Bravo'
42
+ });
43
+ });
44
+ });
45
+ it('should get appropriate rows for a page with two editable text components', function () {
46
+ var COMPONENT_A = {
47
+ type: 'text',
48
+ id: 'a',
49
+ fieldId: 'a',
50
+ label: 'Alpha'
51
+ };
52
+ var COMPONENT_B = {
53
+ type: 'text',
54
+ id: 'b',
55
+ fieldId: 'b',
56
+ label: 'Bravo'
57
+ };
58
+ var PAGE = {
59
+ id: 'page',
60
+ components: [COMPONENT_A, COMPONENT_B],
61
+ formData: {
62
+ a: 'Alpha Charlie',
63
+ b: 'Bravo Charlie'
64
+ },
65
+ cya_link: {}
66
+ };
67
+ var ON_ACTION = function ON_ACTION() {};
68
+ var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION);
69
+ expect(ROWS.length).toEqual(2);
70
+ ROWS.forEach(function (row, index) {
71
+ (0, _setupTests.expectObjectLike)(row, {
72
+ pageId: PAGE.id,
73
+ fieldId: PAGE.components[index].fieldId,
74
+ key: PAGE.components[index].label,
75
+ component: PAGE.components[index],
76
+ value: "".concat(PAGE.components[index].label, " Charlie")
77
+ });
78
+ (0, _setupTests.expectObjectLike)(row.action, {
79
+ onAction: ON_ACTION
80
+ });
81
+ });
82
+ });
83
+ it("should filter out any components that shouldn't be shown", function () {
84
+ var COMPONENT_A = {
85
+ type: 'text',
86
+ id: 'a',
87
+ fieldId: 'a',
88
+ label: 'Alpha'
89
+ };
90
+ var COMPONENT_B = {
91
+ type: 'text',
92
+ id: 'b',
93
+ fieldId: 'b',
94
+ label: 'Bravo'
95
+ };
96
+ var COMPONENT_C = {
97
+ type: 'heading',
98
+ content: 'Heading component'
99
+ };
100
+ var PAGE = {
101
+ id: 'page',
102
+ components: [COMPONENT_A, COMPONENT_B, COMPONENT_C],
103
+ formData: {
104
+ a: 'Alpha Charlie',
105
+ b: 'Bravo Charlie'
106
+ },
107
+ cya_link: {}
108
+ };
109
+ var ON_ACTION = function ON_ACTION() {};
110
+ var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION);
111
+ expect(ROWS.length).toEqual(2);
112
+ ROWS.forEach(function (row, index) {
113
+ (0, _setupTests.expectObjectLike)(row, {
114
+ pageId: PAGE.id,
115
+ fieldId: PAGE.components[index].fieldId,
116
+ key: PAGE.components[index].label,
117
+ component: PAGE.components[index],
118
+ value: "".concat(PAGE.components[index].label, " Charlie")
119
+ });
120
+ (0, _setupTests.expectObjectLike)(row.action, {
121
+ onAction: ON_ACTION
122
+ });
123
+ });
124
+ });
125
+ it('should get a appropriate row for a page with a single readonly text component inside of a container', function () {
126
+ var FORM_DATA = {
127
+ container: {
128
+ a: 'Bravo'
129
+ }
130
+ };
131
+ var COMPONENT = {
132
+ type: 'text',
133
+ readonly: true,
134
+ id: 'a',
135
+ fieldId: 'a',
136
+ label: 'Alpha'
137
+ };
138
+ var CONTAINER = {
139
+ id: 'container',
140
+ fieldId: 'container',
141
+ type: _models.ComponentTypes.CONTAINER,
142
+ components: [COMPONENT],
143
+ value: FORM_DATA.container,
144
+ formData: FORM_DATA
145
+ };
146
+ var PAGE = {
147
+ id: 'page',
148
+ components: [CONTAINER],
149
+ formData: FORM_DATA
150
+ };
151
+ var ON_ACTION = function ON_ACTION() {};
152
+ var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION);
153
+ expect(ROWS.length).toEqual(1);
154
+ ROWS.forEach(function (row, index) {
155
+ (0, _setupTests.expectObjectLike)(row, {
156
+ pageId: PAGE.id,
157
+ fieldId: CONTAINER.components[index].fieldId,
158
+ key: CONTAINER.components[index].label,
159
+ action: null,
160
+ component: COMPONENT,
161
+ value: 'Bravo'
162
+ });
163
+ });
164
+ });
165
+ it('Add ability to display answers from multiple fields in a single row', function () {
166
+ var COMPONENT_ADDRESS = {
167
+ id: 'firstLineOfTheAddress',
168
+ fieldId: 'firstLineOfTheAddress',
169
+ label: 'address',
170
+ type: 'text'
171
+ };
172
+ var COMPONENT_TOWN = {
173
+ id: 'town',
174
+ fieldId: 'town',
175
+ label: 'Town',
176
+ type: 'text'
177
+ };
178
+ var COMPONENT_CITY = {
179
+ id: 'city',
180
+ fieldId: 'city',
181
+ label: 'City',
182
+ type: 'text'
183
+ };
184
+ var COMPONENT_POSTCODE = {
185
+ id: 'postCode',
186
+ fieldId: 'postCode',
187
+ label: 'postCode',
188
+ type: 'text'
189
+ };
190
+ var PAGE = {
191
+ components: [COMPONENT_ADDRESS, COMPONENT_TOWN, COMPONENT_CITY, COMPONENT_POSTCODE],
192
+ id: 'addressDetails',
193
+ fieldId: 'UK address',
194
+ groups: [{
195
+ id: 'address',
196
+ label: 'Address details',
197
+ components: ['firstLineOfTheAddress', 'town', 'city', 'postCode']
198
+ }],
199
+ name: 'address-details',
200
+ title: 'Address details',
201
+ formData: {
202
+ firstLineOfTheAddress: '10 Downing Street',
203
+ town: 'City of Westminster',
204
+ city: 'London',
205
+ postCode: 'SW1A 2AA'
206
+ }
207
+ };
208
+ var ON_ACTION = function ON_ACTION() {};
209
+ // rows do not have defined keys which means cannot pass them to render as an array,
210
+ // so just pass the single row instead of array containing single row
211
+ var cyaRow = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION).map(function (row) {
212
+ return row.value;
213
+ });
214
+ expect(cyaRow.length).toEqual(1);
215
+ var _renderWithValidation = (0, _setupTests.renderWithValidation)(cyaRow[0]),
216
+ container = _renderWithValidation.container;
217
+ expect(container.childNodes.length).toEqual(4);
218
+ var addressValues = container.childNodes;
219
+ expect(addressValues[0].childNodes[0].textContent).toEqual('10 Downing Street');
220
+ expect(addressValues[1].childNodes[0].textContent).toEqual('City of Westminster');
221
+ expect(addressValues[2].childNodes[0].textContent).toEqual('London');
222
+ expect(addressValues[3].childNodes[0].textContent).toEqual('SW1A 2AA');
223
+ });
224
+ it('should get appropriate rows for a page with a single readonly text component within a collection', function () {
225
+ var FORM_DATA = {
226
+ collection: [{
227
+ a: 'Bravo'
228
+ }]
229
+ };
230
+ var COMPONENT = {
231
+ type: 'text',
232
+ readonly: true,
233
+ id: 'a',
234
+ fieldId: 'a',
235
+ label: 'Alpha'
236
+ };
237
+ var COLLECTION = {
238
+ id: 'collection',
239
+ fieldId: 'collection',
240
+ type: _models.ComponentTypes.COLLECTION,
241
+ item: [COMPONENT],
242
+ value: FORM_DATA.collection,
243
+ formData: FORM_DATA
244
+ };
245
+ var PAGE = {
246
+ id: 'page',
247
+ components: [COLLECTION],
248
+ formData: FORM_DATA
249
+ };
250
+ var ON_ACTION = function ON_ACTION() {};
251
+ var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION);
252
+ expect(ROWS.length).toEqual(2); // Title and item row
253
+ (0, _setupTests.expectObjectLike)(ROWS[1], {
254
+ pageId: PAGE.id,
255
+ fieldId: COMPONENT.fieldId,
256
+ full_path: "".concat(COLLECTION.fieldId, "[0].").concat(COMPONENT.fieldId),
257
+ key: COMPONENT.label,
258
+ action: null,
259
+ component: _objectSpread(_objectSpread({}, COMPONENT), {}, {
260
+ full_path: "".concat(COLLECTION.fieldId, "[0].").concat(COMPONENT.fieldId)
261
+ }),
262
+ value: 'Bravo'
263
+ });
264
+ });
265
+ it('should ignore the result of the override function if it returns nullish', function () {
266
+ var COMPONENT_A = {
267
+ type: 'text',
268
+ id: 'a',
269
+ fieldId: 'a',
270
+ label: 'Alpha'
271
+ };
272
+ var COMPONENT_B = {
273
+ type: 'text',
274
+ id: 'b',
275
+ fieldId: 'b',
276
+ label: 'Bravo'
277
+ };
278
+ var PAGE = {
279
+ id: 'page',
280
+ components: [COMPONENT_A, COMPONENT_B],
281
+ formData: {
282
+ a: 'Alpha Charlie',
283
+ b: 'Bravo Charlie'
284
+ },
285
+ cya_link: {}
286
+ };
287
+ var ON_ACTION = function ON_ACTION() {};
288
+ var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION, function () {
289
+ return null;
290
+ });
291
+ expect(ROWS.length).toEqual(2);
292
+ ROWS.forEach(function (row, index) {
293
+ (0, _setupTests.expectObjectLike)(row, {
294
+ pageId: PAGE.id,
295
+ fieldId: PAGE.components[index].fieldId,
296
+ key: PAGE.components[index].label,
297
+ component: PAGE.components[index],
298
+ value: "".concat(PAGE.components[index].label, " Charlie")
299
+ });
300
+ (0, _setupTests.expectObjectLike)(row.action, {
301
+ onAction: ON_ACTION
302
+ });
303
+ });
304
+ });
305
+ it('should use rows produced by the override function if provided', function () {
306
+ var COMPONENT_A = {
307
+ type: 'text',
308
+ id: 'a',
309
+ fieldId: 'a',
310
+ label: 'Alpha'
311
+ };
312
+ var COMPONENT_B = {
313
+ type: 'text',
314
+ id: 'b',
315
+ fieldId: 'b',
316
+ label: 'Bravo'
317
+ };
318
+ var PAGE = {
319
+ id: 'page',
320
+ components: [COMPONENT_A, COMPONENT_B],
321
+ formData: {
322
+ a: 'Alpha Charlie',
323
+ b: 'Bravo Charlie'
324
+ },
325
+ cya_link: {}
326
+ };
327
+ var ON_ACTION = function ON_ACTION() {};
328
+ // eslint-disable-next-line arrow-body-style
329
+ var OVERRIDE = function OVERRIDE(page, comp) {
330
+ // This will be called for each component on the page,
331
+ // returning a custom row object.
332
+ return {
333
+ key: "CustomRowFor".concat(comp.label)
334
+ };
335
+ };
336
+ var ROWS = (0, _getCYARowsForPage.default)(PAGE, ON_ACTION, OVERRIDE);
337
+ expect(ROWS.length).toEqual(2);
338
+ expect(ROWS).toEqual([{
339
+ key: 'CustomRowForAlpha'
340
+ }, {
341
+ key: 'CustomRowForBravo'
342
+ }]);
343
+ });
344
+ });
345
+ });
346
+ });
@@ -3,14 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.default = exports.EXCLUDE_FROM_CYA = void 0;
7
7
  var _models = require("../../models");
8
8
  var _Component = _interopRequireDefault(require("../Component"));
9
9
  var _Container = _interopRequireDefault(require("../Container"));
10
+ var _getSourceData = _interopRequireDefault(require("../Data/getSourceData"));
10
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ /* eslint-disable no-console */
11
13
  // Local imports
12
14
 
13
- var EXCLUDE_FROM_CYA = [_models.ComponentTypes.HEADING, _models.ComponentTypes.HTML, _models.ComponentTypes.INSET_TEXT];
15
+ var EXCLUDE_FROM_CYA = [_models.ComponentTypes.ALERT, _models.ComponentTypes.HEADING, _models.ComponentTypes.HTML, _models.ComponentTypes.INSET_TEXT];
14
16
 
15
17
  /**
16
18
  * Determines whether a given component should display on the Check your answers screen.
@@ -20,6 +22,7 @@ var EXCLUDE_FROM_CYA = [_models.ComponentTypes.HEADING, _models.ComponentTypes.H
20
22
  *
21
23
  * @returns A boolean true if the component should show; otherwise false.
22
24
  */
25
+ exports.EXCLUDE_FROM_CYA = EXCLUDE_FROM_CYA;
23
26
  var showComponentCYA = function showComponentCYA(options, data) {
24
27
  if (!options) {
25
28
  return false;
@@ -27,9 +30,22 @@ var showComponentCYA = function showComponentCYA(options, data) {
27
30
  if (EXCLUDE_FROM_CYA.includes(options.type)) {
28
31
  return false;
29
32
  }
30
- if (options.hasOwnProperty('show_on_cya') && !options.show_on_cya) {
33
+ if (Object.prototype.hasOwnProperty.call(options, 'show_on_cya') && !options.show_on_cya) {
31
34
  return false;
32
35
  }
36
+ if (options.hideOnCyaWhenEmpty) {
37
+ if (options.type === _models.ComponentTypes.COLLECTION) {
38
+ var itemCollectionsData = (0, _getSourceData.default)(data, options.full_path);
39
+ if (!(itemCollectionsData !== null && itemCollectionsData !== void 0 && itemCollectionsData.length)) {
40
+ return false;
41
+ }
42
+ } else {
43
+ var value = (0, _getSourceData.default)(data, options.fieldId);
44
+ if (!value && value !== false && value !== 0) {
45
+ return false;
46
+ }
47
+ }
48
+ }
33
49
  if (options.type === _models.ComponentTypes.CONTAINER) {
34
50
  return _Container.default.show(options, data);
35
51
  }
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ var _models = require("../../models");
4
+ var _showComponentCYA = _interopRequireDefault(require("./showComponentCYA"));
5
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
+ // Local imports
7
+
8
+ describe('utils', function () {
9
+ describe('CheckYourAnswers', function () {
10
+ describe('showComponentCYA', function () {
11
+ it('should not show when there are no options', function () {
12
+ expect((0, _showComponentCYA.default)(null, null)).toBeFalsy();
13
+ });
14
+ it('should not show when show_on_cya is defined and falsy', function () {
15
+ expect((0, _showComponentCYA.default)({
16
+ show_on_cya: false
17
+ })).toBeFalsy();
18
+ });
19
+ it('should not show when it is a heading type', function () {
20
+ expect((0, _showComponentCYA.default)({
21
+ type: _models.ComponentTypes.HEADING
22
+ }, null)).toBeFalsy();
23
+ });
24
+ it('should not show when it is an html type', function () {
25
+ expect((0, _showComponentCYA.default)({
26
+ type: _models.ComponentTypes.HTML
27
+ }, null)).toBeFalsy();
28
+ });
29
+ it('should not show when it is an inset-text type', function () {
30
+ expect((0, _showComponentCYA.default)({
31
+ type: _models.ComponentTypes.INSET_TEXT
32
+ }, null)).toBeFalsy();
33
+ });
34
+ it('should not show when it hidden and disabled', function () {
35
+ expect((0, _showComponentCYA.default)({
36
+ hidden: true,
37
+ disabled: true
38
+ }, null)).toBeFalsy();
39
+ });
40
+ it('should show when show_on_cya is defined and truthy', function () {
41
+ expect((0, _showComponentCYA.default)({
42
+ show_on_cya: true
43
+ })).toBeTruthy();
44
+ });
45
+ it('should show when it hidden but not disabled', function () {
46
+ expect((0, _showComponentCYA.default)({
47
+ hidden: true
48
+ }, null)).toBeTruthy();
49
+ });
50
+ it('should show when it disabled but not hidden', function () {
51
+ expect((0, _showComponentCYA.default)({
52
+ disabled: true
53
+ }, null)).toBeTruthy();
54
+ });
55
+ it('should show when it not html, inset-text, a heading, hidden, or disabled', function () {
56
+ expect((0, _showComponentCYA.default)({
57
+ type: _models.ComponentTypes.TEXT
58
+ }, null)).toBeTruthy();
59
+ });
60
+ it('should show when hideOnCyaWhenEmpty is defined and falsy', function () {
61
+ expect((0, _showComponentCYA.default)({
62
+ hideOnCyaWhenEmpty: false
63
+ })).toBeTruthy();
64
+ });
65
+ it('should show collection when hideOnCyaWhenEmpty is not defined', function () {
66
+ expect((0, _showComponentCYA.default)({
67
+ type: _models.ComponentTypes.COLLECTION
68
+ })).toBeTruthy();
69
+ });
70
+ it('should not show when it\'s a collection and hideOnCyaWhenEmpty is truthy', function () {
71
+ expect((0, _showComponentCYA.default)({
72
+ hideOnCyaWhenEmpty: true,
73
+ type: _models.ComponentTypes.COLLECTION
74
+ })).toBeFalsy();
75
+ });
76
+ it('should not show when it\'s not a collection and hideOnCyaWhenEmpty is truthy', function () {
77
+ expect((0, _showComponentCYA.default)({
78
+ hideOnCyaWhenEmpty: true,
79
+ type: _models.ComponentTypes.TEXT
80
+ })).toBeFalsy();
81
+ });
82
+ it('should show when length of full_path data is 1 or more', function () {
83
+ expect((0, _showComponentCYA.default)({
84
+ hideOnCyaWhenEmpty: true,
85
+ type: _models.ComponentTypes.COLLECTION,
86
+ full_path: "example"
87
+ }, {
88
+ example: [0, 1]
89
+ })).toBeTruthy();
90
+ });
91
+ it('should not show when length of full_path data is less than 1', function () {
92
+ expect((0, _showComponentCYA.default)({
93
+ hideOnCyaWhenEmpty: true,
94
+ type: _models.ComponentTypes.COLLECTION,
95
+ full_path: "example"
96
+ }, {
97
+ example: []
98
+ })).toBeFalsy();
99
+ });
100
+ it('should show when value of component data does exist and hideOnCyaWhenEmpty is truthy', function () {
101
+ expect((0, _showComponentCYA.default)({
102
+ hideOnCyaWhenEmpty: true,
103
+ type: _models.ComponentTypes.TEXT,
104
+ fieldId: "example"
105
+ }, {
106
+ example: "yes"
107
+ })).toBeTruthy();
108
+ });
109
+ it('should not show when value of component data does not exist and hideOnCyaWhenEmpty is truthy', function () {
110
+ expect((0, _showComponentCYA.default)({
111
+ hideOnCyaWhenEmpty: true,
112
+ type: _models.ComponentTypes.TEXT,
113
+ fieldId: "example"
114
+ }, {})).toBeFalsy();
115
+ });
116
+ it('should show when value of component data does not exist and hideOnCyaWhenEmpty is falsy', function () {
117
+ expect((0, _showComponentCYA.default)({
118
+ hideOnCyaWhenEmpty: false,
119
+ type: _models.ComponentTypes.TEXT,
120
+ fieldId: "example"
121
+ }, {})).toBeTruthy();
122
+ });
123
+ it('should show when value of component data does is falsy and hideOnCyaWhenEmpty is truthy', function () {
124
+ expect((0, _showComponentCYA.default)({
125
+ hideOnCyaWhenEmpty: true,
126
+ type: _models.ComponentTypes.TEXT,
127
+ fieldId: "example"
128
+ }, {
129
+ example: false
130
+ })).toBeTruthy();
131
+ });
132
+ it('should show when value of component data is numerically zero and hideOnCyaWhenEmpty is truthy', function () {
133
+ expect((0, _showComponentCYA.default)({
134
+ hideOnCyaWhenEmpty: true,
135
+ type: _models.ComponentTypes.TEXT,
136
+ fieldId: "example"
137
+ }, {
138
+ example: 0
139
+ })).toBeTruthy();
140
+ });
141
+ });
142
+ });
143
+ });
@@ -6,9 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _getCollectionPageActiveIndex = _interopRequireDefault(require("./getCollectionPageActiveIndex"));
8
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ 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); }
9
10
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
11
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
11
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ 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; }
13
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
14
+ 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); }
12
15
  /**
13
16
  * Duplicates the currently active entry in a named collection's data.
14
17
  * Once duplicated, the new entry is set as the active entry.
@@ -27,6 +30,7 @@ var duplicateCollectionPageActiveEntry = function duplicateCollectionPageActiveE
27
30
  id: Date.now().toString()
28
31
  });
29
32
  formData[collectionName].push(newEntry);
33
+ // eslint-disable-next-line no-param-reassign
30
34
  formData["".concat(collectionName, "ActiveId")] = newEntry.id;
31
35
  return true;
32
36
  };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ var _duplicateCollectionPageActiveEntry = _interopRequireDefault(require("./duplicateCollectionPageActiveEntry"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ 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); }
6
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
8
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
+ describe('utils.CollectionPage.duplicateCollectionPageActiveEntry', function () {
10
+ var COLLECTION_NAME = 'testCollection';
11
+ var OBJ = {
12
+ id: '1',
13
+ value: 'value'
14
+ };
15
+ it('should duplicate the active entry if one exists', function () {
16
+ var _FORM_DATA;
17
+ var FORM_DATA = (_FORM_DATA = {}, _defineProperty(_FORM_DATA, "".concat(COLLECTION_NAME, "ActiveId"), '1'), _defineProperty(_FORM_DATA, COLLECTION_NAME, [OBJ]), _FORM_DATA);
18
+ (0, _duplicateCollectionPageActiveEntry.default)(COLLECTION_NAME, FORM_DATA);
19
+ expect(FORM_DATA[COLLECTION_NAME].length).toEqual(2);
20
+ expect(FORM_DATA[COLLECTION_NAME][1].value).toEqual(FORM_DATA[COLLECTION_NAME][0].value);
21
+ expect(FORM_DATA[COLLECTION_NAME][1].id).toBeTruthy();
22
+ expect(FORM_DATA[COLLECTION_NAME][1].id === '1').toBeFalsy();
23
+ expect(FORM_DATA["".concat(COLLECTION_NAME, "ActiveId")]).toBeTruthy();
24
+ expect(FORM_DATA["".concat(COLLECTION_NAME, "ActiveId")] === '1').toBeFalsy();
25
+ });
26
+ it('should do nothing if there is no active entry', function () {
27
+ var _FORM_DATA2;
28
+ var FORM_DATA = (_FORM_DATA2 = {}, _defineProperty(_FORM_DATA2, "".concat(COLLECTION_NAME, "ActiveId"), '2'), _defineProperty(_FORM_DATA2, COLLECTION_NAME, [OBJ]), _FORM_DATA2);
29
+ (0, _duplicateCollectionPageActiveEntry.default)(COLLECTION_NAME, FORM_DATA);
30
+ expect(FORM_DATA[COLLECTION_NAME].length).toEqual(1);
31
+ expect(FORM_DATA[COLLECTION_NAME][0]).toEqual(OBJ);
32
+ expect(FORM_DATA["".concat(COLLECTION_NAME, "ActiveId")]).toEqual('2'); // Shouldn't have changed.
33
+ });
34
+
35
+ it('should do nothing if the collection does not exist', function () {
36
+ var FORM_DATA = {};
37
+ (0, _duplicateCollectionPageActiveEntry.default)(COLLECTION_NAME, FORM_DATA);
38
+ expect(FORM_DATA).toEqual({});
39
+ });
40
+ });
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ var _getCollectionPageActiveIndex = _interopRequireDefault(require("./getCollectionPageActiveIndex"));
4
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
+ // Local imports
6
+
7
+ describe('utils.CollectionPage.getCollectionPageActiveIndex', function () {
8
+ it('should return the index of the active item in the collection, if one exists', function () {
9
+ var COLLECTION_NAME = 'test';
10
+ var ACTIVE_ID = '002';
11
+ var FORM_DATA = {
12
+ testActiveId: ACTIVE_ID,
13
+ test: [{
14
+ id: '001'
15
+ }, {
16
+ id: '002'
17
+ }]
18
+ };
19
+ var PAGE = {
20
+ collection: {
21
+ name: COLLECTION_NAME
22
+ },
23
+ formData: FORM_DATA
24
+ };
25
+ expect((0, _getCollectionPageActiveIndex.default)(PAGE.collection.name, PAGE.formData)).toEqual(1);
26
+ });
27
+ it('should return null if no active item can be found in the collection', function () {
28
+ var COLLECTION_NAME = 'test';
29
+ var ACTIVE_ID = '002';
30
+ var FORM_DATA = {
31
+ testActiveId: ACTIVE_ID,
32
+ test: [{
33
+ id: '001'
34
+ }]
35
+ };
36
+ var PAGE = {
37
+ collection: {
38
+ name: COLLECTION_NAME
39
+ },
40
+ formData: FORM_DATA
41
+ };
42
+ expect((0, _getCollectionPageActiveIndex.default)(PAGE.collection.name, PAGE.formData)).toEqual(null);
43
+ });
44
+ it('should return null if formData is null', function () {
45
+ var COLLECTION_NAME = 'test';
46
+ var PAGE = {
47
+ collection: {
48
+ name: COLLECTION_NAME
49
+ }
50
+ };
51
+ expect((0, _getCollectionPageActiveIndex.default)(PAGE.collection.name, null)).toEqual(null);
52
+ });
53
+ });