@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.
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +5 -23
- package/dist/components/CollectionPage/CollectionPage.test.js +9 -9
- package/dist/components/FormComponent/Collection.test.js +7 -7
- package/dist/components/FormComponent/Container.test.js +14 -14
- package/dist/components/FormComponent/FormComponent.test.js +6 -6
- package/dist/components/FormPage/FormPage.test.js +8 -8
- package/dist/components/FormRenderer/FormRenderer.js +7 -64
- package/dist/components/FormRenderer/FormRenderer.test.js +17 -75
- package/dist/components/FormRenderer/handlers/navigate.js +2 -2
- package/dist/models/PageAction.js +1 -7
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +4 -3
- package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +2 -2
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +4 -3
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +7 -7
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +3 -3
- package/dist/utils/Component/getComponentTests/getComponent.file.test.js +3 -3
- package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +11 -11
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +3 -3
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +3 -3
- package/dist/utils/Component/getComponentTests/getComponent.select.test.js +1 -7
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +3 -3
- package/dist/utils/Component/getComponentTests/getComponent.textarea.test.js +1 -1
- package/dist/utils/Component/getComponentTests/getComponent.time.test.js +4 -4
- package/dist/utils/Validate/validateComponent.js +3 -2
- package/dist/utils/Validate/validateEmail.js +9 -1
- package/dist/utils/Validate/validateEmail.test.js +8 -0
- package/package.json +2 -2
- package/dist/json/multiQuestionTaskList.json +0 -275
- 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[
|
|
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[
|
|
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[
|
|
679
|
+
expect(changePage.childNodes[1].textContent).toEqual('Event Mode'); // Click on radio for 'Air'
|
|
684
680
|
|
|
685
|
-
_react.fireEvent.click(changePage.childNodes[
|
|
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[
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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 === '
|
|
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
|
-
|
|
65
|
+
fieldSet.childNodes.forEach(function (node) {
|
|
65
66
|
// Check if it's an element.
|
|
66
67
|
if (node instanceof Element) {
|
|
67
|
-
if (node.tagName === '
|
|
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 === '
|
|
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 === '
|
|
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 === '
|
|
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 === '
|
|
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 =
|
|
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 === '
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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",
|