@ukhomeoffice/cop-react-form-renderer 6.15.2-alpha → 6.15.2
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/CollectionSummary/BannerStrip.scss +4 -0
- package/dist/components/CollectionSummary/CollectionSummary.js +2 -2
- package/dist/components/CollectionSummary/SummaryCard.js +2 -2
- package/dist/components/FormComponent/Collection.js +2 -2
- package/dist/components/FormComponent/Container.js +2 -2
- package/dist/components/FormComponent/FormComponent.js +2 -2
- package/dist/components/FormPage/FormPage.js +8 -10
- package/dist/components/FormRenderer/FormRenderer.js +7 -12
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +62 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +61 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +74 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-change-what-happened-before.json +300 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-unspent-convictions-before.json +143 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-show-when-in-component-and-page.json +6 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-same-component-reused.json +6 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-same-component-reused-one-shown.json +8 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-change-what-happened-after.json +280 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-unspent-convictions-after.json +127 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-show-when-in-component-and-page-removed.json +5 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-same-component-reused-removed.json +5 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-same-component-reused-one-shown-removed.json +7 -0
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +259 -282
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +77 -26
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.js +381 -0
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.test.js +559 -0
- package/dist/components/FormRenderer/onCYAAction.js +12 -0
- package/dist/components/FormRenderer/onCYAAction.test.js +5 -0
- package/dist/components/PageActions/ActionButton.js +2 -2
- package/dist/components/SummaryList/SummaryList.js +2 -2
- package/dist/components/TaskList/TaskList.js +2 -2
- package/dist/hooks/useGetRequest.js +15 -15
- package/dist/hooks/useRefData.js +3 -2
- package/dist/utils/CollectionPage/getQuickEditPage.js +2 -2
- package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +2 -1
- package/dist/utils/Component/getDefaultValueFromConfig.js +2 -1
- package/dist/utils/Condition/meetsCondition.js +26 -12
- package/dist/utils/Condition/meetsCondition.test.js +21 -0
- package/dist/utils/Data/getAutocompleteSource.js +68 -51
- package/dist/utils/Data/getAutocompleteSource.test.js +31 -18
- package/dist/utils/Operate/doesContainValue.js +34 -0
- package/dist/utils/Operate/doesContainValue.test.js +75 -0
- package/dist/utils/Operate/runPageOperations.js +2 -0
- package/dist/utils/Validate/validateOnPageLoad.js +23 -0
- package/dist/utils/Validate/validateOnPageLoad.test.js +88 -0
- package/package.json +4 -4
- package/dist/components/FormRenderer/helpers/deleteNodeByPath.js +0 -26
- package/dist/components/FormRenderer/helpers/deleteNodeByPath.test.js +0 -56
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Condition = _interopRequireDefault(require("../Condition"));
|
|
4
|
+
var _validateOnPageLoad = require("./validateOnPageLoad");
|
|
5
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
describe('doValidateOnPageLoad', () => {
|
|
7
|
+
const formData = {
|
|
8
|
+
people: [{
|
|
9
|
+
name: 'John Doe'
|
|
10
|
+
}, {
|
|
11
|
+
name: 'Jane Doe'
|
|
12
|
+
}]
|
|
13
|
+
};
|
|
14
|
+
it('should return false if page.customValidation is not defined', () => {
|
|
15
|
+
const page = {
|
|
16
|
+
formData
|
|
17
|
+
};
|
|
18
|
+
const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
|
|
19
|
+
expect(result).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
it('should return false if no validation item has onLoad set to true', () => {
|
|
22
|
+
const page = {
|
|
23
|
+
customValidation: [{
|
|
24
|
+
message: "Validation without onLoad",
|
|
25
|
+
runWhen: {
|
|
26
|
+
onLoad: false
|
|
27
|
+
}
|
|
28
|
+
}],
|
|
29
|
+
formData
|
|
30
|
+
};
|
|
31
|
+
const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
|
|
32
|
+
expect(result).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
it('should return false if validation constraint is not met', () => {
|
|
35
|
+
const page = {
|
|
36
|
+
customValidation: [{
|
|
37
|
+
message: "Update all people details before continuing",
|
|
38
|
+
runWhen: {
|
|
39
|
+
onLoad: true,
|
|
40
|
+
constraint: [{
|
|
41
|
+
field: 'people',
|
|
42
|
+
op: _Condition.default.GREATER_THAN,
|
|
43
|
+
value: 3 // Condition that will fail
|
|
44
|
+
}]
|
|
45
|
+
}
|
|
46
|
+
}],
|
|
47
|
+
formData
|
|
48
|
+
};
|
|
49
|
+
jest.spyOn(_Condition.default, 'meetsOne').mockImplementation(() => false);
|
|
50
|
+
const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
|
|
51
|
+
expect(result).toBe(false);
|
|
52
|
+
expect(_Condition.default.meetsOne).toHaveBeenCalledWith(page.customValidation[0].runWhen.constraint, formData);
|
|
53
|
+
});
|
|
54
|
+
it('should return true if validation constraint is met', () => {
|
|
55
|
+
const page = {
|
|
56
|
+
customValidation: [{
|
|
57
|
+
message: "Update all people details before continuing",
|
|
58
|
+
runWhen: {
|
|
59
|
+
onLoad: true,
|
|
60
|
+
constraint: [{
|
|
61
|
+
field: 'people',
|
|
62
|
+
op: _Condition.default.GREATER_THAN,
|
|
63
|
+
value: 0 // Condition that will pass
|
|
64
|
+
}]
|
|
65
|
+
}
|
|
66
|
+
}],
|
|
67
|
+
formData
|
|
68
|
+
};
|
|
69
|
+
jest.spyOn(_Condition.default, 'meetsOne').mockImplementation(() => true);
|
|
70
|
+
const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
|
|
71
|
+
expect(result).toBe(true);
|
|
72
|
+
expect(_Condition.default.meetsOne).toHaveBeenCalledWith(page.customValidation[0].runWhen.constraint, formData);
|
|
73
|
+
});
|
|
74
|
+
it('should return false if no matching validation is found', () => {
|
|
75
|
+
const page = {
|
|
76
|
+
customValidation: [{
|
|
77
|
+
message: "Validation without constraint",
|
|
78
|
+
runWhen: {
|
|
79
|
+
onLoad: true,
|
|
80
|
+
constraint: null
|
|
81
|
+
}
|
|
82
|
+
}],
|
|
83
|
+
formData
|
|
84
|
+
};
|
|
85
|
+
const result = (0, _validateOnPageLoad.doValidateOnPageLoad)(page);
|
|
86
|
+
expect(result).toBe(false);
|
|
87
|
+
});
|
|
88
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ukhomeoffice/cop-react-form-renderer",
|
|
3
|
-
"version": "6.15.2
|
|
3
|
+
"version": "6.15.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rimraf dist",
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
"yalc-publish": "yarn compile-with-maps && cp -r src dist/src && yalc publish --push"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@ukhomeoffice/cop-react-components": "4.7.
|
|
19
|
+
"@ukhomeoffice/cop-react-components": "4.7.15",
|
|
20
20
|
"axios": "^0.23.0",
|
|
21
21
|
"dayjs": "^1.11.0",
|
|
22
22
|
"govuk-frontend": "^5.0.0",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
23
|
+
"uuid": "^8.1.0",
|
|
24
|
+
"web-vitals": "^1.0.1"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@babel/cli": "^7.15.4",
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
/* eslint-disable consistent-return */
|
|
8
|
-
const deleteNodeByPath = (obj, path) => {
|
|
9
|
-
if (Array.isArray(obj)) {
|
|
10
|
-
// If obj is an array, recursively call deleteNodeByPath on each element
|
|
11
|
-
for (let i = 0; i < obj.length; i += 1) {
|
|
12
|
-
deleteNodeByPath(obj[i], path);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
const keys = path.split('.');
|
|
16
|
-
let current = obj;
|
|
17
|
-
for (let i = 0; i < keys.length - 1; i += 1) {
|
|
18
|
-
current = current[keys[i]];
|
|
19
|
-
if (current === undefined) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
delete current[keys[keys.length - 1]];
|
|
24
|
-
return obj;
|
|
25
|
-
};
|
|
26
|
-
var _default = exports.default = deleteNodeByPath;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _deleteNodeByPath = _interopRequireDefault(require("./deleteNodeByPath"));
|
|
4
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
5
|
-
describe('Delete node based on path', () => {
|
|
6
|
-
it('delete where node is at parent level', () => {
|
|
7
|
-
const nested = {
|
|
8
|
-
type: "Example form",
|
|
9
|
-
alpha: "alpha",
|
|
10
|
-
bravo: "bravo",
|
|
11
|
-
person: {
|
|
12
|
-
charlie: "Smith",
|
|
13
|
-
delta: "Acme Inc"
|
|
14
|
-
},
|
|
15
|
-
gamma: "gamma",
|
|
16
|
-
epsilon: "epsilon"
|
|
17
|
-
};
|
|
18
|
-
const path = 'type';
|
|
19
|
-
const result = (0, _deleteNodeByPath.default)(nested, path);
|
|
20
|
-
expect(result).toEqual({
|
|
21
|
-
alpha: "alpha",
|
|
22
|
-
bravo: "bravo",
|
|
23
|
-
person: {
|
|
24
|
-
charlie: "Smith",
|
|
25
|
-
delta: "Acme Inc"
|
|
26
|
-
},
|
|
27
|
-
gamma: "gamma",
|
|
28
|
-
epsilon: "epsilon"
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
it('delete where node is at child level', () => {
|
|
32
|
-
const nested = {
|
|
33
|
-
type: "Example form",
|
|
34
|
-
alpha: "alpha",
|
|
35
|
-
bravo: "bravo",
|
|
36
|
-
person: {
|
|
37
|
-
charlie: "Smith",
|
|
38
|
-
delta: "Acme Inc"
|
|
39
|
-
},
|
|
40
|
-
gamma: "gamma",
|
|
41
|
-
epsilon: "epsilon"
|
|
42
|
-
};
|
|
43
|
-
const path = 'person.charlie';
|
|
44
|
-
const result = (0, _deleteNodeByPath.default)(nested, path);
|
|
45
|
-
expect(result).toEqual({
|
|
46
|
-
type: "Example form",
|
|
47
|
-
alpha: "alpha",
|
|
48
|
-
bravo: "bravo",
|
|
49
|
-
person: {
|
|
50
|
-
delta: "Acme Inc"
|
|
51
|
-
},
|
|
52
|
-
gamma: "gamma",
|
|
53
|
-
epsilon: "epsilon"
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
});
|