@ukhomeoffice/cop-react-form-renderer 4.29.0-alpha → 4.30.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/CheckYourAnswers.js +5 -23
  2. package/dist/components/CollectionPage/CollectionPage.test.js +9 -9
  3. package/dist/components/FormComponent/Collection.test.js +7 -7
  4. package/dist/components/FormComponent/Container.test.js +14 -14
  5. package/dist/components/FormComponent/FormComponent.test.js +6 -6
  6. package/dist/components/FormPage/FormPage.test.js +8 -8
  7. package/dist/components/FormRenderer/FormRenderer.js +7 -64
  8. package/dist/components/FormRenderer/FormRenderer.test.js +17 -75
  9. package/dist/components/FormRenderer/handlers/navigate.js +2 -2
  10. package/dist/models/PageAction.js +1 -7
  11. package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +4 -3
  12. package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +2 -2
  13. package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +4 -3
  14. package/dist/utils/Component/getComponentTests/getComponent.date.test.js +7 -7
  15. package/dist/utils/Component/getComponentTests/getComponent.email.test.js +3 -3
  16. package/dist/utils/Component/getComponentTests/getComponent.file.test.js +3 -3
  17. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +11 -11
  18. package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +3 -3
  19. package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +3 -3
  20. package/dist/utils/Component/getComponentTests/getComponent.select.test.js +1 -7
  21. package/dist/utils/Component/getComponentTests/getComponent.text.test.js +3 -3
  22. package/dist/utils/Component/getComponentTests/getComponent.textarea.test.js +1 -1
  23. package/dist/utils/Component/getComponentTests/getComponent.time.test.js +4 -4
  24. package/dist/utils/Validate/validateComponent.js +3 -2
  25. package/dist/utils/Validate/validateEmail.js +9 -1
  26. package/dist/utils/Validate/validateEmail.test.js +8 -0
  27. package/package.json +2 -2
  28. package/dist/json/multiQuestionTaskList.json +0 -275
  29. package/dist/json/multiQuestionTaskListData.json +0 -39
@@ -36,10 +36,6 @@ var _taskList = _interopRequireDefault(require("../../json/taskList.json"));
36
36
 
37
37
  var _firstForm = _interopRequireDefault(require("../../json/firstForm.json"));
38
38
 
39
- var _multiQuestionTaskListData = _interopRequireDefault(require("../../json/multiQuestionTaskListData.json"));
40
-
41
- var _multiQuestionTaskList = _interopRequireDefault(require("../../json/multiQuestionTaskList.json"));
42
-
43
39
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
44
40
 
45
41
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -638,21 +634,21 @@ describe('components', function () {
638
634
  newPage = container.childNodes[0].childNodes[0];
639
635
  expect(newPage.childNodes[0].textContent).toEqual('Event Date');
640
636
 
641
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[0].childNodes[1], {
637
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0].childNodes[1], {
642
638
  target: {
643
639
  name: 'date-day',
644
640
  value: '7'
645
641
  }
646
642
  });
647
643
 
648
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[1].childNodes[1], {
644
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[1].childNodes[0].childNodes[1], {
649
645
  target: {
650
646
  name: 'date-month',
651
647
  value: '7'
652
648
  }
653
649
  });
654
650
 
655
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[2].childNodes[1], {
651
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[2].childNodes[0].childNodes[1], {
656
652
  target: {
657
653
  name: 'date-year',
658
654
  value: '2022'
@@ -667,7 +663,7 @@ describe('components', function () {
667
663
  newPage = container.childNodes[0].childNodes[0];
668
664
  expect(newPage.childNodes[0].textContent).toEqual('Event Mode');
669
665
 
670
- _react.fireEvent.click(newPage.childNodes[1].childNodes[2].childNodes[0].childNodes[0], {});
666
+ _react.fireEvent.click(newPage.childNodes[1].childNodes[0].childNodes[1], {});
671
667
 
672
668
  continueButton = newPage.childNodes[2].childNodes[0];
673
669
 
@@ -675,17 +671,17 @@ describe('components', function () {
675
671
 
676
672
 
677
673
  cyaPageChange = container.childNodes[0].childNodes[0];
678
- modeChangeLink = cyaPageChange.childNodes[4].childNodes[0].childNodes[0].childNodes[2].childNodes[0].childNodes[0];
674
+ modeChangeLink = cyaPageChange.childNodes[0].childNodes[1].childNodes[0].childNodes[0];
679
675
 
680
676
  _react.fireEvent.click(modeChangeLink, {});
681
677
 
682
678
  changePage = container.childNodes[0].childNodes[0];
683
- expect(changePage.childNodes[0].textContent).toEqual('Event Mode'); // Click on radio for 'Air'
679
+ expect(changePage.childNodes[1].textContent).toEqual('Event Mode'); // Click on radio for 'Air'
684
680
 
685
- _react.fireEvent.click(changePage.childNodes[1].childNodes[2].childNodes[1].childNodes[0], {}); // Continue again to CYA page
681
+ _react.fireEvent.click(changePage.childNodes[2].childNodes[0].childNodes[3].childNodes[1].childNodes[0]); // Continue again to CYA page
686
682
 
687
683
 
688
- continueButton = changePage.childNodes[2].childNodes[0];
684
+ continueButton = changePage.childNodes[3].childNodes[0];
689
685
 
690
686
  _react.fireEvent.click(continueButton, {}); //Continue on from CYA page
691
687
 
@@ -756,21 +752,21 @@ describe('components', function () {
756
752
 
757
753
  newPage = container.childNodes[0].childNodes[0];
758
754
 
759
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[0].childNodes[1], {
755
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0].childNodes[1], {
760
756
  target: {
761
757
  name: 'date-day',
762
758
  value: '7'
763
759
  }
764
760
  });
765
761
 
766
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[1].childNodes[1], {
762
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[1].childNodes[0].childNodes[1], {
767
763
  target: {
768
764
  name: 'date-month',
769
765
  value: '7'
770
766
  }
771
767
  });
772
768
 
773
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[2].childNodes[1], {
769
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[2].childNodes[0].childNodes[1], {
774
770
  target: {
775
771
  name: 'date-year',
776
772
  value: '2022'
@@ -782,7 +778,7 @@ describe('components', function () {
782
778
 
783
779
  newPage = container.childNodes[0].childNodes[0];
784
780
 
785
- _react.fireEvent.click(newPage.childNodes[1].childNodes[2].childNodes[0].childNodes[0], {});
781
+ _react.fireEvent.click(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0], {});
786
782
 
787
783
  _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {}); //Continue on from CYA page
788
784
 
@@ -847,21 +843,21 @@ describe('components', function () {
847
843
 
848
844
  newPage = container.childNodes[0].childNodes[0];
849
845
 
850
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[0].childNodes[1], {
846
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0].childNodes[1], {
851
847
  target: {
852
848
  name: 'date-day',
853
849
  value: '7'
854
850
  }
855
851
  });
856
852
 
857
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[1].childNodes[1], {
853
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[1].childNodes[0].childNodes[1], {
858
854
  target: {
859
855
  name: 'date-month',
860
856
  value: '7'
861
857
  }
862
858
  });
863
859
 
864
- _react.fireEvent.change(newPage.childNodes[1].childNodes[2].childNodes[2].childNodes[1], {
860
+ _react.fireEvent.change(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[2].childNodes[0].childNodes[1], {
865
861
  target: {
866
862
  name: 'date-year',
867
863
  value: '2022'
@@ -871,9 +867,9 @@ describe('components', function () {
871
867
  _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {}); // Fill second page
872
868
 
873
869
 
874
- newPage = container.childNodes[0].childNodes[0];
870
+ newPage = container.childNodes[0].childNodes[0]; // expect(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0]).toEqual('');
875
871
 
876
- _react.fireEvent.click(newPage.childNodes[1].childNodes[2].childNodes[0].childNodes[0], {});
872
+ _react.fireEvent.click(newPage.childNodes[1].childNodes[0].childNodes[2].childNodes[0].childNodes[0], {});
877
873
 
878
874
  _react.fireEvent.click(newPage.childNodes[2].childNodes[0], {}); // Launch same task again
879
875
 
@@ -1006,59 +1002,5 @@ describe('components', function () {
1006
1002
  }
1007
1003
  }, _callee28);
1008
1004
  })));
1009
- it('should display CYSA page when resuming an in-progress form, with Action buttons replaced with a single Continue button', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee30() {
1010
- var ON_SUBMIT, HOOKS, taskList;
1011
- return regeneratorRuntime.wrap(function _callee30$(_context30) {
1012
- while (1) {
1013
- switch (_context30.prev = _context30.next) {
1014
- case 0:
1015
- ON_SUBMIT = function ON_SUBMIT(type, payload, onSuccess, onError) {
1016
- onSuccess();
1017
- };
1018
-
1019
- HOOKS = {
1020
- onSubmit: ON_SUBMIT
1021
- };
1022
- _context30.next = 4;
1023
- return (0, _testUtils.act)( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee29() {
1024
- return regeneratorRuntime.wrap(function _callee29$(_context29) {
1025
- while (1) {
1026
- switch (_context29.prev = _context29.next) {
1027
- case 0:
1028
- (0, _reactDom.render)( /*#__PURE__*/_react2.default.createElement(_FormRenderer.default, _extends({}, _multiQuestionTaskList.default, {
1029
- data: _multiQuestionTaskListData.default,
1030
- hooks: HOOKS
1031
- })), container);
1032
-
1033
- case 1:
1034
- case "end":
1035
- return _context29.stop();
1036
- }
1037
- }
1038
- }, _callee29);
1039
- })));
1040
-
1041
- case 4:
1042
- taskList = container.childNodes[0].childNodes[1]; //Resume the first task
1043
-
1044
- _react.fireEvent.click(taskList.childNodes[5].childNodes[1].childNodes[0].childNodes[0], {}); // Verify the correct title has been rendered, and the Action buttons have been changed to Continue Only
1045
-
1046
-
1047
- expect(container.childNodes[0].childNodes[0].childNodes[0].textContent).toEqual('Check your saved answers');
1048
- expect(container.childNodes[0].childNodes[0].childNodes[5].childNodes[0].childNodes[0].textContent).toEqual('Continue'); // Click Continue
1049
-
1050
- _react.fireEvent.click(container.childNodes[0].childNodes[0].childNodes[5].childNodes[0].childNodes[0], {}); // Verify that Save & Continue / Save and Return Later buttons are restored on the next screen
1051
-
1052
-
1053
- expect(container.childNodes[0].childNodes[0].childNodes[6].childNodes[0].textContent).toEqual('Save and continue');
1054
- expect(container.childNodes[0].childNodes[0].childNodes[6].childNodes[1].textContent).toEqual('Save and return later');
1055
-
1056
- case 11:
1057
- case "end":
1058
- return _context30.stop();
1059
- }
1060
- }
1061
- }, _callee30);
1062
- })));
1063
1005
  });
1064
1006
  });
@@ -16,11 +16,11 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
16
16
  * @param {string} currentPageId The current pageId.
17
17
  * @param {Function} onNavigate The handler to call if the pageId is different to the currentPageId.
18
18
  */
19
- var navigate = function navigate(action, currentPageId, onNavigate, state) {
19
+ var navigate = function navigate(action, currentPageId, onNavigate) {
20
20
  var pageId = (0, _getPageId.default)(action, currentPageId);
21
21
 
22
22
  if (pageId !== currentPageId) {
23
- onNavigate(pageId, state);
23
+ onNavigate(pageId);
24
24
  }
25
25
  };
26
26
 
@@ -14,7 +14,6 @@ var TYPE_COLLECTION_ADD = 'collectionAdd';
14
14
  var TYPE_COLLECTION_DUPLICATE = 'collectionDuplicate';
15
15
  var TYPE_COLLECTION_REMOVE = 'collectionRemove';
16
16
  var TYPE_NAVIGATE = 'navigate';
17
- var TYPE_CONTINUE = 'continue';
18
17
  var TYPE_SAVE_AND_CONTINUE = 'saveAndContinue';
19
18
  var TYPE_SAVE_AND_NAVIGATE = 'saveAndNavigate';
20
19
  var TYPE_SAVE_AND_RETURN = 'saveAndReturn';
@@ -25,7 +24,6 @@ var PageActionTypes = {
25
24
  COLLECTION_DUPLICATE: TYPE_COLLECTION_DUPLICATE,
26
25
  COLLECTION_REMOVE: TYPE_COLLECTION_REMOVE,
27
26
  NAVIGATE: TYPE_NAVIGATE,
28
- CONTINUE: TYPE_CONTINUE,
29
27
  SAVE_AND_CONTINUE: TYPE_SAVE_AND_CONTINUE,
30
28
  SAVE_AND_NAVIGATE: TYPE_SAVE_AND_NAVIGATE,
31
29
  SAVE_AND_RETURN: TYPE_SAVE_AND_RETURN,
@@ -37,11 +35,7 @@ var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPage
37
35
  validate: false,
38
36
  label: 'Cancel',
39
37
  classModifiers: 'secondary'
40
- }), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_ADD, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_DUPLICATE, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_REMOVE, undefined), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_CONTINUE, {
41
- type: TYPE_CONTINUE,
42
- validate: true,
43
- label: 'Continue'
44
- }), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
38
+ }), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_ADD, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_DUPLICATE, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_REMOVE, undefined), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
45
39
  type: TYPE_SAVE_AND_CONTINUE,
46
40
  validate: true,
47
41
  label: 'Save and continue'
@@ -37,11 +37,12 @@ describe('utils.Component.get', function () {
37
37
  var autocompleteWrapper = undefined;
38
38
  var autocomplete = undefined;
39
39
  var autocompleteInput = undefined;
40
- formGroup.childNodes.forEach(function (node) {
40
+ var fieldSet = formGroup.childNodes[0];
41
+ fieldSet.childNodes.forEach(function (node) {
41
42
  // Check if it's an element.
42
43
  if (node instanceof Element) {
43
- if (node.tagName === 'LABEL') {
44
- label = node;
44
+ if (node.tagName === 'LEGEND') {
45
+ label = node.childNodes[0];
45
46
  } else if (node.classList.contains('hods-autocomplete__outer-wrapper')) {
46
47
  autocompleteWrapper = node;
47
48
  var autocompleteInner = node.childNodes[0];
@@ -154,7 +154,7 @@ describe('utils.Component.get', function () {
154
154
  _getAllByTestId = (0, _react.getAllByTestId)(container, ID), _getAllByTestId2 = _slicedToArray(_getAllByTestId, 2), formGroup = _getAllByTestId2[0], input = _getAllByTestId2[1];
155
155
  expect(formGroup.tagName).toEqual('DIV');
156
156
  expect(formGroup.classList).toContain('govuk-form-group');
157
- label = formGroup.childNodes[0];
157
+ label = formGroup.childNodes[0].childNodes[0].childNodes[0];
158
158
  expect(label.tagName).toEqual('LABEL');
159
159
  expect(label.classList).toContain('govuk-label');
160
160
  expect(label.textContent).toContain(LABEL);
@@ -268,7 +268,7 @@ describe('utils.Component.get', function () {
268
268
 
269
269
  expect(formGroup.tagName).toEqual('DIV');
270
270
  expect(formGroup.classList).toContain('govuk-form-group');
271
- var label = formGroup.childNodes[0];
271
+ var label = formGroup.childNodes[0].childNodes[0].childNodes[0];
272
272
  expect(label.tagName).toEqual('LABEL');
273
273
  expect(label.classList).toContain('govuk-label');
274
274
  expect(label.textContent).toContain(LABEL);
@@ -60,12 +60,13 @@ describe('utils.Component.get', function () {
60
60
 
61
61
  expect(formGroup.tagName).toEqual('DIV');
62
62
  expect(formGroup.classList).toContain('govuk-form-group');
63
+ var fieldSet = formGroup.childNodes[0];
63
64
  var label = undefined;
64
- formGroup.childNodes.forEach(function (node) {
65
+ fieldSet.childNodes.forEach(function (node) {
65
66
  // Check if it's an element.
66
67
  if (node instanceof Element) {
67
- if (node.tagName === 'LABEL') {
68
- label = node;
68
+ if (node.tagName === 'LEGEND') {
69
+ label = node.childNodes[0];
69
70
  }
70
71
  }
71
72
  });
@@ -50,7 +50,7 @@ describe('utils.Component.get', function () {
50
50
 
51
51
  expect(formGroup.tagName).toEqual('DIV');
52
52
  expect(formGroup.classList).toContain('govuk-form-group');
53
- var label = formGroup.childNodes[0];
53
+ var label = formGroup.childNodes[0].childNodes[0].childNodes[0];
54
54
  expect(label.innerHTML).toContain(LABEL);
55
55
  expect(label.getAttribute('for')).toEqual(ID);
56
56
  expect(dateinput.tagName).toEqual('DIV');
@@ -59,31 +59,31 @@ describe('utils.Component.get', function () {
59
59
  var dayitem = dateinput.childNodes[0];
60
60
  expect(dayitem.tagName).toEqual('DIV');
61
61
  expect(dayitem.classList).toContain('govuk-date-input__item');
62
- var daylabel = dayitem.childNodes[0];
62
+ var daylabel = dayitem.childNodes[0].childNodes[0].childNodes[0];
63
63
  expect(daylabel.tagName).toEqual('LABEL');
64
64
  expect(daylabel.classList).toContain('govuk-label');
65
65
  expect(daylabel.textContent).toEqual('Day');
66
- var dayinput = dayitem.childNodes[1];
66
+ var dayinput = dayitem.childNodes[0].childNodes[1];
67
67
  expect(dayinput.tagName).toEqual('INPUT');
68
68
  expect(dayinput.id).toEqual("".concat(ID, "-day"));
69
69
  var monthitem = dateinput.childNodes[1];
70
70
  expect(monthitem.tagName).toEqual('DIV');
71
71
  expect(monthitem.classList).toContain('govuk-date-input__item');
72
- var monthlabel = monthitem.childNodes[0];
72
+ var monthlabel = monthitem.childNodes[0].childNodes[0].childNodes[0];
73
73
  expect(monthlabel.tagName).toEqual('LABEL');
74
74
  expect(monthlabel.classList).toContain('govuk-label');
75
75
  expect(monthlabel.textContent).toEqual('Month');
76
- var monthinput = monthitem.childNodes[1];
76
+ var monthinput = monthitem.childNodes[0].childNodes[1];
77
77
  expect(monthinput.tagName).toEqual('INPUT');
78
78
  expect(monthinput.id).toEqual("".concat(ID, "-month"));
79
79
  var yearitem = dateinput.childNodes[2];
80
80
  expect(yearitem.tagName).toEqual('DIV');
81
81
  expect(yearitem.classList).toContain('govuk-date-input__item');
82
- var yearlabel = yearitem.childNodes[0];
82
+ var yearlabel = yearitem.childNodes[0].childNodes[0].childNodes[0];
83
83
  expect(yearlabel.tagName).toEqual('LABEL');
84
84
  expect(yearlabel.classList).toContain('govuk-label');
85
85
  expect(yearlabel.textContent).toEqual('Year');
86
- var yearinput = yearitem.childNodes[1];
86
+ var yearinput = yearitem.childNodes[0].childNodes[1];
87
87
  expect(yearinput.tagName).toEqual('INPUT');
88
88
  expect(yearinput.id).toEqual("".concat(ID, "-year")); // Add something to the day and make sure it fires.
89
89
 
@@ -51,10 +51,10 @@ describe('utils.Component.get', function () {
51
51
  expect(formGroup.tagName).toEqual('DIV');
52
52
  expect(formGroup.classList).toContain('govuk-form-group');
53
53
  var label = undefined;
54
- formGroup.childNodes.forEach(function (node) {
54
+ formGroup.childNodes[0].childNodes.forEach(function (node) {
55
55
  // Check if it's an element.
56
- if (node instanceof Element && node.tagName === 'LABEL') {
57
- label = node;
56
+ if (node instanceof Element && node.tagName === 'LEGEND') {
57
+ label = node.childNodes[0];
58
58
  }
59
59
  });
60
60
  expect(label).toBeDefined();
@@ -53,10 +53,10 @@ describe('utils.Component.get', function () {
53
53
  expect(formGroup.tagName).toEqual('DIV');
54
54
  expect(formGroup.classList).toContain('govuk-form-group');
55
55
  var label = undefined;
56
- formGroup.childNodes.forEach(function (node) {
56
+ formGroup.childNodes[0].childNodes.forEach(function (node) {
57
57
  // Check if it's an element.
58
- if (node instanceof Element && node.tagName === 'LABEL') {
59
- label = node;
58
+ if (node instanceof Element && node.tagName === 'LEGEND') {
59
+ label = node.childNodes[0];
60
60
  }
61
61
  });
62
62
  expect(label).toBeDefined();
@@ -47,29 +47,29 @@ describe('utils.Component.get', function () {
47
47
  }];
48
48
  _renderWithValidation = (0, _setupTests.renderWithValidation)((0, _getComponent.getChildrenJsx)(PARENT_CONFIG, NESTED_CONFIG)), container = _renderWithValidation.container;
49
49
  child = container.childNodes[0];
50
- expect(child.childNodes.length).toEqual(3);
50
+ expect(child.childNodes[0].childNodes.length).toEqual(3);
51
51
  expect(child.classList).toContain('govuk-form-group');
52
52
  label = child.childNodes[0];
53
53
  expect(label).toBeDefined();
54
54
  expect(label.innerHTML).toContain(LABEL);
55
- input = child.childNodes[2];
55
+ input = child.childNodes[0].childNodes[2];
56
56
  expect(input.tagName).toEqual('INPUT');
57
57
  expect(input.classList).toContain('govuk-input');
58
58
  expect(input.id).toEqual(ID);
59
59
  expect(input.value).toEqual(VALUE);
60
60
  child2 = container.childNodes[1];
61
- expect(child2.childNodes.length).toEqual(3);
61
+ expect(child2.childNodes[0].childNodes.length).toEqual(3);
62
62
  expect(child2.classList).toContain('govuk-form-group');
63
63
  label2 = child2.childNodes[0];
64
64
  expect(label2).toBeDefined();
65
65
  expect(label2.innerHTML).toContain(LABEL2);
66
- input2 = child2.childNodes[2];
66
+ input2 = child2.childNodes[0].childNodes[2];
67
67
  expect(input2.tagName).toEqual('DIV');
68
68
  expect(input2.classList).toContain('govuk-date-input');
69
69
  expect(input2.id).toEqual(ID2);
70
- expect(input2.childNodes[0].childNodes[1].value).toEqual('1');
71
- expect(input2.childNodes[1].childNodes[1].value).toEqual('2');
72
- expect(input2.childNodes[2].childNodes[1].value).toEqual('2022');
70
+ expect(input2.childNodes[0].childNodes[0].childNodes[1].value).toEqual('1');
71
+ expect(input2.childNodes[1].childNodes[0].childNodes[1].value).toEqual('2');
72
+ expect(input2.childNodes[2].childNodes[0].childNodes[1].value).toEqual('2022');
73
73
 
74
74
  case 35:
75
75
  case "end":
@@ -137,12 +137,12 @@ describe('utils.Component.get', function () {
137
137
  }];
138
138
  _renderWithValidation2 = (0, _setupTests.renderWithValidation)((0, _getComponent.getChildrenJsx)(PARENT_CONFIG, NESTED_CONFIG)), container = _renderWithValidation2.container;
139
139
  child = container.childNodes[0];
140
- expect(child.childNodes.length).toEqual(3);
140
+ expect(child.childNodes[0].childNodes.length).toEqual(3);
141
141
  expect(child.classList).toContain('govuk-form-group');
142
142
  label = child.childNodes[0];
143
143
  expect(label).toBeDefined();
144
144
  expect(label.innerHTML).toContain(LABEL);
145
- input = child.childNodes[2];
145
+ input = child.childNodes[0].childNodes[2];
146
146
  expect(input.tagName).toEqual('INPUT');
147
147
  expect(input.classList).toContain('govuk-input');
148
148
  expect(input.id).toEqual("".concat(CONTAINER_ID, ".").concat(FIELD_ID));
@@ -180,12 +180,12 @@ describe('utils.Component.get', function () {
180
180
  }];
181
181
  _renderWithValidation3 = (0, _setupTests.renderWithValidation)((0, _getComponent.getChildrenJsx)(PARENT_CONFIG, NESTED_CONFIG)), container = _renderWithValidation3.container;
182
182
  child = container.childNodes[0];
183
- expect(child.childNodes.length).toEqual(3);
183
+ expect(child.childNodes[0].childNodes.length).toEqual(3);
184
184
  expect(child.classList).toContain('govuk-form-group');
185
185
  label = child.childNodes[0];
186
186
  expect(label).toBeDefined();
187
187
  expect(label.innerHTML).toContain(LABEL);
188
- input = child.childNodes[2];
188
+ input = child.childNodes[0].childNodes[2];
189
189
  expect(input.tagName).toEqual('INPUT');
190
190
  expect(input.classList).toContain('govuk-input');
191
191
  expect(input.id).toEqual("".concat(COLLECTION_ID, "[0].").concat(FIELD_ID));
@@ -51,10 +51,10 @@ describe('utils.Component.get', function () {
51
51
  expect(formGroup.tagName).toEqual('DIV');
52
52
  expect(formGroup.classList).toContain('govuk-form-group');
53
53
  var label = undefined;
54
- formGroup.childNodes.forEach(function (node) {
54
+ formGroup.childNodes[0].childNodes.forEach(function (node) {
55
55
  // Check if it's an element.
56
- if (node instanceof Element && node.tagName === 'LABEL') {
57
- label = node;
56
+ if (node instanceof Element && node.tagName === 'LEGEND') {
57
+ label = node.childNodes[0];
58
58
  }
59
59
  });
60
60
  expect(label).toBeDefined();
@@ -61,11 +61,11 @@ describe('utils.Component.get', function () {
61
61
  expect(formGroup.tagName).toEqual('DIV');
62
62
  expect(formGroup.classList).toContain('govuk-form-group');
63
63
  var label = undefined;
64
- formGroup.childNodes.forEach(function (node) {
64
+ formGroup.childNodes[0].childNodes.forEach(function (node) {
65
65
  // Check if it's an element.
66
66
  if (node instanceof Element) {
67
- if (node.tagName === 'LABEL') {
68
- label = node;
67
+ if (node.tagName === 'LEGEND') {
68
+ label = node.childNodes[0];
69
69
  }
70
70
  }
71
71
  });
@@ -58,13 +58,7 @@ describe('utils.Component.get', function () {
58
58
 
59
59
  expect(formGroup.tagName).toEqual('DIV');
60
60
  expect(formGroup.classList).toContain('govuk-form-group');
61
- var label = undefined;
62
- formGroup.childNodes.forEach(function (node) {
63
- // Check if it's an element.
64
- if (node instanceof Element && node.tagName === 'LABEL') {
65
- label = node;
66
- }
67
- });
61
+ var label = formGroup.childNodes[0].childNodes[0].childNodes[0];
68
62
  expect(label).toBeDefined();
69
63
  expect(label.innerHTML).toContain(LABEL);
70
64
  expect(label.getAttribute('for')).toEqual(ID);
@@ -51,10 +51,10 @@ describe('utils.Component.get', function () {
51
51
  expect(formGroup.tagName).toEqual('DIV');
52
52
  expect(formGroup.classList).toContain('govuk-form-group');
53
53
  var label = undefined;
54
- formGroup.childNodes.forEach(function (node) {
54
+ formGroup.childNodes[0].childNodes.forEach(function (node) {
55
55
  // Check if it's an element.
56
- if (node instanceof Element && node.tagName === 'LABEL') {
57
- label = node;
56
+ if (node instanceof Element && node.tagName === 'LEGEND') {
57
+ label = node.childNodes[0];
58
58
  }
59
59
  });
60
60
  expect(label).toBeDefined();
@@ -52,7 +52,7 @@ describe('utils.Component.get', function () {
52
52
 
53
53
  expect(formGroup.tagName).toEqual('DIV');
54
54
  expect(formGroup.classList).toContain('govuk-form-group');
55
- var label = formGroup.childNodes[0];
55
+ var label = formGroup.childNodes[0].childNodes[0].childNodes[0];
56
56
  expect(label.innerHTML).toContain(LABEL);
57
57
  expect(label.getAttribute('for')).toEqual(ID);
58
58
  expect(textarea.tagName).toEqual('TEXTAREA');
@@ -50,7 +50,7 @@ describe('utils.Component.get', function () {
50
50
 
51
51
  expect(formGroup.tagName).toEqual('DIV');
52
52
  expect(formGroup.classList).toContain('govuk-form-group');
53
- var label = formGroup.childNodes[0];
53
+ var label = formGroup.childNodes[0].childNodes[0].childNodes[0];
54
54
  expect(label.innerHTML).toContain(LABEL);
55
55
  expect(label.getAttribute('for')).toEqual(ID);
56
56
  expect(timeInput.tagName).toEqual('DIV');
@@ -78,12 +78,12 @@ describe('utils.Component.get', function () {
78
78
  expect(part.item.tagName).toEqual('DIV');
79
79
  expect(part.item.classList).toContain('govuk-date-input__item');
80
80
 
81
- var _part$item$childNodes = _slicedToArray(part.item.childNodes, 2),
81
+ var _part$item$childNodes = _slicedToArray(part.item.childNodes[0].childNodes, 2),
82
82
  label = _part$item$childNodes[0],
83
83
  input = _part$item$childNodes[1];
84
84
 
85
- expect(label.tagName).toEqual('LABEL');
86
- expect(label.classList).toContain('govuk-label');
85
+ expect(label.childNodes[0].tagName).toEqual('LABEL');
86
+ expect(label.childNodes[0].classList).toContain('govuk-label');
87
87
  expect(label.textContent).toEqual(part.label);
88
88
  expect(input.tagName).toEqual('INPUT');
89
89
  expect(input.id).toEqual("".concat(ID, "-").concat(part.id)); // Put something in the input and make sure it fires.
@@ -37,7 +37,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" =
37
37
  * @returns The first encountered error with the component.
38
38
  */
39
39
  var validateComponent = function validateComponent(component, outerData, formData) {
40
- var _component$data$optio;
40
+ var _fd$keycloakContext, _component$data$optio;
41
41
 
42
42
  var fd = formData || outerData;
43
43
 
@@ -64,7 +64,8 @@ var validateComponent = function validateComponent(component, outerData, formDat
64
64
  return (0, _validateCollection.default)(component, value, fd);
65
65
 
66
66
  case _models.ComponentTypes.EMAIL:
67
- error = (0, _validateEmail.default)(value, component.label);
67
+ var userEmail = fd === null ? '' : (_fd$keycloakContext = fd.keycloakContext) === null || _fd$keycloakContext === void 0 ? void 0 : _fd$keycloakContext.email;
68
+ error = (0, _validateEmail.default)(value, component.label, userEmail);
68
69
  break;
69
70
 
70
71
  case _models.ComponentTypes.DATE:
@@ -15,20 +15,28 @@ var HODS_EMAIL_REGEX = /^[a-z0-9._-]+@(digital\.)?homeoffice.gov.uk$/i;
15
15
  * validateRequired (Validate.required) for that sort of validation.
16
16
  * @param {*} value The value to validate.
17
17
  * @param {string} label The label to use in any error message.
18
+ * @param {string} userEmail The user email to use for validation.
18
19
  * @returns An error if the email address is invalid.
19
20
  */
20
21
 
21
22
  var validateEmail = function validateEmail(value) {
22
23
  var label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
24
+ var userEmail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
23
25
 
24
26
  if (!!value) {
27
+ var name = label ? label.toLowerCase() : 'email address';
28
+
25
29
  if (typeof value === 'string') {
30
+ // The following is an interim fix pending a mechanism for validating against specific values
31
+ if (['Line manager email', 'Delegate email address'].includes(label) && value === userEmail) {
32
+ return "".concat(label, " cannot be the same as the user email address");
33
+ }
34
+
26
35
  if (HODS_EMAIL_REGEX.test(value)) {
27
36
  return undefined;
28
37
  }
29
38
  }
30
39
 
31
- var name = label ? label.toLowerCase() : 'email address';
32
40
  return "Enter ".concat(name, " in the correct format, like jane.doe@homeoffice.gov.uk");
33
41
  }
34
42
 
@@ -52,6 +52,14 @@ describe('utils', function () {
52
52
  var DEFAULT_ERROR = 'Enter email address in the correct format, like jane.doe@homeoffice.gov.uk';
53
53
  expect((0, _validateEmail.default)(['bob'], undefined)).toEqual(DEFAULT_ERROR);
54
54
  });
55
+ it('should return an error when line manager email is same as user email', function () {
56
+ var USER_EMAIL_ERROR = 'Line manager email cannot be the same as the user email address';
57
+ expect((0, _validateEmail.default)('joe.bloggs@digital.homeoffice.gov.uk', 'Line manager email', 'joe.bloggs@digital.homeoffice.gov.uk')).toEqual(USER_EMAIL_ERROR);
58
+ });
59
+ it('should return an error when delegate email is same as user email', function () {
60
+ var USER_EMAIL_ERROR = 'Delegate email address cannot be the same as the user email address';
61
+ expect((0, _validateEmail.default)('joe.bloggs@digital.homeoffice.gov.uk', 'Delegate email address', 'joe.bloggs@digital.homeoffice.gov.uk')).toEqual(USER_EMAIL_ERROR);
62
+ });
55
63
  });
56
64
  });
57
65
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "4.29.0-alpha",
3
+ "version": "4.30.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": "2.4.0",
19
+ "@ukhomeoffice/cop-react-components": "2.5.0",
20
20
  "axios": "^0.23.0",
21
21
  "dayjs": "^1.11.0",
22
22
  "govuk-frontend": "^4.3.1",