@ukhomeoffice/cop-react-form-renderer 2.8.5 → 2.10.1

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 (65) hide show
  1. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +8 -12
  2. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +10 -8
  3. package/dist/components/FormComponent/Collection.js +244 -0
  4. package/dist/components/FormComponent/Collection.scss +23 -0
  5. package/dist/components/FormComponent/Container.js +110 -0
  6. package/dist/components/FormComponent/Container.test.js +26 -26
  7. package/dist/components/FormComponent/FormComponent.js +65 -128
  8. package/dist/components/FormComponent/FormComponent.test.js +19 -19
  9. package/dist/components/FormComponent/helpers/getComponentError.js +31 -0
  10. package/dist/components/FormComponent/helpers/getComponentError.test.js +52 -0
  11. package/dist/components/FormComponent/helpers/index.js +15 -0
  12. package/dist/components/FormPage/FormPage.js +7 -11
  13. package/dist/components/FormPage/FormPage.test.js +12 -76
  14. package/dist/components/FormRenderer/FormRenderer.js +103 -44
  15. package/dist/components/FormRenderer/helpers/canActionProceed.js +3 -12
  16. package/dist/components/FormRenderer/helpers/canActionProceed.test.js +41 -65
  17. package/dist/components/FormRenderer/helpers/canCYASubmit.js +3 -24
  18. package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +72 -145
  19. package/dist/components/SummaryList/GroupAction.js +6 -2
  20. package/dist/components/SummaryList/SummaryList.js +33 -18
  21. package/dist/components/SummaryList/SummaryList.scss +12 -8
  22. package/dist/components/SummaryList/SummaryList.test.js +94 -27
  23. package/dist/components/SummaryList/SummaryListRow.js +51 -0
  24. package/dist/components/SummaryList/SummaryListTitleRow.js +30 -0
  25. package/dist/context/ValidationContext/ValidationContext.js +122 -0
  26. package/dist/context/ValidationContext/ValidationContext.test.js +98 -0
  27. package/dist/context/ValidationContext/index.js +23 -0
  28. package/dist/context/index.js +15 -0
  29. package/dist/hooks/index.js +8 -0
  30. package/dist/hooks/useValidation.js +19 -0
  31. package/dist/index.js +11 -5
  32. package/dist/models/CollectionLabels.js +14 -0
  33. package/dist/models/ComponentTypes.js +2 -0
  34. package/dist/models/index.js +8 -0
  35. package/dist/setupTests.js +32 -0
  36. package/dist/utils/CheckYourAnswers/getCYARow.js +14 -0
  37. package/dist/utils/CheckYourAnswers/getCYARow.test.js +34 -11
  38. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +89 -0
  39. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +194 -0
  40. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +9 -13
  41. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -4
  42. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +58 -14
  43. package/dist/utils/Component/cleanAttributes.js +1 -1
  44. package/dist/utils/Component/getComponent.js +36 -3
  45. package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +92 -0
  46. package/dist/utils/Component/getDefaultValue.js +25 -0
  47. package/dist/utils/Component/getDefaultValue.test.js +53 -0
  48. package/dist/utils/Component/index.js +4 -1
  49. package/dist/utils/Data/getSourceData.js +38 -0
  50. package/dist/utils/Data/getSourceData.test.js +16 -0
  51. package/dist/utils/Meta/constants.js +10 -0
  52. package/dist/utils/Meta/documents/getDocuments.js +18 -0
  53. package/dist/utils/Meta/documents/getDocuments.test.js +43 -0
  54. package/dist/utils/Meta/documents/index.js +23 -0
  55. package/dist/utils/Meta/documents/setDocumentForField.js +36 -0
  56. package/dist/utils/Meta/documents/setDocumentForField.test.js +49 -0
  57. package/dist/utils/Meta/index.js +21 -0
  58. package/dist/utils/Validate/validateCollection.js +42 -0
  59. package/dist/utils/Validate/validateCollection.test.js +74 -0
  60. package/dist/utils/Validate/validateComponent.js +67 -48
  61. package/dist/utils/Validate/validateComponent.test.js +247 -188
  62. package/dist/utils/Validate/validateContainer.js +29 -0
  63. package/dist/utils/Validate/validateContainer.test.js +68 -0
  64. package/dist/utils/index.js +4 -1
  65. package/package.json +3 -3
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _copReactComponents = require("@ukhomeoffice/cop-react-components");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _react = _interopRequireDefault(require("react"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ // Global imports
17
+ var SummaryListTitleRow = function SummaryListTitleRow(_ref) {
18
+ var title = _ref.title,
19
+ classes = _ref.classes;
20
+ return /*#__PURE__*/_react.default.createElement("div", {
21
+ className: "".concat(classes('row'), " ").concat(classes('title'))
22
+ }, /*#__PURE__*/_react.default.createElement(_copReactComponents.SmallHeading, null, title));
23
+ };
24
+
25
+ SummaryListTitleRow.propTypes = {
26
+ title: _propTypes.default.string.isRequired,
27
+ classes: _propTypes.default.func.isRequired
28
+ };
29
+ var _default = SummaryListTitleRow;
30
+ exports.default = _default;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.ValidationContext = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _utils = _interopRequireDefault(require("../../utils"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
15
+
16
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
17
+
18
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
19
+
20
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
21
+
22
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
23
+
24
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
25
+
26
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
27
+
28
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
29
+
30
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
31
+
32
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
33
+
34
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
35
+
36
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
37
+
38
+ var ValidationContext = /*#__PURE__*/(0, _react.createContext)();
39
+ exports.ValidationContext = ValidationContext;
40
+
41
+ var ValidationContextProvider = function ValidationContextProvider(_ref) {
42
+ var children = _ref.children;
43
+
44
+ var _useState = (0, _react.useState)([]),
45
+ _useState2 = _slicedToArray(_useState, 2),
46
+ errors = _useState2[0],
47
+ setErrors = _useState2[1];
48
+
49
+ var addErrors = /*#__PURE__*/function () {
50
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(errors) {
51
+ return regeneratorRuntime.wrap(function _callee$(_context) {
52
+ while (1) {
53
+ switch (_context.prev = _context.next) {
54
+ case 0:
55
+ setErrors(function (prev) {
56
+ return [].concat(_toConsumableArray(prev), _toConsumableArray(errors)).filter(function (e) {
57
+ return !!e;
58
+ });
59
+ });
60
+
61
+ case 1:
62
+ case "end":
63
+ return _context.stop();
64
+ }
65
+ }
66
+ }, _callee);
67
+ }));
68
+
69
+ return function addErrors(_x) {
70
+ return _ref2.apply(this, arguments);
71
+ };
72
+ }();
73
+
74
+ var clearErrors = /*#__PURE__*/function () {
75
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
76
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
77
+ while (1) {
78
+ switch (_context2.prev = _context2.next) {
79
+ case 0:
80
+ setErrors([]);
81
+
82
+ case 1:
83
+ case "end":
84
+ return _context2.stop();
85
+ }
86
+ }
87
+ }, _callee2);
88
+ }));
89
+
90
+ return function clearErrors() {
91
+ return _ref3.apply(this, arguments);
92
+ };
93
+ }();
94
+
95
+ var validate = {
96
+ page: function page(_page) {
97
+ var pageErrors = _utils.default.Validate.page(_page);
98
+
99
+ setErrors(pageErrors);
100
+ return pageErrors;
101
+ },
102
+ pages: function pages(_pages) {
103
+ var pagesErrors = _pages.flatMap(function (page) {
104
+ return _utils.default.Validate.page(page);
105
+ });
106
+
107
+ setErrors(pagesErrors);
108
+ return pagesErrors;
109
+ }
110
+ };
111
+ return /*#__PURE__*/React.createElement(ValidationContext.Provider, {
112
+ value: {
113
+ errors: errors,
114
+ addErrors: addErrors,
115
+ clearErrors: clearErrors,
116
+ validate: validate
117
+ }
118
+ }, children);
119
+ };
120
+
121
+ var _default = ValidationContextProvider;
122
+ exports.default = _default;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ var _react = require("@testing-library/react");
6
+
7
+ var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
+
9
+ var _react2 = _interopRequireWildcard(require("react"));
10
+
11
+ var _hooks = require("../../hooks");
12
+
13
+ var _ValidationContext = _interopRequireDefault(require("./ValidationContext"));
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
+
17
+ 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); }
18
+
19
+ 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; }
20
+
21
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
22
+
23
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
24
+
25
+ var TestComponent = function TestComponent(_ref) {
26
+ var customErrors = _ref.customErrors;
27
+
28
+ var _useValidation = (0, _hooks.useValidation)(),
29
+ addErrors = _useValidation.addErrors,
30
+ clearErrors = _useValidation.clearErrors,
31
+ errors = _useValidation.errors,
32
+ validate = _useValidation.validate;
33
+
34
+ (0, _react2.useEffect)(function () {
35
+ if (customErrors) {
36
+ addErrors(customErrors);
37
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
38
+
39
+ }, [customErrors]);
40
+ return /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, typeof addErrors === 'function' && /*#__PURE__*/_react2.default.createElement("span", null, "addErrors is a function"), typeof clearErrors === 'function' && /*#__PURE__*/_react2.default.createElement("span", null, "clearErrors is a function"), typeof validate.page === 'function' && /*#__PURE__*/_react2.default.createElement("span", null, "validate.page is a function"), Array.isArray(errors) && /*#__PURE__*/_react2.default.createElement("span", null, "errors is an array of length ", errors.length), (errors === null || errors === void 0 ? void 0 : errors.length) > 0 && /*#__PURE__*/_react2.default.createElement(_copReactComponents.ErrorSummary, {
41
+ errors: errors
42
+ }));
43
+ };
44
+
45
+ describe('context.ValidationContext', function () {
46
+ it('should appropriately set up the context', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
47
+ var _render, container;
48
+
49
+ return regeneratorRuntime.wrap(function _callee$(_context) {
50
+ while (1) {
51
+ switch (_context.prev = _context.next) {
52
+ case 0:
53
+ _render = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_ValidationContext.default, null, /*#__PURE__*/_react2.default.createElement(TestComponent, null))), container = _render.container;
54
+ expect(container.childNodes.length).toEqual(4);
55
+ expect(container.textContent).toContain('addErrors is a function');
56
+ expect(container.textContent).toContain('clearErrors is a function');
57
+ expect(container.textContent).toContain('validate.page is a function');
58
+ expect(container.textContent).toContain('errors is an array of length 0');
59
+
60
+ case 6:
61
+ case "end":
62
+ return _context.stop();
63
+ }
64
+ }
65
+ }, _callee);
66
+ })));
67
+ it('should appropriately handle errors', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
68
+ var CUSTOM_ERRORS, _render2, container, errorSummary;
69
+
70
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
71
+ while (1) {
72
+ switch (_context2.prev = _context2.next) {
73
+ case 0:
74
+ CUSTOM_ERRORS = [{
75
+ id: 'alpha',
76
+ error: 'Alpha is required'
77
+ }];
78
+ _render2 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_ValidationContext.default, null, /*#__PURE__*/_react2.default.createElement(TestComponent, {
79
+ customErrors: CUSTOM_ERRORS
80
+ }))), container = _render2.container;
81
+ expect(container.childNodes.length).toEqual(5);
82
+ expect(container.textContent).toContain('addErrors is a function');
83
+ expect(container.textContent).toContain('clearErrors is a function');
84
+ expect(container.textContent).toContain('validate.page is a function');
85
+ expect(container.textContent).toContain('errors is an array of length 1');
86
+ errorSummary = container.childNodes[4];
87
+ expect(errorSummary.tagName).toEqual('DIV');
88
+ expect(errorSummary.classList).toContain('govuk-error-summary');
89
+ expect(errorSummary.textContent).toContain(CUSTOM_ERRORS[0].error);
90
+
91
+ case 11:
92
+ case "end":
93
+ return _context2.stop();
94
+ }
95
+ }
96
+ }, _callee2);
97
+ })));
98
+ });
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "ValidationContext", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _ValidationContext.ValidationContext;
12
+ }
13
+ });
14
+ exports.default = void 0;
15
+
16
+ var _ValidationContext = _interopRequireWildcard(require("./ValidationContext"));
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ var _default = _ValidationContext.default;
23
+ exports.default = _default;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ValidationContextProvider", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _ValidationContext.default;
10
+ }
11
+ });
12
+
13
+ var _ValidationContext = _interopRequireDefault(require("./ValidationContext"));
14
+
15
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -41,9 +41,17 @@ Object.defineProperty(exports, "useRefData", {
41
41
  return _useRefData.default;
42
42
  }
43
43
  });
44
+ Object.defineProperty(exports, "useValidation", {
45
+ enumerable: true,
46
+ get: function get() {
47
+ return _useValidation.default;
48
+ }
49
+ });
44
50
 
45
51
  var _useAxios = _interopRequireDefault(require("./useAxios"));
46
52
 
53
+ var _useValidation = _interopRequireDefault(require("./useValidation"));
54
+
47
55
  var _useHooks = _interopRequireDefault(require("./useHooks"));
48
56
 
49
57
  var _useGetRequest = _interopRequireDefault(require("./useGetRequest"));
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _ValidationContext = require("../context/ValidationContext");
11
+
12
+ // Global imports
13
+ // Local imports
14
+ var useValidation = function useValidation() {
15
+ return (0, _react.useContext)(_ValidationContext.ValidationContext);
16
+ };
17
+
18
+ var _default = useValidation;
19
+ exports.default = _default;
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  Object.defineProperty(exports, "FormRenderer", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _FormRenderer.default;
9
+ return _components.FormRenderer;
10
10
  }
11
11
  });
12
12
  Object.defineProperty(exports, "FormTypes", {
@@ -24,7 +24,7 @@ Object.defineProperty(exports, "HubFormats", {
24
24
  Object.defineProperty(exports, "SummaryList", {
25
25
  enumerable: true,
26
26
  get: function get() {
27
- return _SummaryList.default;
27
+ return _components.SummaryList;
28
28
  }
29
29
  });
30
30
  Object.defineProperty(exports, "Utils", {
@@ -33,11 +33,17 @@ Object.defineProperty(exports, "Utils", {
33
33
  return _utils.default;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "ValidationContextProvider", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _context.ValidationContextProvider;
40
+ }
41
+ });
36
42
  exports.intercepts = exports.default = void 0;
37
43
 
38
- var _FormRenderer = _interopRequireDefault(require("./components/FormRenderer"));
44
+ var _components = require("./components");
39
45
 
40
- var _SummaryList = _interopRequireDefault(require("./components/SummaryList"));
46
+ var _context = require("./context");
41
47
 
42
48
  var _useHooks = require("./hooks/useHooks");
43
49
 
@@ -54,5 +60,5 @@ var intercepts = {
54
60
  reset: _useHooks.resetHooks
55
61
  };
56
62
  exports.intercepts = intercepts;
57
- var _default = _FormRenderer.default;
63
+ var _default = _components.FormRenderer;
58
64
  exports.default = _default;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var CollectionLabels = {
8
+ add: 'Add another',
9
+ remove: 'Remove',
10
+ // eslint-disable-next-line no-template-curly-in-string
11
+ item: 'Item ${index}'
12
+ };
13
+ var _default = CollectionLabels;
14
+ exports.default = _default;
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var TYPE_AUTOCOMPLETE = 'autocomplete';
8
8
  var TYPE_CHECKBOXES = 'checkboxes';
9
+ var TYPE_COLLECTION = 'collection';
9
10
  var TYPE_CONTAINER = 'container';
10
11
  var TYPE_DATE = 'date';
11
12
  var TYPE_EMAIL = 'email';
@@ -21,6 +22,7 @@ var TYPE_TIME = 'time';
21
22
  var ComponentTypes = {
22
23
  AUTOCOMPLETE: TYPE_AUTOCOMPLETE,
23
24
  CHECKBOXES: TYPE_CHECKBOXES,
25
+ COLLECTION: TYPE_COLLECTION,
24
26
  CONTAINER: TYPE_CONTAINER,
25
27
  DATE: TYPE_DATE,
26
28
  EMAIL: TYPE_EMAIL,
@@ -3,6 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "CollectionLabels", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _CollectionLabels.default;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "ComponentTypes", {
7
13
  enumerable: true,
8
14
  get: function get() {
@@ -46,6 +52,8 @@ Object.defineProperty(exports, "TaskStates", {
46
52
  }
47
53
  });
48
54
 
55
+ var _CollectionLabels = _interopRequireDefault(require("./CollectionLabels"));
56
+
49
57
  var _ComponentTypes = _interopRequireDefault(require("./ComponentTypes"));
50
58
 
51
59
  var _EventTypes = _interopRequireDefault(require("./EventTypes"));
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderWithValidation = exports.renderDomWithValidation = exports.expectObjectLike = void 0;
7
+
8
+ var _react = require("@testing-library/react");
9
+
10
+ var _reactDom = require("react-dom");
11
+
12
+ var _context = require("./context");
13
+
14
+ var renderWithValidation = function renderWithValidation(ui, options) {
15
+ return (0, _react.render)( /*#__PURE__*/React.createElement(_context.ValidationContextProvider, null, ui), options);
16
+ };
17
+
18
+ exports.renderWithValidation = renderWithValidation;
19
+
20
+ var renderDomWithValidation = function renderDomWithValidation(ui, container, callback) {
21
+ return (0, _reactDom.render)( /*#__PURE__*/React.createElement(_context.ValidationContextProvider, null, ui), container, callback);
22
+ };
23
+
24
+ exports.renderDomWithValidation = renderDomWithValidation;
25
+
26
+ var expectObjectLike = function expectObjectLike(received, expected) {
27
+ Object.keys(expected).forEach(function (key) {
28
+ expect(received[key]).toEqual(expected[key]);
29
+ });
30
+ };
31
+
32
+ exports.expectObjectLike = expectObjectLike;
@@ -29,16 +29,30 @@ var getCYARow = function getCYARow(page, component, onAction) {
29
29
  value = page.formData[component.fieldId];
30
30
  }
31
31
 
32
+ setNestedValue(component, page);
32
33
  return {
33
34
  pageId: page.id,
34
35
  id: component.id,
35
36
  fieldId: component.fieldId,
37
+ full_path: component.full_path,
36
38
  key: component.label || component.cya_label,
39
+ required: component.required,
37
40
  component: _Component.default.editable(component) ? component : undefined,
38
41
  value: value || '',
39
42
  action: (0, _getCYAAction.default)(component.readonly, page, onAction)
40
43
  };
41
44
  };
42
45
 
46
+ var setNestedValue = function setNestedValue(component, page) {
47
+ var _component$data, _component$data$optio;
48
+
49
+ (_component$data = component.data) === null || _component$data === void 0 ? void 0 : (_component$data$optio = _component$data.options) === null || _component$data$optio === void 0 ? void 0 : _component$data$optio.forEach(function (option, index) {
50
+ //check if option is selected and has nested component
51
+ if (page.formData[component.id] === option.value && option.nested) {
52
+ component.data.options[index].nested.value = page.formData[option.nested.id];
53
+ }
54
+ });
55
+ };
56
+
43
57
  var _default = getCYARow;
44
58
  exports.default = _default;
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
2
 
3
+ var _setupTests = require("../../setupTests");
4
+
3
5
  var _getCYARow = _interopRequireDefault(require("./getCYARow"));
4
6
 
5
7
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
8
 
7
- // Local imports
9
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
10
+
8
11
  describe('utils', function () {
9
12
  describe('CheckYourAnswers', function () {
10
13
  describe('getCYARow', function () {
11
- var expectObjectLike = function expectObjectLike(received, expected) {
12
- Object.keys(expected).forEach(function (key) {
13
- expect(received[key]).toEqual(expected[key]);
14
- });
15
- };
16
-
17
14
  it('should get an appropriate row for a readonly text component', function () {
18
15
  var PAGE = {
19
16
  id: 'page',
@@ -32,7 +29,7 @@ describe('utils', function () {
32
29
  var ON_ACTION = function ON_ACTION() {};
33
30
 
34
31
  var ROW = (0, _getCYARow.default)(PAGE, COMPONENT, ON_ACTION);
35
- expectObjectLike(ROW, {
32
+ (0, _setupTests.expectObjectLike)(ROW, {
36
33
  pageId: PAGE.id,
37
34
  fieldId: COMPONENT.fieldId,
38
35
  key: COMPONENT.label,
@@ -110,7 +107,7 @@ describe('utils', function () {
110
107
  var ON_ACTION = function ON_ACTION() {};
111
108
 
112
109
  var ROW = (0, _getCYARow.default)(PAGE, COMPONENT, ON_ACTION);
113
- expectObjectLike(ROW, {
110
+ (0, _setupTests.expectObjectLike)(ROW, {
114
111
  pageId: PAGE.id,
115
112
  fieldId: COMPONENT.fieldId,
116
113
  key: COMPONENT.cya_label,
@@ -137,17 +134,43 @@ describe('utils', function () {
137
134
  var ON_ACTION = function ON_ACTION() {};
138
135
 
139
136
  var ROW = (0, _getCYARow.default)(PAGE, COMPONENT, ON_ACTION);
140
- expectObjectLike(ROW, {
137
+ (0, _setupTests.expectObjectLike)(ROW, {
141
138
  pageId: PAGE.id,
142
139
  fieldId: COMPONENT.fieldId,
143
140
  key: COMPONENT.label,
144
141
  component: COMPONENT,
145
142
  value: 'Bravo'
146
143
  });
147
- expectObjectLike(ROW.action, {
144
+ (0, _setupTests.expectObjectLike)(ROW.action, {
148
145
  onAction: ON_ACTION
149
146
  });
150
147
  });
148
+ it('should update update any nested components with corresponding values from the stored formdata', function () {
149
+ var SELECTED_VALUE = 'selectedValue';
150
+ var NESTED_ID = 'nestedId';
151
+ var NESTED_VALUE = 'nestedValue';
152
+ var PAGE = {
153
+ id: 'page',
154
+ formData: _defineProperty({
155
+ a: SELECTED_VALUE
156
+ }, NESTED_ID, NESTED_VALUE),
157
+ cya_link: {}
158
+ };
159
+ var COMPONENT = {
160
+ type: 'radios',
161
+ id: 'a',
162
+ data: {
163
+ options: [{
164
+ value: SELECTED_VALUE,
165
+ nested: {
166
+ id: NESTED_ID
167
+ }
168
+ }]
169
+ }
170
+ };
171
+ var ROW = (0, _getCYARow.default)(PAGE, COMPONENT, function () {});
172
+ expect(ROW.component.data.options[0].nested.value).toEqual(NESTED_VALUE);
173
+ });
151
174
  });
152
175
  });
153
176
  });