@ukhomeoffice/cop-react-form-renderer 5.13.3-bravo → 5.15.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 (29) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +2 -2
  2. package/dist/components/CheckYourAnswers/Answer.test.js +3 -2
  3. package/dist/components/CollectionPage/CollectionPage.js +6 -0
  4. package/dist/components/CollectionPage/CollectionPage.test.js +1 -1
  5. package/dist/components/FormComponent/Collection.test.js +10 -10
  6. package/dist/components/FormComponent/Container.js +3 -3
  7. package/dist/components/FormComponent/Container.test.js +3 -3
  8. package/dist/components/FormComponent/FormComponent.test.js +3 -3
  9. package/dist/components/FormPage/FormPage.test.js +1 -1
  10. package/dist/components/FormRenderer/FormRenderer.js +1 -0
  11. package/dist/components/FormRenderer/FormRenderer.test.js +16 -12
  12. package/dist/components/FormRenderer/onCYAAction.js +5 -1
  13. package/dist/components/FormRenderer/onCYAAction.test.js +8 -5
  14. package/dist/components/FormRenderer/onPageAction.js +8 -5
  15. package/dist/components/FormRenderer/onPageAction.test.js +6 -5
  16. package/dist/components/SummaryList/SummaryList.js +2 -1
  17. package/dist/components/TaskList/TaskList.js +6 -7
  18. package/dist/components/TaskList/TaskList.test.js +13 -13
  19. package/dist/context/HooksContext/HooksContext.js +1 -1
  20. package/dist/hooks/useRefData.js +1 -2
  21. package/dist/models/ComponentTypes.js +0 -2
  22. package/dist/models/EventTypes.js +3 -1
  23. package/dist/utils/CheckYourAnswers/showComponentCYA.js +1 -0
  24. package/dist/utils/Component/getComponent.js +0 -13
  25. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +2 -2
  26. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +6 -6
  27. package/dist/utils/Condition/meetsAllConditions.js +14 -5
  28. package/dist/utils/Condition/meetsAllConditions.test.js +34 -0
  29. package/package.json +2 -2
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
- var _copReactComponents = require("@ukhomeoffice/cop-react-components");
9
+ var _VisuallyHidden = _interopRequireDefault(require("@ukhomeoffice/cop-react-components/dist/VisuallyHidden"));
10
10
  var _FormComponent = _interopRequireDefault(require("../FormComponent"));
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
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); }
@@ -20,7 +20,7 @@ var Answer = function Answer(_ref) {
20
20
  component = _ref.component,
21
21
  formData = _ref.formData;
22
22
  if (!value) {
23
- return /*#__PURE__*/_react.default.createElement(_copReactComponents.VisuallyHidden, null, "No answer");
23
+ return /*#__PURE__*/_react.default.createElement(_VisuallyHidden.default, null, "No answer");
24
24
  }
25
25
  if (!component) {
26
26
  return Object.prototype.hasOwnProperty.call(value, 'label') ? value.label : value;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  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); }
4
+ var _Readonly = require("@ukhomeoffice/cop-react-components/dist/Readonly");
4
5
  var _react = _interopRequireDefault(require("react"));
5
6
  var _setupTests = require("../../setupTests");
6
7
  var _Answer = _interopRequireDefault(require("./Answer"));
@@ -65,7 +66,7 @@ describe('components', function () {
65
66
  })), container = _renderWithValidation3.container;
66
67
  answer = container.childNodes[0];
67
68
  expect(answer.tagName).toEqual('DIV');
68
- expect(answer.classList).toContain(DEFAULT_READONLY_CLASS);
69
+ expect(answer.classList).toContain(_Readonly.DEFAULT_CLASS);
69
70
  expect(answer.textContent).toEqual(VALUE);
70
71
  case 7:
71
72
  case "end":
@@ -124,7 +125,7 @@ describe('components', function () {
124
125
  })), container = _renderWithValidation5.container;
125
126
  answer = container.childNodes[0];
126
127
  expect(answer.tagName).toEqual('DIV');
127
- expect(answer.classList).toContain(DEFAULT_READONLY_CLASS);
128
+ expect(answer.classList).toContain(_Readonly.DEFAULT_CLASS);
128
129
  expect(answer.textContent).toEqual('hardcoded delta');
129
130
  case 8:
130
131
  case "end":
@@ -29,6 +29,7 @@ var DEFAULT_CLASS = _FormPage2.DEFAULT_CLASS;
29
29
  exports.DEFAULT_CLASS = DEFAULT_CLASS;
30
30
  var CollectionPage = function CollectionPage(_ref) {
31
31
  var page = _ref.page,
32
+ onCollectionChange = _ref.onCollectionChange,
32
33
  onAction = _ref.onAction,
33
34
  hashLink = _ref.hashLink,
34
35
  classBlock = _ref.classBlock,
@@ -62,6 +63,9 @@ var CollectionPage = function CollectionPage(_ref) {
62
63
  value: newValue
63
64
  }
64
65
  });
66
+ if (typeof onCollectionChange === 'function') {
67
+ onCollectionChange(page.formData);
68
+ }
65
69
  };
66
70
  var reportActiveIdChange = function reportActiveIdChange(newActiveId) {
67
71
  onPageChange({
@@ -119,6 +123,7 @@ CollectionPage.propTypes = {
119
123
  actions: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({}), _propTypes.default.string])),
120
124
  formData: _propTypes.default.shape({}).isRequired
121
125
  }).isRequired,
126
+ onCollectionChange: _propTypes.default.func,
122
127
  onAction: _propTypes.default.func.isRequired,
123
128
  hashLink: _propTypes.default.bool,
124
129
  classBlock: _propTypes.default.string,
@@ -126,6 +131,7 @@ CollectionPage.propTypes = {
126
131
  className: _propTypes.default.string
127
132
  };
128
133
  CollectionPage.defaultProps = {
134
+ onCollectionChange: undefined,
129
135
  hashLink: false,
130
136
  classBlock: DEFAULT_CLASS,
131
137
  classModifiers: [],
@@ -150,7 +150,7 @@ describe('components.CollectionPage', function () {
150
150
  expect(input.tagName).toEqual('INPUT');
151
151
  expect(input.classList).toContain('govuk-input');
152
152
  expect(input.id).toEqual(fieldId);
153
- expect(input.dataset.value).toEqual(val);
153
+ expect(input.value).toEqual(val);
154
154
  return input;
155
155
  };
156
156
  var checkAutoCompleteField = function checkAutoCompleteField(formGroup, fieldId, lbl, hnt, val) {
@@ -84,7 +84,7 @@ describe('components.FormComponent.Collection', function () {
84
84
  expect(input.tagName).toEqual('INPUT');
85
85
  expect(input.classList).toContain('govuk-input');
86
86
  expect(input.id).toEqual("".concat(ID, "[0].").concat(TEXT_ID));
87
- expect(input.dataset.value).toEqual(TEXT_VALUE);
87
+ expect(input.value).toEqual(TEXT_VALUE);
88
88
  case 30:
89
89
  case "end":
90
90
  return _context.stop();
@@ -392,7 +392,7 @@ describe('components.FormComponent.Collection', function () {
392
392
  input = formGroup.childNodes[2];
393
393
  expect(input.tagName).toEqual('DIV'); // Now readonly, so a DIV.
394
394
  expect(input.classList).toContain('hods-readonly'); // Now readonly, so hods-readonly
395
- expect(input.dataset.id).toEqual("".concat(ID, "[0].").concat(TEXT_ID));
395
+ expect(input.id).toEqual("".concat(ID, "[0].").concat(TEXT_ID));
396
396
  expect(input.textContent).toEqual(TEXT_VALUE);
397
397
  case 30:
398
398
  case "end":
@@ -518,7 +518,7 @@ describe('components.FormComponent.Collection', function () {
518
518
  expect(input.tagName).toEqual('INPUT');
519
519
  expect(input.classList).toContain('govuk-input');
520
520
  expect(input.id).toEqual("".concat(ID, "[0].").concat(TEXT_ID));
521
- expect(input.dataset.value).toEqual(TEXT_VALUE);
521
+ expect(input.value).toEqual(TEXT_VALUE);
522
522
 
523
523
  // First item component 2
524
524
  formGroup = itemContainer.childNodes[1];
@@ -537,7 +537,7 @@ describe('components.FormComponent.Collection', function () {
537
537
  expect(input.tagName).toEqual('INPUT');
538
538
  expect(input.classList).toContain('govuk-input');
539
539
  expect(input.id).toEqual("".concat(ID, "[0].textTwo"));
540
- expect(input.dataset.value).toEqual('charlie');
540
+ expect(input.value).toEqual('charlie');
541
541
 
542
542
  // Check the second item and confirm there is no hint
543
543
  itemTwo = c.childNodes[1];
@@ -564,7 +564,7 @@ describe('components.FormComponent.Collection', function () {
564
564
  expect(inputTwo.tagName).toEqual('INPUT');
565
565
  expect(inputTwo.classList).toContain('govuk-input');
566
566
  expect(inputTwo.id).toEqual("".concat(ID, "[1].").concat(TEXT_ID));
567
- expect(inputTwo.dataset.value).toEqual('beta');
567
+ expect(inputTwo.value).toEqual('beta');
568
568
 
569
569
  // Second item second component
570
570
  formGroupTwo = itemContainerTwo.childNodes[1];
@@ -581,7 +581,7 @@ describe('components.FormComponent.Collection', function () {
581
581
  expect(inputTwo.tagName).toEqual('INPUT');
582
582
  expect(inputTwo.classList).toContain('govuk-input');
583
583
  expect(inputTwo.id).toEqual("".concat(ID, "[1].textTwo"));
584
- expect(inputTwo.dataset.value).toEqual('delta');
584
+ expect(inputTwo.value).toEqual('delta');
585
585
  case 87:
586
586
  case "end":
587
587
  return _context11.stop();
@@ -658,7 +658,7 @@ describe('components.FormComponent.Collection', function () {
658
658
  expect(input.tagName).toEqual('INPUT');
659
659
  expect(input.classList).toContain('govuk-input');
660
660
  expect(input.id).toEqual("".concat(ID, "[0].").concat(TEXT_ID));
661
- expect(input.dataset.value).toEqual(TEXT_VALUE);
661
+ expect(input.value).toEqual(TEXT_VALUE);
662
662
 
663
663
  // First item component 2
664
664
  formGroup = itemContainer.childNodes[1];
@@ -677,7 +677,7 @@ describe('components.FormComponent.Collection', function () {
677
677
  expect(input.tagName).toEqual('INPUT');
678
678
  expect(input.classList).toContain('govuk-input');
679
679
  expect(input.id).toEqual("".concat(ID, "[0].textTwo"));
680
- expect(input.dataset.value).toEqual('charlie');
680
+ expect(input.value).toEqual('charlie');
681
681
 
682
682
  // Check the second item and confirm there is no hint
683
683
  itemTwo = c.childNodes[1];
@@ -704,7 +704,7 @@ describe('components.FormComponent.Collection', function () {
704
704
  expect(inputTwo.tagName).toEqual('INPUT');
705
705
  expect(inputTwo.classList).toContain('govuk-input');
706
706
  expect(inputTwo.id).toEqual("".concat(ID, "[1].").concat(TEXT_ID));
707
- expect(inputTwo.dataset.value).toEqual('beta');
707
+ expect(inputTwo.value).toEqual('beta');
708
708
 
709
709
  // Second item second component
710
710
  formGroupTwo = itemContainerTwo.childNodes[1];
@@ -721,7 +721,7 @@ describe('components.FormComponent.Collection', function () {
721
721
  expect(inputTwo.tagName).toEqual('INPUT');
722
722
  expect(inputTwo.classList).toContain('govuk-input');
723
723
  expect(inputTwo.id).toEqual("".concat(ID, "[1].textTwo"));
724
- expect(inputTwo.dataset.value).toEqual('delta');
724
+ expect(inputTwo.value).toEqual('delta');
725
725
  case 89:
726
726
  case "end":
727
727
  return _context12.stop();
@@ -5,11 +5,11 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.DEFAULT_CLASS = void 0;
8
+ var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
9
  var _react = _interopRequireDefault(require("react"));
9
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
11
  var _models = require("../../models");
11
12
  var _utils = _interopRequireDefault(require("../../utils"));
12
- var _cleanAttributes = _interopRequireDefault(require("../../utils/Component/cleanAttributes"));
13
13
  var _FormComponent = _interopRequireDefault(require("./FormComponent"));
14
14
  var _excluded = ["container", "value", "formData", "onChange", "wrap", "onTopLevelChange"];
15
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -61,8 +61,8 @@ var Container = function Container(_ref) {
61
61
  }), formData);
62
62
  };
63
63
  var classes = _utils.default.classBuilder(DEFAULT_CLASS, [], container.className);
64
- var htmlAttrs = (0, _cleanAttributes.default)(attrs);
65
- return /*#__PURE__*/_react.default.createElement("div", _extends({}, htmlAttrs, {
64
+ var cleanedAttrs = _copReactComponents.Utils.cleanHtmlAttributes(attrs);
65
+ return /*#__PURE__*/_react.default.createElement("div", _extends({}, cleanedAttrs, {
66
66
  className: classes(),
67
67
  id: container.id
68
68
  }), container.components && container.components.filter(shouldShow).map(function (component, index) {
@@ -76,7 +76,7 @@ describe('components.FormComponent.Container', function () {
76
76
  expect(input.tagName).toEqual('INPUT');
77
77
  expect(input.classList).toContain('govuk-input');
78
78
  expect(input.id).toEqual("".concat(ID, ".").concat(TEXT_ID));
79
- expect(input.dataset.value).toEqual(TEXT_VALUE);
79
+ expect(input.value).toEqual(TEXT_VALUE);
80
80
  case 22:
81
81
  case "end":
82
82
  return _context.stop();
@@ -130,7 +130,7 @@ describe('components.FormComponent.Container', function () {
130
130
  expect(input.tagName).toEqual('INPUT');
131
131
  expect(input.classList).toContain('govuk-input');
132
132
  expect(input.id).toEqual("".concat(ID, ".").concat(NESTED_ID, ".").concat(TEXT_ID));
133
- expect(input.dataset.value).toEqual(NESTED_TEXT_VALUE);
133
+ expect(input.value).toEqual(NESTED_TEXT_VALUE);
134
134
  case 25:
135
135
  case "end":
136
136
  return _context2.stop();
@@ -359,7 +359,7 @@ describe('components.FormComponent.Container', function () {
359
359
  input = formGroup.childNodes[2];
360
360
  expect(input.tagName).toEqual('DIV'); // Now readonly, so a DIV.
361
361
  expect(input.classList).toContain('hods-readonly'); // Now readonly, so hods-readonly
362
- expect(input.dataset.id).toEqual("".concat(ID, ".").concat(TEXT_ID));
362
+ expect(input.id).toEqual("".concat(ID, ".").concat(TEXT_ID));
363
363
  expect(input.textContent).toEqual(TEXT_VALUE);
364
364
  case 22:
365
365
  case "end":
@@ -47,7 +47,7 @@ describe('components', function () {
47
47
  expect(input.tagName).toEqual('INPUT');
48
48
  expect(input.classList).toContain('govuk-input');
49
49
  expect(input.id).toEqual(ID);
50
- expect(input.dataset.value).toEqual(VALUE);
50
+ expect(input.value).toEqual(VALUE);
51
51
  case 22:
52
52
  case "end":
53
53
  return _context.stop();
@@ -80,7 +80,7 @@ describe('components', function () {
80
80
  expect(input.tagName).toEqual('INPUT');
81
81
  expect(input.classList).toContain('govuk-input');
82
82
  expect(input.id).toEqual(ID);
83
- expect(input.dataset.value).toEqual(VALUE);
83
+ expect(input.value).toEqual(VALUE);
84
84
  case 10:
85
85
  case "end":
86
86
  return _context2.stop();
@@ -215,7 +215,7 @@ describe('components', function () {
215
215
  expect(input.tagName).toEqual('INPUT');
216
216
  expect(input.classList).toContain('govuk-input');
217
217
  expect(input.id).toEqual(ID);
218
- expect(input.dataset.value).toEqual(VALUE);
218
+ expect(input.value).toEqual(VALUE);
219
219
  case 23:
220
220
  case "end":
221
221
  return _context6.stop();
@@ -138,7 +138,7 @@ describe('components.FormPage', function () {
138
138
  expect(input.tagName).toEqual('INPUT');
139
139
  expect(input.classList).toContain('govuk-input');
140
140
  expect(input.id).toEqual(fieldId);
141
- expect(input.dataset.value).toEqual(val);
141
+ expect(input.value).toEqual(val);
142
142
  return input;
143
143
  };
144
144
  var checkAutoCompleteField = function checkAutoCompleteField(formGroup, fieldId, lbl, hnt, val) {
@@ -354,6 +354,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
354
354
  className: formState.page.className
355
355
  }), formState.page && !formState.cya && formState.page.collection && /*#__PURE__*/_react.default.createElement(_CollectionPage.default, {
356
356
  page: formState.page,
357
+ onCollectionChange: onChange,
357
358
  onAction: function onAction(action, patch, patchLabel) {
358
359
  (0, _onPageAction.default)(action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors);
359
360
  },
@@ -552,9 +552,13 @@ describe('components', function () {
552
552
  })));
553
553
  case 7:
554
554
  taskList = container.childNodes[0].childNodes[1];
555
+ taskList.childNodes.forEach(function (child) {
556
+ // eslint-disable-next-line no-console
557
+ console.log("taskList, child = ".concat(JSON.stringify(child.textContent)));
558
+ });
555
559
  expect(taskList.childNodes[5].textContent).not.toEqual("test text");
556
560
  expect(taskList.childNodes[5].classList).not.toContain('govuk-textarea');
557
- case 10:
561
+ case 11:
558
562
  case "end":
559
563
  return _context22.stop();
560
564
  }
@@ -589,13 +593,13 @@ describe('components', function () {
589
593
  })));
590
594
  case 5:
591
595
  taskList = container.childNodes[0].childNodes[1]; // Check statuses are correct
592
- firstTaskStatus = taskList.childNodes[3].childNodes[1].childNodes[1];
596
+ firstTaskStatus = taskList.childNodes[3].childNodes[0].childNodes[1];
593
597
  expect(firstTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.NOT_STARTED].label);
594
- secondTaskStatus = taskList.childNodes[3].childNodes[2].childNodes[1];
598
+ secondTaskStatus = taskList.childNodes[3].childNodes[1].childNodes[1];
595
599
  expect(secondTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.CANNOT_START_YET].label);
596
600
 
597
601
  // Launch first task
598
- firstTask = taskList.childNodes[3].childNodes[1].childNodes[0].childNodes[0];
602
+ firstTask = taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0];
599
603
  expect(firstTask.textContent).toEqual('Date, location and mode details');
600
604
  _react.fireEvent.click(firstTask, {});
601
605
 
@@ -660,9 +664,9 @@ describe('components', function () {
660
664
  expect(container.childNodes[0].childNodes[0].textContent).toEqual('Task List Form');
661
665
 
662
666
  // Check statuses are correct
663
- firstTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[1].childNodes[1];
667
+ firstTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[1];
664
668
  expect(firstTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.COMPLETE].label);
665
- secondTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[2].childNodes[1];
669
+ secondTaskStatus = container.childNodes[0].childNodes[1].childNodes[3].childNodes[1].childNodes[1];
666
670
  expect(secondTaskStatus.textContent).toEqual(_models.TaskStates.DETAILS[_models.TaskStates.TYPES.NOT_STARTED].label);
667
671
 
668
672
  // Check final data submitted to backend is as expected
@@ -703,7 +707,7 @@ describe('components', function () {
703
707
  })));
704
708
  case 4:
705
709
  taskList = container.childNodes[0].childNodes[1]; // Launch first task
706
- _react.fireEvent.click(taskList.childNodes[3].childNodes[1].childNodes[0].childNodes[0], {});
710
+ _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
707
711
 
708
712
  // Fill first page and navigate
709
713
  newPage = container.childNodes[0].childNodes[0];
@@ -736,7 +740,7 @@ describe('components', function () {
736
740
  _react.fireEvent.click(container.childNodes[0].childNodes[0].childNodes[5].childNodes[0], {});
737
741
 
738
742
  // Launch same task again
739
- _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[1].childNodes[0].childNodes[0], {});
743
+ _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
740
744
 
741
745
  // Should be at CYA page
742
746
  expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Check your answers');
@@ -786,7 +790,7 @@ describe('components', function () {
786
790
  })));
787
791
  case 5:
788
792
  taskList = container.childNodes[0].childNodes[1]; // Launch first task
789
- _react.fireEvent.click(taskList.childNodes[3].childNodes[1].childNodes[0].childNodes[0], {});
793
+ _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
790
794
 
791
795
  // Should be at Event Mode page
792
796
  expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Event Mode');
@@ -829,7 +833,7 @@ describe('components', function () {
829
833
  })));
830
834
  case 7:
831
835
  taskList = container.childNodes[0].childNodes[1]; // Launch first task
832
- _react.fireEvent.click(taskList.childNodes[3].childNodes[1].childNodes[0].childNodes[0], {});
836
+ _react.fireEvent.click(taskList.childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
833
837
 
834
838
  // Fill first page and navigate
835
839
  newPage = container.childNodes[0].childNodes[0];
@@ -860,7 +864,7 @@ describe('components', function () {
860
864
  _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {});
861
865
 
862
866
  // Launch same task again
863
- _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[1].childNodes[0].childNodes[0], {});
867
+ _react.fireEvent.click(container.childNodes[0].childNodes[1].childNodes[3].childNodes[0].childNodes[0].childNodes[0], {});
864
868
 
865
869
  // Should be on the first page
866
870
  expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Event Date');
@@ -947,7 +951,7 @@ describe('components', function () {
947
951
  })));
948
952
  case 7:
949
953
  taskList = container.childNodes[0].childNodes[1]; // Launch first task of second section
950
- firstTask = taskList.childNodes[5].childNodes[1].childNodes[0].childNodes[0];
954
+ firstTask = taskList.childNodes[5].childNodes[0].childNodes[0].childNodes[0];
951
955
  expect(firstTask.textContent).toEqual('People details');
952
956
  _react.fireEvent.click(firstTask, {});
953
957
 
@@ -101,7 +101,11 @@ var onCYAAction = function onCYAAction(setPagePoint, action, pages, validate, co
101
101
  onPageChange(_helpers.default.getNextPageId(type, pages, pageId, action, (_formState$page = formState.page) === null || _formState$page === void 0 ? void 0 : _formState$page.formData));
102
102
  }
103
103
  if (action.type === _models.PageAction.TYPES.CANCEL) {
104
- hooks.onCancel();
104
+ var formData = _utils.default.Format.form({
105
+ pages: pages,
106
+ components: components
107
+ }, _objectSpread({}, data), _models.EventTypes.CANCEL);
108
+ hooks.onCancel(formData);
105
109
  }
106
110
  };
107
111
  var _default = onCYAAction;
@@ -102,15 +102,15 @@ describe('components.FormRenderer.onCYAAction', function () {
102
102
  onFormComplete: function onFormComplete() {
103
103
  this.onFormCompleteCalls += 1;
104
104
  },
105
- onCancelCalls: 0,
106
- onCancel: function onCancel() {
107
- this.onCancelCalls += 1;
105
+ onCancelArgs: [],
106
+ onCancel: function onCancel(data) {
107
+ this.onCancelArgs.push(data);
108
108
  },
109
109
  reset: function reset() {
110
110
  this.onSubmitCalls = 0;
111
111
  this.onSubmitArgs = [];
112
112
  this.onFormCompleteCalls = 0;
113
- this.onCancelCalls = 0;
113
+ this.onCancelArgs = [];
114
114
  }
115
115
  };
116
116
  var setPagePointCalls = 0;
@@ -578,6 +578,9 @@ describe('components.FormRenderer.onCYAAction', function () {
578
578
  }
579
579
  });
580
580
  _onCYAAction.default.apply(void 0, Object.values(CUSTOM_ARGS));
581
- expect(MOCK_HOOKS.onCancelCalls).toEqual(1);
581
+ expect(MOCK_HOOKS.onCancelArgs.length).toEqual(1);
582
+ expect(MOCK_HOOKS.onCancelArgs[0]).toMatchObject({
583
+ id: 'formId'
584
+ });
582
585
  });
583
586
  });
@@ -20,11 +20,6 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
20
20
  // patchLabel captures non-ID values
21
21
  // for display purposes after submission.)
22
22
  var onPageAction = function onPageAction(action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors) {
23
- if (action.type === _models.PageAction.TYPES.CANCEL) {
24
- hooks.onCancel();
25
- return;
26
- }
27
- ;
28
23
  // Save a copy of data in case submit errors and we need to revert
29
24
  var preSubmitData = _objectSpread({}, data);
30
25
  var form = formState;
@@ -36,6 +31,14 @@ var onPageAction = function onPageAction(action, patch, patchLabel, hooks, data,
36
31
  // This should normally have no effect but will prevent issues
37
32
  // with validation if formData happens to have been wiped.
38
33
  form.page.formData = _objectSpread(_objectSpread({}, form.page.formData), _patch);
34
+
35
+ // Exposes form data to consuming application.
36
+ if (action.type === _models.PageAction.TYPES.CANCEL) {
37
+ hooks.onCancel(form.page.formData);
38
+ return;
39
+ }
40
+ ;
41
+
39
42
  // Check to see whether the action is able to proceed, which in
40
43
  // in the case of a submission will validate the fields in the page.
41
44
  if (_helpers.default.canActionProceed(action, form.page, validate.page)) {
@@ -121,15 +121,15 @@ describe('components.FormRenderer.onPageAction', function () {
121
121
  onFormComplete: function onFormComplete() {
122
122
  this.onFormCompleteCalls += 1;
123
123
  },
124
- onCancelCalls: 0,
125
- onCancel: function onCancel() {
126
- this.onCancelCalls += 1;
124
+ onCancelArgs: [],
125
+ onCancel: function onCancel(data) {
126
+ this.onCancelArgs.push(data);
127
127
  },
128
128
  reset: function reset() {
129
129
  this.onSubmitCalls = 0;
130
130
  this.onSubmitArgs = [];
131
131
  this.onFormCompleteCalls = 0;
132
- this.onCancelCalls = 0;
132
+ this.onCancelArgs = [];
133
133
  this.onActionCalls = 0;
134
134
  },
135
135
  onActionCalls: 0,
@@ -290,7 +290,8 @@ describe('components.FormRenderer.onPageAction', function () {
290
290
  action: ACTION
291
291
  });
292
292
  _onPageAction.default.apply(void 0, Object.values(CUSTOM_ARGS));
293
- expect(MOCK_HOOKS.onCancelCalls).toEqual(1);
293
+ expect(MOCK_HOOKS.onCancelArgs.length).toEqual(1);
294
+ expect(MOCK_HOOKS.onCancelArgs[0]).toMatchObject({});
294
295
  // Shouldn't get to the point of validation if
295
296
  // action is a cancel action.
296
297
  expect(_helpers.default.canActionProceedCalls).toEqual(0);
@@ -29,6 +29,7 @@ var SummaryList = function SummaryList(_ref) {
29
29
  className = _ref.className,
30
30
  attrs = _objectWithoutProperties(_ref, _excluded);
31
31
  var classes = _copReactComponents.Utils.classBuilder(classBlock, classModifiers, className);
32
+ var cleanedHtmlAttrs = _copReactComponents.Utils.cleanHtmlAttributes(attrs);
32
33
  var groupActionRow = null;
33
34
  if (isGroup) {
34
35
  var rowActions = rows.filter(function (r) {
@@ -38,7 +39,7 @@ var SummaryList = function SummaryList(_ref) {
38
39
  }
39
40
  return /*#__PURE__*/_react.default.createElement("div", {
40
41
  className: "group-of-rows"
41
- }, /*#__PURE__*/_react.default.createElement("dl", _extends({}, attrs, {
42
+ }, /*#__PURE__*/_react.default.createElement("dl", _extends({}, cleanedHtmlAttrs, {
42
43
  className: classes()
43
44
  }), rows.map(function (row) {
44
45
  var key = "".concat(row.pageId, "_").concat(row.full_path || row.fieldId);
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = exports.DEFAULT_INCOMPLETE_TITLE = exports.DEFAULT_CLASS = void 0;
8
+ var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
10
  var _react = _interopRequireWildcard(require("react"));
10
- var _copReactComponents = require("@ukhomeoffice/cop-react-components");
11
11
  var _models = require("../../models");
12
12
  var _Task = _interopRequireDefault(require("./Task"));
13
13
  var _showComponent = _interopRequireDefault(require("../../utils/Component/showComponent"));
@@ -44,7 +44,7 @@ var TaskList = function TaskList(_ref) {
44
44
  formData = _ref.formData,
45
45
  attrs = _objectWithoutProperties(_ref, _excluded);
46
46
  var classes = _copReactComponents.Utils.classBuilder(classBlock, classModifiers, className);
47
-
47
+ var cleanedHtmlAttrs = _copReactComponents.Utils.cleanHtmlAttributes(attrs);
48
48
  // TODO state will be retrieved from a document in S3 rather than given in the component definition, covered under COP-9885
49
49
  var _sections$filter$redu = sections.filter(function (section) {
50
50
  return !section.skipped;
@@ -68,9 +68,8 @@ var TaskList = function TaskList(_ref) {
68
68
  onTaskAction(task);
69
69
  }
70
70
  };
71
- return /*#__PURE__*/_react.default.createElement("div", _extends({
72
- id: id
73
- }, attrs, {
71
+ return /*#__PURE__*/_react.default.createElement("div", _extends({}, cleanedHtmlAttrs, {
72
+ id: id,
74
73
  className: classes()
75
74
  }), refNumber && refTitle && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", {
76
75
  className: "govuk-body govuk-!-margin-bottom-0"
@@ -100,9 +99,9 @@ var TaskList = function TaskList(_ref) {
100
99
  key: "".concat(section.name)
101
100
  }, /*#__PURE__*/_react.default.createElement("h2", {
102
101
  className: classes('section')
103
- }, sections.length > 1 ? "".concat(index + 1, ". ") : '', section.name), /*#__PURE__*/_react.default.createElement("ol", {
102
+ }, sections.length > 1 ? "".concat(index + 1, ". ") : '', section.name), section.label && /*#__PURE__*/_react.default.createElement(_copReactComponents.Hint, null, section.label), /*#__PURE__*/_react.default.createElement("ol", {
104
103
  className: classes('items')
105
- }, /*#__PURE__*/_react.default.createElement(_copReactComponents.Hint, null, section.label ? section.label : ''), section.tasks.filter(function (task) {
104
+ }, section.tasks.filter(function (task) {
106
105
  return task.state !== _models.TaskStates.TYPES.SKIPPED;
107
106
  }).map(function (task) {
108
107
  return /*#__PURE__*/_react.default.createElement(_Task.default, {
@@ -59,16 +59,18 @@ describe('components', function () {
59
59
  container = _render.container;
60
60
  var childNodes = container.childNodes;
61
61
  expect(childNodes.length).toEqual(1);
62
- expect(childNodes[0].childNodes.length).toEqual(8);
63
- var _childNodes$0$childNo = _slicedToArray(childNodes[0].childNodes, 8),
62
+ expect(childNodes[0].childNodes.length).toEqual(10);
63
+ var _childNodes$0$childNo = _slicedToArray(childNodes[0].childNodes, 10),
64
64
  referenceHeading = _childNodes$0$childNo[0],
65
65
  referenceNumber = _childNodes$0$childNo[1],
66
66
  incompleteForm = _childNodes$0$childNo[2],
67
67
  numComplete = _childNodes$0$childNo[3],
68
68
  subSectionOneHeading = _childNodes$0$childNo[4],
69
- subSectionOneList = _childNodes$0$childNo[5],
70
- subSectionTwoHeading = _childNodes$0$childNo[6],
71
- subSectionTwoList = _childNodes$0$childNo[7];
69
+ subSectionOneLabel = _childNodes$0$childNo[5],
70
+ subSectionOneList = _childNodes$0$childNo[6],
71
+ subSectionTwoHeading = _childNodes$0$childNo[7],
72
+ subSectionTwoLabel = _childNodes$0$childNo[8],
73
+ subSectionTwoList = _childNodes$0$childNo[9];
72
74
  expect(referenceHeading).toMatchObject({
73
75
  tagName: 'P',
74
76
  textContent: 'COP reference number'
@@ -89,16 +91,14 @@ describe('components', function () {
89
91
  tagName: 'H2',
90
92
  textContent: '1. These are your tasks'
91
93
  });
92
- expect(subSectionOneList.childNodes.length).toEqual(4);
94
+ expect(subSectionOneLabel.textContent).toEqual('This is the label for your first tasks');
95
+ expect(subSectionOneList.childNodes.length).toEqual(3);
93
96
  expect(subSectionTwoHeading).toMatchObject({
94
97
  tagName: 'H2',
95
98
  textContent: '2. These are your extra bonus tasks'
96
99
  });
97
- expect(subSectionTwoList.childNodes.length).toEqual(4);
98
- var subSectionOneLabel = childNodes[0].childNodes[5].firstChild;
99
- expect(subSectionOneLabel.textContent).toEqual('This is the label for your first tasks');
100
- var subSectionTwoLabel = childNodes[0].childNodes[7].firstChild;
101
100
  expect(subSectionTwoLabel.textContent).toEqual('This is the label for your extra tasks');
101
+ expect(subSectionTwoList.childNodes.length).toEqual(3);
102
102
  });
103
103
  it('should not show incomplete title if form is complete', function () {
104
104
  var COP_REF = '123';
@@ -364,9 +364,9 @@ describe('components', function () {
364
364
  })),
365
365
  container = _render7.container;
366
366
  var taskList = container.childNodes[0].childNodes[5].childNodes;
367
- var firstTask = taskList[1].childNodes[0].childNodes[0];
368
- var secondTask = taskList[2].childNodes[0].childNodes[0];
369
- var thirdTask = taskList[3].childNodes[0].childNodes[0];
367
+ var firstTask = taskList[0].childNodes[0].childNodes[0];
368
+ var secondTask = taskList[1].childNodes[0].childNodes[0];
369
+ var thirdTask = taskList[2].childNodes[0].childNodes[0];
370
370
  _react.fireEvent.click(firstTask.childNodes[0]);
371
371
  expect(ON_CLICK_CALLS[0]).toEqual({
372
372
  pages: ['pageOne'],
@@ -56,7 +56,7 @@ var DEFAULT_HOOKS = {
56
56
  return errors;
57
57
  },
58
58
  // Returns the list of errors already found in FR by default.
59
- onCancel: function onCancel() {} // Consuming application must provide function to action, else this does nothing.
59
+ onCancel: function onCancel(data) {} // Consuming application must provide function to action, else this does nothing.
60
60
  };
61
61
 
62
62
  var ALLOWED_HOOKS = Object.keys(DEFAULT_HOOKS);
@@ -52,8 +52,7 @@ var useRefData = function useRefData(component, formData) {
52
52
  setStatus = _useState4[1];
53
53
  (0, _react.useEffect)(function () {
54
54
  if (!url) {
55
- var _component$data;
56
- if ((_component$data = component.data) !== null && _component$data !== void 0 && _component$data.options) {
55
+ if (component.data && component.data.options) {
57
56
  setData(_Data.default.refData.toOptions(component.data.options, component.item));
58
57
  }
59
58
  setStatus(STATUS_COMPLETE);
@@ -10,7 +10,6 @@ var TYPE_CALCULATION = 'calculation';
10
10
  var TYPE_CHECKBOXES = 'checkboxes';
11
11
  var TYPE_COLLECTION = 'collection';
12
12
  var TYPE_CONTAINER = 'container';
13
- var TYPE_DATA = 'data';
14
13
  var TYPE_DATE = 'date';
15
14
  var TYPE_DETAILS = 'details';
16
15
  var TYPE_EMAIL = 'email';
@@ -35,7 +34,6 @@ var ComponentTypes = {
35
34
  CHECKBOXES: TYPE_CHECKBOXES,
36
35
  COLLECTION: TYPE_COLLECTION,
37
36
  CONTAINER: TYPE_CONTAINER,
38
- DATA: TYPE_DATA,
39
37
  DATE: TYPE_DATE,
40
38
  DETAILS: TYPE_DETAILS,
41
39
  EMAIL: TYPE_EMAIL,
@@ -6,9 +6,11 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var TYPE_BLUR = 'blur';
8
8
  var TYPE_SUBMIT = 'submit';
9
+ var TYPE_CANCEL = 'cancel';
9
10
  var EventTypes = {
10
11
  BLUR: TYPE_BLUR,
11
- SUBMIT: TYPE_SUBMIT
12
+ SUBMIT: TYPE_SUBMIT,
13
+ CANCEL: TYPE_CANCEL
12
14
  };
13
15
  var _default = EventTypes;
14
16
  exports.default = _default;
@@ -9,6 +9,7 @@ var _Component = _interopRequireDefault(require("../Component"));
9
9
  var _Container = _interopRequireDefault(require("../Container"));
10
10
  var _getSourceData = _interopRequireDefault(require("../Data/getSourceData"));
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ /* eslint-disable no-console */
12
13
  // Local imports
13
14
 
14
15
  var EXCLUDE_FROM_CYA = [_models.ComponentTypes.ALERT, _models.ComponentTypes.HEADING, _models.ComponentTypes.HTML, _models.ComponentTypes.INSET_TEXT];
@@ -80,17 +80,6 @@ var getCalculation = function getCalculation(config) {
80
80
  readonly: true
81
81
  }));
82
82
  };
83
- var getData = function getData(config) {
84
- var options = [];
85
- _Data.default.getOptions(config, function (val) {
86
- options = val;
87
- });
88
- var attrs = (0, _cleanAttributes.default)(config);
89
- var text = JSON.stringify(options, null, 2);
90
- return /*#__PURE__*/_react.default.createElement(_copReactComponents.TextArea, _extends({}, attrs, {
91
- value: text
92
- }));
93
- };
94
83
  var getDate = function getDate(config) {
95
84
  var attrs = (0, _cleanAttributes.default)(config);
96
85
  return /*#__PURE__*/_react.default.createElement(_copReactComponents.DateInput, attrs);
@@ -231,8 +220,6 @@ var getComponentByType = function getComponentByType(config) {
231
220
  return getParagraph(config);
232
221
  case _models.ComponentTypes.LIST:
233
222
  return getList(config);
234
- case _models.ComponentTypes.DATA:
235
- return getData(config);
236
223
  default:
237
224
  {
238
225
  return null;
@@ -148,7 +148,7 @@ describe('utils.Component.get', function () {
148
148
  expect(formGroup.classList).toContain('govuk-form-group');
149
149
  expect(input.tagName).toEqual('DIV');
150
150
  expect(input.classList).toContain('hods-readonly');
151
- expect(input.dataset.id).toEqual(ID);
151
+ expect(input.id).toEqual(ID);
152
152
  expect("".concat(COMPONENT.formData[FIELD_ID])).toEqual(test.result);
153
153
  case 13:
154
154
  case "end":
@@ -258,7 +258,7 @@ describe('utils.Component.get', function () {
258
258
  expect(formGroup.classList).toContain('govuk-form-group');
259
259
  expect(input.tagName).toEqual('DIV');
260
260
  expect(input.classList).toContain('hods-readonly');
261
- expect(input.dataset.id).toEqual(ID);
261
+ expect(input.id).toEqual(ID);
262
262
  expect(error).toBeCalledTimes(1);
263
263
  expect(error).toBeCalledWith(test.error);
264
264
  });
@@ -51,7 +51,7 @@ describe('utils.Component.get', function () {
51
51
  expect(input.tagName).toEqual('INPUT');
52
52
  expect(input.classList).toContain('govuk-input');
53
53
  expect(input.id).toEqual(ID);
54
- expect(input.dataset.value).toEqual(VALUE);
54
+ expect(input.value).toEqual(VALUE);
55
55
  child2 = container.childNodes[1];
56
56
  expect(child2.childNodes[0].childNodes.length).toEqual(3);
57
57
  expect(child2.classList).toContain('govuk-form-group');
@@ -62,9 +62,9 @@ describe('utils.Component.get', function () {
62
62
  expect(input2.tagName).toEqual('DIV');
63
63
  expect(input2.classList).toContain('govuk-date-input');
64
64
  expect(input2.id).toEqual(ID2);
65
- expect(input2.childNodes[0].childNodes[1].dataset.value).toEqual('1');
66
- expect(input2.childNodes[1].childNodes[1].dataset.value).toEqual('2');
67
- expect(input2.childNodes[2].childNodes[1].dataset.value).toEqual('2022');
65
+ expect(input2.childNodes[0].childNodes[1].value).toEqual('1');
66
+ expect(input2.childNodes[1].childNodes[1].value).toEqual('2');
67
+ expect(input2.childNodes[2].childNodes[1].value).toEqual('2022');
68
68
  case 35:
69
69
  case "end":
70
70
  return _context.stop();
@@ -133,7 +133,7 @@ describe('utils.Component.get', function () {
133
133
  expect(input.tagName).toEqual('INPUT');
134
134
  expect(input.classList).toContain('govuk-input');
135
135
  expect(input.id).toEqual("".concat(CONTAINER_ID, ".").concat(FIELD_ID));
136
- expect(input.dataset.value).toEqual(VALUE);
136
+ expect(input.value).toEqual(VALUE);
137
137
  case 19:
138
138
  case "end":
139
139
  return _context3.stop();
@@ -172,7 +172,7 @@ describe('utils.Component.get', function () {
172
172
  expect(input.tagName).toEqual('INPUT');
173
173
  expect(input.classList).toContain('govuk-input');
174
174
  expect(input.id).toEqual("".concat(COLLECTION_ID, "[0].").concat(FIELD_ID));
175
- expect(input.dataset.value).toEqual(VALUE);
175
+ expect(input.value).toEqual(VALUE);
176
176
  case 19:
177
177
  case "end":
178
178
  return _context4.stop();
@@ -10,6 +10,19 @@ var _setupConditions = _interopRequireDefault(require("./setupConditions"));
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
  // Local imports
12
12
 
13
+ var testConditions = function testConditions(conditions, data) {
14
+ var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'and';
15
+ var arr = Array.isArray(conditions) ? conditions : [conditions];
16
+ var testCallback = function testCallback(condition) {
17
+ if (Array.isArray(condition.conditions)) {
18
+ return testConditions(condition.conditions, data, condition.type);
19
+ }
20
+ var sourceDataValue = _Data.default.getSource(data, condition.field);
21
+ return (0, _meetsCondition.default)(condition, sourceDataValue, data);
22
+ };
23
+ return type === 'and' ? arr.every(testCallback) : arr.some(testCallback);
24
+ };
25
+
13
26
  /**
14
27
  * Evaluates all condition(s) on a page, container, or component.
15
28
  * @param {object} options The container to consider.
@@ -19,11 +32,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
19
32
  var meetsAllConditions = function meetsAllConditions(options, data) {
20
33
  var conditions = (0, _setupConditions.default)(options);
21
34
  if (conditions) {
22
- var arr = Array.isArray(conditions) ? conditions : [conditions];
23
- return arr.every(function (condition) {
24
- var sourceDataValue = _Data.default.getSource(data, condition.field);
25
- return (0, _meetsCondition.default)(condition, sourceDataValue, data);
26
- });
35
+ return testConditions(conditions, data);
27
36
  }
28
37
  return true;
29
38
  };
@@ -58,4 +58,38 @@ describe('utils.Condition.meetsAllConditions', function () {
58
58
  }];
59
59
  expect((0, _meetsAllConditions.default)(CONDITIONS, DATA)).toBeFalsy();
60
60
  });
61
+ it('should handle nested conditions', function () {
62
+ var VALID_DATA = {
63
+ shouldBeAlpha: 'alpha',
64
+ shouldBeBravo: 'bravo',
65
+ canBeCharlieOrDelta: 'charlie'
66
+ };
67
+ var INVALID_DATA = {
68
+ shouldBeAlpha: 'alpha',
69
+ shouldBeBravo: 'bravo',
70
+ canBeCharlieOrDelta: 'echo'
71
+ };
72
+ var CONDITIONS = [{
73
+ type: 'or',
74
+ conditions: [{
75
+ field: 'canBeCharlieOrDelta',
76
+ op: 'eq',
77
+ value: 'charlie'
78
+ }, {
79
+ field: 'canBeCharlieOrDelta',
80
+ op: 'eq',
81
+ value: 'delta'
82
+ }]
83
+ }, {
84
+ field: 'shouldBeAlpha',
85
+ op: 'eq',
86
+ value: 'alpha'
87
+ }, {
88
+ field: 'shouldBeBravo',
89
+ op: 'eq',
90
+ value: 'bravo'
91
+ }];
92
+ expect((0, _meetsAllConditions.default)(CONDITIONS, VALID_DATA)).toBeTruthy();
93
+ expect((0, _meetsAllConditions.default)(CONDITIONS, INVALID_DATA)).toBeFalsy();
94
+ });
61
95
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "5.13.3-bravo",
3
+ "version": "5.15.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",
@@ -16,7 +16,7 @@
16
16
  "post-compile": "rimraf dist/*.test.* dist/**/*.test.* dist/**/*.stories.* dist/docs dist/assets"
17
17
  },
18
18
  "dependencies": {
19
- "@ukhomeoffice/cop-react-components": "^3.4.2",
19
+ "@ukhomeoffice/cop-react-components": "^3.5.0",
20
20
  "axios": "^0.23.0",
21
21
  "dayjs": "^1.11.0",
22
22
  "govuk-frontend": "^4.3.1",