@ukhomeoffice/cop-react-form-renderer 4.74.0 → 4.76.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 (106) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +10 -4
  2. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +51 -27
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +6 -5
  4. package/dist/components/CollectionPage/CollectionPage.js +7 -5
  5. package/dist/components/FormComponent/Collection.js +25 -17
  6. package/dist/components/FormComponent/Container.js +23 -13
  7. package/dist/components/FormComponent/FormComponent.js +24 -9
  8. package/dist/components/FormComponent/helpers/addLabel.js +4 -3
  9. package/dist/components/FormPage/FormPage.js +30 -19
  10. package/dist/components/FormRenderer/FormRenderer.js +90 -34
  11. package/dist/components/FormRenderer/FormRenderer.test.js +29 -27
  12. package/dist/components/FormRenderer/handlers/index.js +1 -2
  13. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +19 -15
  14. package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +8 -8
  15. package/dist/components/FormRenderer/helpers/getCYA.js +5 -1
  16. package/dist/components/FormRenderer/helpers/getNextPageId.js +13 -7
  17. package/dist/components/FormRenderer/helpers/getRelevantPages.js +10 -2
  18. package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +1 -1
  19. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +38 -24
  20. package/dist/components/FormRenderer/helpers/index.js +1 -2
  21. package/dist/components/FormRenderer/onCYAAction.js +2 -2
  22. package/dist/components/FormRenderer/onCYAAction.test.js +13 -13
  23. package/dist/components/FormRenderer/onPageAction.js +27 -11
  24. package/dist/components/FormRenderer/onPageAction.test.js +16 -16
  25. package/dist/components/FormRenderer/onTaskAction.js +14 -11
  26. package/dist/components/PageActions/ActionButton.js +0 -3
  27. package/dist/components/PageActions/PageActions.js +2 -2
  28. package/dist/components/SummaryList/SummaryList.js +13 -8
  29. package/dist/components/SummaryList/SummaryListHeadingRow.js +6 -2
  30. package/dist/components/SummaryList/SummaryListRow.js +5 -2
  31. package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +2 -1
  32. package/dist/components/SummaryList/helpers/getRowActionAttributes.js +2 -1
  33. package/dist/components/TaskList/Task.js +1 -1
  34. package/dist/components/TaskList/TaskList.js +21 -12
  35. package/dist/components/TaskList/TaskState.js +2 -2
  36. package/dist/components/index.js +7 -0
  37. package/dist/context/HooksContext/HooksContext.js +33 -1
  38. package/dist/context/ValidationContext/ValidationContext.js +8 -1
  39. package/dist/context/ValidationContext/ValidationContext.test.js +8 -2
  40. package/dist/hooks/useGetRequest.js +3 -2
  41. package/dist/hooks/useRefData.js +1 -0
  42. package/dist/index.js +6 -0
  43. package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
  44. package/dist/utils/CheckYourAnswers/getCYAAction.test.js +34 -34
  45. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +2 -1
  46. package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +4 -4
  47. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +2 -1
  48. package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +2 -2
  49. package/dist/utils/CheckYourAnswers/getCYARow.js +13 -11
  50. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +8 -8
  51. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +25 -22
  52. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +1 -0
  53. package/dist/utils/CheckYourAnswers/showComponentCYA.js +1 -1
  54. package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +1 -0
  55. package/dist/utils/CollectionPage/mergeCollectionPages.js +7 -6
  56. package/dist/utils/Component/applyToComponentTree.js +4 -2
  57. package/dist/utils/Component/cleanAttributes.js +7 -1
  58. package/dist/utils/Component/cleanAttributes.test.js +4 -4
  59. package/dist/utils/Component/getComponent.js +8 -6
  60. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +4 -4
  61. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +1 -0
  62. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +3 -3
  63. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +1 -1
  64. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +1 -1
  65. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +1 -1
  66. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +1 -1
  67. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +3 -3
  68. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +1 -1
  69. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +5 -5
  70. package/dist/utils/Component/setupContainerComponentsPath.js +2 -0
  71. package/dist/utils/Condition/meetsCondition.js +2 -1
  72. package/dist/utils/Condition/setupConditions.js +2 -2
  73. package/dist/utils/Container/setupNesting.js +5 -1
  74. package/dist/utils/Data/applyFormula.js +16 -10
  75. package/dist/utils/Data/getAutocompleteSource.js +3 -1
  76. package/dist/utils/Data/getOptions.js +3 -2
  77. package/dist/utils/Data/setupFormData.js +4 -2
  78. package/dist/utils/FormPage/getFormPage.js +1 -1
  79. package/dist/utils/FormPage/getPageActions.js +5 -3
  80. package/dist/utils/FormPage/showFormPage.js +2 -2
  81. package/dist/utils/FormPage/showFormPageCYA.js +1 -0
  82. package/dist/utils/FormPage/useComponent.js +1 -0
  83. package/dist/utils/Format/formatDataForComponent.js +2 -1
  84. package/dist/utils/Meta/index.js +1 -2
  85. package/dist/utils/Operate/getFirstOf.test.js +1 -0
  86. package/dist/utils/Operate/persistValueInFormData.js +1 -0
  87. package/dist/utils/Operate/persistValueInFormData.test.js +1 -1
  88. package/dist/utils/Operate/shouldRun.js +16 -13
  89. package/dist/utils/Validate/additional/index.js +2 -1
  90. package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +1 -1
  91. package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +2 -2
  92. package/dist/utils/Validate/additional/mustBeInTheFuture.js +1 -1
  93. package/dist/utils/Validate/additional/mustBeInThePast.js +5 -5
  94. package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +1 -0
  95. package/dist/utils/Validate/additional/utils.js +16 -16
  96. package/dist/utils/Validate/validateCollection.js +16 -4
  97. package/dist/utils/Validate/validateCollection.test.js +17 -0
  98. package/dist/utils/Validate/validateComponent.js +26 -20
  99. package/dist/utils/Validate/validateContainer.js +2 -2
  100. package/dist/utils/Validate/validateDate.js +2 -1
  101. package/dist/utils/Validate/validateEmail.js +1 -0
  102. package/dist/utils/Validate/validatePage.js +6 -3
  103. package/dist/utils/Validate/validatePage.test.js +9 -18
  104. package/dist/utils/Validate/validateRegex.js +2 -5
  105. package/dist/utils/Validate/validateRequired.js +2 -4
  106. package/package.json +3 -2
@@ -26,30 +26,30 @@ var getEntryToCollectionRow = function getEntryToCollectionRow(page, onAction) {
26
26
  action: (0, _getCYAAction.default)(false, page, onAction)
27
27
  }];
28
28
  };
29
- var getContainerForItem = function getContainerForItem(collection, item, labelCount, full_path) {
29
+ var getContainerForItem = function getContainerForItem(collection, item, labelCount, fullPath) {
30
30
  return {
31
31
  id: item.id,
32
32
  fieldId: item.id,
33
33
  type: _models.ComponentTypes.CONTAINER,
34
34
  required: collection.required,
35
- full_path: full_path,
35
+ full_path: fullPath,
36
36
  components: collection.item.map(function (component) {
37
37
  return _objectSpread(_objectSpread({}, component), {}, {
38
38
  label: _copReactComponents.Utils.interpolateString(component.label, _objectSpread(_objectSpread({}, item), {}, {
39
39
  index: labelCount
40
40
  })),
41
- full_path: "".concat(full_path, ".").concat(component.fieldId)
41
+ full_path: "".concat(fullPath, ".").concat(component.fieldId)
42
42
  });
43
43
  })
44
44
  };
45
45
  };
46
- var getTitleRowForItem = function getTitleRowForItem(collection, item, pageId, labelCount, full_path) {
46
+ var getTitleRowForItem = function getTitleRowForItem(collection, item, pageId, labelCount, fullPath) {
47
47
  var labels = _objectSpread(_objectSpread({}, _models.CollectionLabels), collection.labels);
48
48
  if (labels.item) {
49
49
  return {
50
50
  pageId: pageId,
51
51
  fieldId: collection.fieldId,
52
- full_path: full_path,
52
+ full_path: fullPath,
53
53
  key: _copReactComponents.Utils.interpolateString(labels.item, _objectSpread(_objectSpread({}, item), {}, {
54
54
  index: labelCount
55
55
  })),
@@ -63,10 +63,10 @@ var getCYARowsForCollection = function getCYARowsForCollection(page, collection,
63
63
  if (Array.isArray(items) && items.length && (0, _showComponentCYA.default)(collection, page.formData)) {
64
64
  return items.flatMap(function (item, index) {
65
65
  var labelCount = (collection.countOffset || 0) + index + 1;
66
- var full_path = "".concat(collection.full_path || collection.fieldId, "[").concat(index, "]");
67
- var container = getContainerForItem(collection, item, labelCount, full_path);
66
+ var fullPath = "".concat(collection.full_path || collection.fieldId, "[").concat(index, "]");
67
+ var container = getContainerForItem(collection, item, labelCount, fullPath);
68
68
  container = (0, _setupContainerComponentsPath.default)(container);
69
- return [getTitleRowForItem(collection, item, page.id, labelCount, full_path)].concat((0, _getCYARowsForContainer.default)(page, container, item, onAction));
69
+ return [getTitleRowForItem(collection, item, page.id, labelCount, fullPath)].concat((0, _getCYARowsForContainer.default)(page, container, item, onAction));
70
70
  }).filter(function (r) {
71
71
  return !!r;
72
72
  });
@@ -18,29 +18,29 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
18
18
  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; }
19
19
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
20
20
  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); }
21
- var getContainerForPage = function getContainerForPage(page, item, labelCount, full_path) {
21
+ var getContainerForPage = function getContainerForPage(page, item, labelCount, fullPath) {
22
22
  return {
23
23
  id: item.id,
24
24
  fieldId: item.id,
25
25
  type: _models.ComponentTypes.CONTAINER,
26
26
  required: true,
27
- full_path: full_path,
27
+ full_path: fullPath,
28
28
  components: page.components.map(function (component) {
29
29
  return _objectSpread(_objectSpread({}, component), {}, {
30
30
  label: _copReactComponents.Utils.interpolateString(component.label, _objectSpread(_objectSpread({}, item), {}, {
31
31
  index: labelCount
32
32
  })),
33
- full_path: "".concat(full_path, ".").concat(component.fieldId)
33
+ full_path: "".concat(fullPath, ".").concat(component.fieldId)
34
34
  });
35
35
  })
36
36
  };
37
37
  };
38
- var getTitleRowForItem = function getTitleRowForItem(page, item, pageId, labelCount, full_path) {
38
+ var getTitleRowForItem = function getTitleRowForItem(page, item, pageId, labelCount, fullPath) {
39
39
  var labels = _objectSpread(_objectSpread({}, _models.CollectionLabels), page.collection.labels);
40
40
  return {
41
41
  pageId: pageId,
42
42
  fieldId: 'Title',
43
- full_path: "".concat(full_path, ".Title"),
43
+ full_path: "".concat(fullPath, ".Title"),
44
44
  key: _copReactComponents.Utils.interpolateString(labels.item, _objectSpread(_objectSpread({}, item), {}, {
45
45
  index: labelCount
46
46
  })),
@@ -63,22 +63,24 @@ var getHeadingRow = function getHeadingRow(config, pageId, labelCount) {
63
63
  };
64
64
  var getActionRows = function getActionRows(page, item, onAction, labelCount) {
65
65
  var _page$collection, _page$collection$acti;
66
- var actions = (_page$collection = page.collection) === null || _page$collection === void 0 ? void 0 : (_page$collection$acti = _page$collection.actions) === null || _page$collection$acti === void 0 ? void 0 : _page$collection$acti.map(function (action) {
66
+ return (_page$collection = page.collection) === null || _page$collection === void 0 ? void 0 : (_page$collection$acti = _page$collection.actions) === null || _page$collection$acti === void 0 ? void 0 : _page$collection$acti.map(function (action) {
67
67
  if (action.type === 'remove') {
68
68
  return (0, _getCYACollectionDeleteAction.default)(page, item, onAction, labelCount, action);
69
- } else if (action.type === 'change') {
69
+ }
70
+ if (action.type === 'change') {
70
71
  return (0, _getCYACollectionChangeAction.default)(page, item, onAction, labelCount, action);
71
- } else {
72
- return null;
73
72
  }
73
+ return null;
74
74
  }).filter(function (action) {
75
75
  return !!action;
76
76
  });
77
- return actions;
78
77
  };
78
+
79
+ // eslint-disable-next-line arrow-body-style
79
80
  var getChangeActionForPage = function getChangeActionForPage(page, item, onAction) {
80
81
  return function () {
81
- var changeCallback = function changeCallback(data) {
82
+ var changeCallback = function changeCallback(changeData) {
83
+ var data = changeData;
82
84
  data["".concat(page.collection.name, "ActiveId")] = item.id;
83
85
  return data;
84
86
  };
@@ -107,26 +109,27 @@ var getCYARowsForCollectionPage = function getCYARowsForCollectionPage(page, onA
107
109
  var _page$collection2;
108
110
  var labelCount = index + 1;
109
111
  var actionPosition = ((_page$collection2 = page.collection) === null || _page$collection2 === void 0 ? void 0 : _page$collection2.actionPosition) || 'top';
110
- var full_path = "".concat(page.collection.name, "[").concat(index, "]");
111
- var titleRow = getTitleRowForItem(page, item, page.id, labelCount, full_path);
112
+ var fullPath = "".concat(page.collection.name, "[").concat(index, "]");
113
+ var titleRow = getTitleRowForItem(page, item, page.id, labelCount, fullPath);
112
114
  var actionRows = getActionRows(page, item, onAction, labelCount);
113
115
  rows = rows.concat(titleRow);
114
116
  if (actionPosition === 'top') {
115
117
  rows = rows.concat(actionRows);
116
118
  }
117
119
  page.collectionPages.forEach(function (p) {
118
- if (p.collection.route) {
119
- var pageWithRoute = (0, _addShowWhen.default)(p, p.collection.route);
120
- p = pageWithRoute || p;
120
+ var collectionPage = p;
121
+ if (collectionPage.collection.route) {
122
+ var pageWithRoute = (0, _addShowWhen.default)(collectionPage, p.collection.route);
123
+ collectionPage = pageWithRoute || collectionPage;
121
124
  }
122
- if ((0, _showFormPageCYA.default)(p, _objectSpread(_objectSpread({}, p.formData), item))) {
123
- if (p.collection.heading) {
124
- var headingRow = getHeadingRow(p.collection.heading, p.id, labelCount);
125
+ if ((0, _showFormPageCYA.default)(collectionPage, _objectSpread(_objectSpread({}, collectionPage.formData), item))) {
126
+ if (collectionPage.collection.heading) {
127
+ var headingRow = getHeadingRow(collectionPage.collection.heading, collectionPage.id, labelCount);
125
128
  rows = rows.concat(headingRow);
126
129
  }
127
- var container = getContainerForPage(p, item, labelCount, full_path);
128
- var rowChangeAction = getChangeActionForPage(p, item, onAction);
129
- var containerRows = (0, _getCYARowsForContainer.default)(p, container, item, rowChangeAction);
130
+ var container = getContainerForPage(collectionPage, item, labelCount, fullPath);
131
+ var rowChangeAction = getChangeActionForPage(collectionPage, item, onAction);
132
+ var containerRows = (0, _getCYARowsForContainer.default)(collectionPage, container, item, rowChangeAction);
130
133
  rows = rows.concat(containerRows);
131
134
  }
132
135
  });
@@ -34,6 +34,7 @@ var getCYARowsForContainer = function getCYARowsForContainer(page, container, fo
34
34
  }), component, onAction);
35
35
  });
36
36
  }
37
+ return null;
37
38
  };
38
39
  var _default = getCYARowsForContainer;
39
40
  exports.default = _default;
@@ -29,7 +29,7 @@ var showComponentCYA = function showComponentCYA(options, data) {
29
29
  if (EXCLUDE_FROM_CYA.includes(options.type)) {
30
30
  return false;
31
31
  }
32
- if (options.hasOwnProperty('show_on_cya') && !options.show_on_cya) {
32
+ if (Object.prototype.hasOwnProperty.call(options, 'show_on_cya') && !options.show_on_cya) {
33
33
  return false;
34
34
  }
35
35
  if (options.hideOnCyaWhenEmpty && options.type === _models.ComponentTypes.COLLECTION) {
@@ -30,6 +30,7 @@ var duplicateCollectionPageActiveEntry = function duplicateCollectionPageActiveE
30
30
  id: Date.now().toString()
31
31
  });
32
32
  formData[collectionName].push(newEntry);
33
+ // eslint-disable-next-line no-param-reassign
33
34
  formData["".concat(collectionName, "ActiveId")] = newEntry.id;
34
35
  return true;
35
36
  };
@@ -10,6 +10,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
10
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
11
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
12
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
+ /* eslint-disable no-param-reassign */
14
+
13
15
  var createMasterPage = function createMasterPage(page) {
14
16
  return {
15
17
  id: page.id,
@@ -48,13 +50,12 @@ var mergeCollectionPages = function mergeCollectionPages(pages) {
48
50
  // we kick one off using this page as a template.
49
51
  masterPages[page.collection.name] = createMasterPage(page);
50
52
  return masterPages[page.collection.name];
51
- } else {
52
- // If a master page already exists for this collection.name
53
- // then we just merge this page into it and remove this page
54
- // from the array.
55
- mergeIntoMasterPage(page, masterPages[page.collection.name]);
56
- return null;
57
53
  }
54
+ // If a master page already exists for this collection.name
55
+ // then we just merge this page into it and remove this page
56
+ // from the array.
57
+ mergeIntoMasterPage(page, masterPages[page.collection.name]);
58
+ return null;
58
59
  }
59
60
  return page;
60
61
  }).filter(function (page) {
@@ -35,12 +35,14 @@ var applyToComponentTree = function applyToComponentTree(root, callback) {
35
35
  var result = _objectSpread({}, root);
36
36
  switch (root.type) {
37
37
  case _models.ComponentTypes.CONTAINER:
38
- result.components.forEach(function (c, index, array) {
38
+ result.components.forEach(function (c, index, containerArray) {
39
+ var array = containerArray;
39
40
  array[index] = applyToComponentTree(c, callback);
40
41
  });
41
42
  break;
42
43
  case _models.ComponentTypes.COLLECTION:
43
- result.item.forEach(function (c, index, array) {
44
+ result.item.forEach(function (c, index, collectionArray) {
45
+ var array = collectionArray;
44
46
  array[index] = applyToComponentTree(c, callback);
45
47
  });
46
48
  break;
@@ -4,6 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = exports.JSON_ONLY_PROPERTIES = void 0;
7
+ 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; }
8
+ 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; }
9
+ 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; }
10
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
11
+ 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); }
7
12
  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
13
  var JSON_ONLY_PROPERTIES = ['source', 'use', 'show_when', 'options', 'additionalValidation', 'full_path', 'formData'];
9
14
 
@@ -25,8 +30,9 @@ var cleanAttributes = function cleanAttributes(options) {
25
30
  if (options && _typeof(options) === 'object') {
26
31
  return Object.keys(options).reduce(function (obj, key) {
27
32
  if (!removeKeys.includes(key)) {
28
- obj[key] = options[key];
33
+ return _objectSpread(_objectSpread({}, obj), {}, _defineProperty({}, key, options[key]));
29
34
  }
35
+ ;
30
36
  return obj;
31
37
  }, {});
32
38
  }
@@ -27,13 +27,13 @@ describe('utils', function () {
27
27
  };
28
28
  // Add a bunch of properties we know will need to be removed.
29
29
  _cleanAttributes.JSON_ONLY_PROPERTIES.forEach(function (p) {
30
- return OPTIONS[p] = 'value';
30
+ OPTIONS[p] = 'value';
31
31
  });
32
32
  var RESULT = (0, _cleanAttributes.default)(OPTIONS);
33
33
 
34
34
  // The original options should remain untouched.
35
35
  expect(OPTIONS.id).toEqual('bob');
36
- expect(OPTIONS['source']).toEqual('value');
36
+ expect(OPTIONS.source).toEqual('value');
37
37
 
38
38
  // But those values should have been removed from the result,
39
39
  // which means it should simply have an id of 'bob'.
@@ -48,14 +48,14 @@ describe('utils', function () {
48
48
  };
49
49
  // Add a bunch of properties we know will need to be removed.
50
50
  _cleanAttributes.JSON_ONLY_PROPERTIES.forEach(function (p) {
51
- return OPTIONS[p] = 'value';
51
+ OPTIONS[p] = 'value';
52
52
  });
53
53
  var RESULT = (0, _cleanAttributes.default)(OPTIONS, ['fieldId']);
54
54
 
55
55
  // The original options should remain untouched.
56
56
  expect(OPTIONS.id).toEqual('bob');
57
57
  expect(OPTIONS.fieldId).toEqual('bobField');
58
- expect(OPTIONS['source']).toEqual('value');
58
+ expect(OPTIONS.source).toEqual('value');
59
59
 
60
60
  // But those values should have been removed from the result,
61
61
  // which means it should simply have an id of 'bob'.
@@ -35,9 +35,8 @@ var getAlert = function getAlert(config) {
35
35
  var heading = _copReactComponents.Utils.interpolateString(config.heading, config.formData);
36
36
  var children = _copReactComponents.Utils.interpolateString(config.text, config.formData);
37
37
  return /*#__PURE__*/_react.default.createElement(_copReactComponents.Alert, _extends({}, attrs, {
38
- heading: heading,
39
- children: children
40
- }));
38
+ heading: heading
39
+ }), children);
41
40
  };
42
41
  var getAutocomplete = function getAutocomplete(config) {
43
42
  var attrs = (0, _cleanAttributes.default)(config);
@@ -51,7 +50,8 @@ var getCheckboxes = function getCheckboxes(config) {
51
50
  _Data.default.getOptions(config, function (val) {
52
51
  options = val;
53
52
  });
54
- options.forEach(function (option) {
53
+ options.forEach(function (paramOption) {
54
+ var option = _objectSpread({}, paramOption);
55
55
  if (!Array.isArray(option.nested)) {
56
56
  return;
57
57
  }
@@ -138,7 +138,8 @@ var getRadios = function getRadios(config) {
138
138
  _Data.default.getOptions(config, function (val) {
139
139
  options = val;
140
140
  });
141
- options.forEach(function (option) {
141
+ options.forEach(function (paramOption) {
142
+ var option = _objectSpread({}, paramOption);
142
143
  if (!Array.isArray(option.nested)) {
143
144
  return;
144
145
  }
@@ -229,7 +230,8 @@ var getComponentByType = function getComponentByType(config) {
229
230
  * @param {*} parent the parent configuration
230
231
  * @param {*} child the child configuration
231
232
  */
232
- var getChildJsx = function getChildJsx(parent, child) {
233
+ var getChildJsx = function getChildJsx(parent, paramChild) {
234
+ var child = _objectSpread({}, paramChild);
233
235
  if (parent.full_path) {
234
236
  var pathParts = parent.full_path.split('.');
235
237
  pathParts.pop();
@@ -29,10 +29,10 @@ describe('utils.Component.get', function () {
29
29
  var formGroup = (0, _react.getByTestId)(container, ID);
30
30
  expect(formGroup.tagName).toEqual('DIV');
31
31
  expect(formGroup.classList).toContain('govuk-form-group');
32
- var label = undefined;
33
- var autocompleteWrapper = undefined;
34
- var autocomplete = undefined;
35
- var autocompleteInput = undefined;
32
+ var label;
33
+ var autocompleteWrapper;
34
+ var autocomplete;
35
+ var autocompleteInput;
36
36
  var fieldSet = formGroup.childNodes[0];
37
37
  fieldSet.childNodes.forEach(function (node) {
38
38
  // Check if it's an element.
@@ -127,6 +127,7 @@ describe('utils.Component.get', function () {
127
127
  },
128
128
  result: '266.67'
129
129
  }].forEach(function (test) {
130
+ // eslint-disable-next-line no-param-reassign
130
131
  test.config.onChange = function (_ref) {
131
132
  var target = _ref.target;
132
133
  COMPONENT.formData[target.name] = target.value;
@@ -46,7 +46,7 @@ describe('utils.Component.get', function () {
46
46
  expect(formGroup.tagName).toEqual('DIV');
47
47
  expect(formGroup.classList).toContain('govuk-form-group');
48
48
  var fieldSet = formGroup.childNodes[0];
49
- var label = undefined;
49
+ var label;
50
50
  fieldSet.childNodes.forEach(function (node) {
51
51
  // Check if it's an element.
52
52
  if (node instanceof Element) {
@@ -76,10 +76,10 @@ describe('utils.Component.get', function () {
76
76
  expect(checkbox.classList).toContain('govuk-checkboxes__item');
77
77
  var _checkbox$childNodes = _slicedToArray(checkbox.childNodes, 2),
78
78
  input = _checkbox$childNodes[0],
79
- label = _checkbox$childNodes[1];
79
+ inputLabel = _checkbox$childNodes[1];
80
80
  expect(input.tagName).toEqual('INPUT');
81
81
  expect(input.type).toEqual('checkbox');
82
- expect(label.textContent).toEqual(option.label);
82
+ expect(inputLabel.textContent).toEqual(option.label);
83
83
  });
84
84
  _react.fireEvent.click(checkboxItems[0].childNodes[0]); // alpha
85
85
  expect(ON_CHANGE_CALLS.length).toEqual(1);
@@ -35,7 +35,7 @@ describe('utils.Component.get', function () {
35
35
  input = _getAllByTestId2[1];
36
36
  expect(formGroup.tagName).toEqual('DIV');
37
37
  expect(formGroup.classList).toContain('govuk-form-group');
38
- var label = undefined;
38
+ var label;
39
39
  formGroup.childNodes[0].childNodes.forEach(function (node) {
40
40
  // Check if it's an element.
41
41
  if (node instanceof Element && node.tagName === 'LEGEND') {
@@ -36,7 +36,7 @@ describe('utils.Component.get', function () {
36
36
  input = _getAllByTestId2[1];
37
37
  expect(formGroup.tagName).toEqual('DIV');
38
38
  expect(formGroup.classList).toContain('govuk-form-group');
39
- var label = undefined;
39
+ var label;
40
40
  formGroup.childNodes[0].childNodes.forEach(function (node) {
41
41
  // Check if it's an element.
42
42
  if (node instanceof Element && node.tagName === 'LEGEND') {
@@ -39,7 +39,7 @@ describe('utils.Component.get', function () {
39
39
  expect(wrapper.classList).toContain('cop-multi-file-upload');
40
40
  expect(wrapper.id).toEqual(ID);
41
41
  var input = wrapper.children[1].children[0];
42
- var label = undefined;
42
+ var label;
43
43
  formGroup.childNodes[0].childNodes.forEach(function (node) {
44
44
  // Check if it's an element.
45
45
  if (node instanceof Element && node.tagName === 'LEGEND') {
@@ -35,7 +35,7 @@ describe('utils.Component.get', function () {
35
35
  input = _getAllByTestId2[1];
36
36
  expect(formGroup.tagName).toEqual('DIV');
37
37
  expect(formGroup.classList).toContain('govuk-form-group');
38
- var label = undefined;
38
+ var label;
39
39
  formGroup.childNodes[0].childNodes.forEach(function (node) {
40
40
  // Check if it's an element.
41
41
  if (node instanceof Element && node.tagName === 'LEGEND') {
@@ -45,7 +45,7 @@ describe('utils.Component.get', function () {
45
45
  radios = _getAllByTestId2[1];
46
46
  expect(formGroup.tagName).toEqual('DIV');
47
47
  expect(formGroup.classList).toContain('govuk-form-group');
48
- var label = undefined;
48
+ var label;
49
49
  formGroup.childNodes[0].childNodes.forEach(function (node) {
50
50
  // Check if it's an element.
51
51
  if (node instanceof Element) {
@@ -75,10 +75,10 @@ describe('utils.Component.get', function () {
75
75
  expect(radio.classList).toContain('govuk-radios__item');
76
76
  var _radio$childNodes = _slicedToArray(radio.childNodes, 2),
77
77
  input = _radio$childNodes[0],
78
- label = _radio$childNodes[1];
78
+ inputLabel = _radio$childNodes[1];
79
79
  expect(input.tagName).toEqual('INPUT');
80
80
  expect(input.type).toEqual('radio');
81
- expect(label.textContent).toEqual(option.label);
81
+ expect(inputLabel.textContent).toEqual(option.label);
82
82
  });
83
83
  _react.fireEvent.click(radioItems[0].childNodes[0]); // alpha
84
84
  expect(ON_CHANGE_CALLS.length).toEqual(1);
@@ -35,7 +35,7 @@ describe('utils.Component.get', function () {
35
35
  input = _getAllByTestId2[1];
36
36
  expect(formGroup.tagName).toEqual('DIV');
37
37
  expect(formGroup.classList).toContain('govuk-form-group');
38
- var label = undefined;
38
+ var label;
39
39
  formGroup.childNodes[0].childNodes.forEach(function (node) {
40
40
  // Check if it's an element.
41
41
  if (node instanceof Element && node.tagName === 'LEGEND') {
@@ -61,11 +61,11 @@ describe('utils.Component.get', function () {
61
61
  expect(part.item.tagName).toEqual('DIV');
62
62
  expect(part.item.classList).toContain('govuk-date-input__item');
63
63
  var _part$item$childNodes = _slicedToArray(part.item.childNodes[0].childNodes, 2),
64
- label = _part$item$childNodes[0],
64
+ inputLabel = _part$item$childNodes[0],
65
65
  input = _part$item$childNodes[1];
66
- expect(label.childNodes[0].tagName).toEqual('LABEL');
67
- expect(label.childNodes[0].classList).toContain('govuk-label');
68
- expect(label.textContent).toEqual(part.label);
66
+ expect(inputLabel.childNodes[0].tagName).toEqual('LABEL');
67
+ expect(inputLabel.childNodes[0].classList).toContain('govuk-label');
68
+ expect(inputLabel.textContent).toEqual(part.label);
69
69
  expect(input.tagName).toEqual('INPUT');
70
70
  expect(input.id).toEqual("".concat(ID, "-").concat(part.id));
71
71
 
@@ -76,7 +76,7 @@ describe('utils.Component.get', function () {
76
76
  value: part.value
77
77
  }
78
78
  });
79
- onChangeCalls++;
79
+ onChangeCalls += 1;
80
80
  expect(ON_CHANGE_CALLS.length).toEqual(onChangeCalls);
81
81
  expect(ON_CHANGE_CALLS[onChangeCalls - 1]).toMatchObject({
82
82
  name: FIELD_ID,
@@ -22,12 +22,14 @@ var setupContainerComponentsPath = function setupContainerComponentsPath(contain
22
22
  full_path: "".concat(component.full_path || "".concat(container.full_path, ".").concat(component.fieldId), ".").concat(c.fieldId)
23
23
  });
24
24
  }
25
+ ;
25
26
  return null;
26
27
  }).filter(function (c) {
27
28
  return !!c;
28
29
  })
29
30
  });
30
31
  }
32
+ ;
31
33
  return _objectSpread(_objectSpread({}, component), !component.full_path && {
32
34
  full_path: "".concat(container.full_path || container.fieldId, ".").concat(component.fieldId)
33
35
  });
@@ -11,7 +11,8 @@ var getComparisonValue = function getComparisonValue(condition, data) {
11
11
  var _condition$value;
12
12
  if (['in', 'nin', 'includesAllOf', '!includesAllOf'].includes(condition.op)) {
13
13
  return condition.values;
14
- } else if (typeof condition.value === 'string' && (_condition$value = condition.value) !== null && _condition$value !== void 0 && _condition$value.startsWith('field::')) {
14
+ }
15
+ if (typeof condition.value === 'string' && (_condition$value = condition.value) !== null && _condition$value !== void 0 && _condition$value.startsWith('field::')) {
15
16
  var comparisonField = condition.value.replace('field::', '');
16
17
  return _Data.default.getSource(data, comparisonField);
17
18
  }
@@ -15,10 +15,10 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
15
15
  var makeComponentFieldsAbsolute = function makeComponentFieldsAbsolute(component) {
16
16
  if (component.show_when) {
17
17
  var conditions = component.show_when.type ? component.show_when.conditions : component.show_when;
18
- var full_path = component.full_path;
18
+ var fullPath = component.full_path;
19
19
  conditions = Array.isArray(conditions) ? conditions : [conditions];
20
20
  return conditions.map(function (condition) {
21
- var field = _Data.default.getDataPath(condition.field, full_path);
21
+ var field = _Data.default.getDataPath(condition.field, fullPath);
22
22
  return _objectSpread(_objectSpread({}, condition), {}, {
23
23
  field: field
24
24
  });
@@ -14,12 +14,16 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
14
14
  var nestComponents = function nestComponents(container) {
15
15
  var containerPath = container.full_path || container.fieldId;
16
16
  return container.components.map(function (component) {
17
+ // eslint-disable-next-line camelcase
17
18
  var full_path = containerPath ? "".concat(containerPath, ".").concat(component.fieldId) : component.fieldId;
18
19
  var ret = _objectSpread(_objectSpread({}, component), {}, {
19
20
  full_path: full_path
20
21
  });
21
22
  if (component.type === _models.ComponentTypes.CONTAINER) {
22
- return setupNesting(ret);
23
+ return (
24
+ // eslint-disable-next-line no-use-before-define
25
+ setupNesting(ret)
26
+ );
23
27
  }
24
28
  return ret;
25
29
  });
@@ -16,6 +16,7 @@ var applyFormula = function applyFormula(config) {
16
16
  var result = simplify(config);
17
17
  return !result && result !== 0 ? '' : result;
18
18
  } catch (err) {
19
+ // eslint-disable-next-line no-console
19
20
  console.error(err.message);
20
21
  }
21
22
  return '';
@@ -60,14 +61,13 @@ var reduceNumber = function reduceNumber(config, reduction) {
60
61
  }, 0), config);
61
62
  };
62
63
  var round = function round(number, config) {
63
- var round = config.formula.round;
64
- if (!round && round !== 0 || !number) return number;
65
- if (round === 0) {
66
- return parseInt(number);
67
- } else {
68
- var precisionScale = Math.pow(10, round);
69
- return Math.round((number + Number.EPSILON) * precisionScale) / precisionScale;
64
+ var roundNumber = config.formula.round;
65
+ if (!roundNumber && roundNumber !== 0 || !number) return number;
66
+ if (roundNumber === 0) {
67
+ return parseInt(number, 10);
70
68
  }
69
+ var precisionScale = Math.pow(10, roundNumber);
70
+ return Math.round((number + Number.EPSILON) * precisionScale) / precisionScale;
71
71
  };
72
72
  var getValue = function getValue(arg, formData) {
73
73
  var keys = Object.keys(arg);
@@ -76,8 +76,11 @@ var getValue = function getValue(arg, formData) {
76
76
  var val = arg[key];
77
77
  switch (key) {
78
78
  case 'field':
79
- var fieldVal = fieldValue(val, formData);
80
- return !fieldVal && fieldVal !== 0 ? NaN : parseFloat(fieldVal);
79
+ {
80
+ var fieldVal = fieldValue(val, formData);
81
+ return !fieldVal && fieldVal !== 0 ? NaN : parseFloat(fieldVal);
82
+ }
83
+ ;
81
84
  case 'value':
82
85
  return parseFloat(val);
83
86
  case 'formula':
@@ -92,7 +95,10 @@ var getValue = function getValue(arg, formData) {
92
95
  }
93
96
  };
94
97
  var fieldValue = function fieldValue(field, data) {
95
- return _copReactComponents.Utils.interpolateString('${' + field + '}', data);
98
+ return (
99
+ // eslint-disable-next-line prefer-template
100
+ _copReactComponents.Utils.interpolateString('${' + field + '}', data)
101
+ );
96
102
  };
97
103
  var _default = applyFormula;
98
104
  exports.default = _default;
@@ -4,9 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _getOptions = _interopRequireDefault(require("./getOptions"));
8
7
  var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
+ var _getOptions = _interopRequireDefault(require("./getOptions"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ // Global Imports
11
+
10
12
  // Local imports
11
13
 
12
14
  var getAutocompleteSource = function getAutocompleteSource(config) {
@@ -36,11 +36,12 @@ var getOptions = function getOptions(config, callback) {
36
36
  if (config) {
37
37
  if (config.options) {
38
38
  return callback(interpolateOptions(config, config.options));
39
- } else if (config.data && config.data.options) {
39
+ }
40
+ if (config.data && config.data.options) {
40
41
  return callback(interpolateOptions(config, config.data.options));
41
42
  }
42
43
  }
43
- callback([]);
44
+ return callback([]);
44
45
  };
45
46
  var _default = getOptions;
46
47
  exports.default = _default;