@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.
Files changed (47) hide show
  1. package/dist/components/CollectionSummary/BannerStrip.scss +4 -0
  2. package/dist/components/CollectionSummary/CollectionSummary.js +2 -2
  3. package/dist/components/CollectionSummary/SummaryCard.js +2 -2
  4. package/dist/components/FormComponent/Collection.js +2 -2
  5. package/dist/components/FormComponent/Container.js +2 -2
  6. package/dist/components/FormComponent/FormComponent.js +2 -2
  7. package/dist/components/FormPage/FormPage.js +8 -10
  8. package/dist/components/FormRenderer/FormRenderer.js +7 -12
  9. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +62 -0
  10. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +61 -0
  11. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +74 -0
  12. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-change-what-happened-before.json +300 -0
  13. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-unspent-convictions-before.json +143 -0
  14. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-show-when-in-component-and-page.json +6 -0
  15. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-same-component-reused.json +6 -0
  16. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-same-component-reused-one-shown.json +8 -0
  17. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-change-what-happened-after.json +280 -0
  18. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-unspent-convictions-after.json +127 -0
  19. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-show-when-in-component-and-page-removed.json +5 -0
  20. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-same-component-reused-removed.json +5 -0
  21. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-same-component-reused-one-shown-removed.json +7 -0
  22. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +259 -282
  23. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +77 -26
  24. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.js +381 -0
  25. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.test.js +559 -0
  26. package/dist/components/FormRenderer/onCYAAction.js +12 -0
  27. package/dist/components/FormRenderer/onCYAAction.test.js +5 -0
  28. package/dist/components/PageActions/ActionButton.js +2 -2
  29. package/dist/components/SummaryList/SummaryList.js +2 -2
  30. package/dist/components/TaskList/TaskList.js +2 -2
  31. package/dist/hooks/useGetRequest.js +15 -15
  32. package/dist/hooks/useRefData.js +3 -2
  33. package/dist/utils/CollectionPage/getQuickEditPage.js +2 -2
  34. package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +2 -1
  35. package/dist/utils/Component/getDefaultValueFromConfig.js +2 -1
  36. package/dist/utils/Condition/meetsCondition.js +26 -12
  37. package/dist/utils/Condition/meetsCondition.test.js +21 -0
  38. package/dist/utils/Data/getAutocompleteSource.js +68 -51
  39. package/dist/utils/Data/getAutocompleteSource.test.js +31 -18
  40. package/dist/utils/Operate/doesContainValue.js +34 -0
  41. package/dist/utils/Operate/doesContainValue.test.js +75 -0
  42. package/dist/utils/Operate/runPageOperations.js +2 -0
  43. package/dist/utils/Validate/validateOnPageLoad.js +23 -0
  44. package/dist/utils/Validate/validateOnPageLoad.test.js +88 -0
  45. package/package.json +4 -4
  46. package/dist/components/FormRenderer/helpers/deleteNodeByPath.js +0 -26
  47. 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-alpha",
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.4",
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
- "web-vitals": "^1.0.1",
24
- "uuid": "^8.1.0"
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
- });