@ukhomeoffice/cop-react-form-renderer 2.9.1 → 2.10.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 (45) 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 +64 -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 +1 -1
  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/index.js +8 -0
  34. package/dist/setupTests.js +32 -0
  35. package/dist/utils/CheckYourAnswers/getCYARow.js +2 -0
  36. package/dist/utils/CheckYourAnswers/getCYARow.test.js +6 -10
  37. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +89 -0
  38. package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +194 -0
  39. package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +9 -13
  40. package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -4
  41. package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +58 -14
  42. package/dist/utils/Component/getDefaultValue.js +25 -0
  43. package/dist/utils/Component/getDefaultValue.test.js +53 -0
  44. package/dist/utils/Component/index.js +4 -1
  45. package/package.json +1 -1
@@ -5,37 +5,16 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _utils = _interopRequireDefault(require("../../../utils"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
13
-
14
- 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."); }
15
-
16
- 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); }
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 _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; }
23
-
24
8
  /**
25
9
  * Assesses whether the CYA screen can submit.
26
10
  * Presently, this will validate all of the form pages and, only if all pages are
27
11
  * valid will it proceed.
28
12
  * @param {Array} pages All of the pages contained within the form.
29
- * @param {Function} onError A function to call with any validation errors.
13
+ * @param {Function} pagesValidator A function to validate the page.
30
14
  * @returns A boolean where `true` means the CYA can submit and `false` means it cannot.
31
15
  */
32
- var canCYASubmit = function canCYASubmit(pages, onError) {
33
- var errors = [];
34
- pages.forEach(function (p) {
35
- errors.push.apply(errors, _toConsumableArray(_utils.default.Validate.page(p)));
36
- });
37
- onError(errors);
38
- return errors.length === 0;
16
+ var canCYASubmit = function canCYASubmit(pages, pagesValidator) {
17
+ return pagesValidator(pages).length === 0;
39
18
  };
40
19
 
41
20
  var _default = canCYASubmit;
@@ -1,155 +1,82 @@
1
1
  "use strict";
2
2
 
3
+ var _Validate = _interopRequireDefault(require("../../../utils/Validate"));
4
+
3
5
  var _canCYASubmit = _interopRequireDefault(require("./canCYASubmit"));
4
6
 
5
7
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
8
 
7
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
8
-
9
- 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."); }
10
-
11
- 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); }
12
-
13
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
14
-
15
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
16
-
17
- 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; }
18
-
19
- describe('components', function () {
20
- describe('FormRenderer', function () {
21
- describe('helpers', function () {
22
- describe('canCYASubmit', function () {
23
- it('should return true when all pages are valid', function () {
24
- var PAGE_1 = {
25
- components: [{
26
- id: 'a',
27
- fieldId: 'a',
28
- label: 'Alpha',
29
- required: true
30
- }],
31
- formData: {
32
- a: 'Bravo'
33
- }
34
- };
35
- var PAGE_2 = {
36
- components: [{
37
- id: 'c',
38
- fieldId: 'c',
39
- label: 'Charlie',
40
- required: true
41
- }],
42
- formData: {
43
- c: 'Delta'
44
- }
45
- };
46
- expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], function () {})).toBeTruthy();
47
- });
48
- it('should return false when the first page is invalid and should have called the onErrors method appropriately', function () {
49
- var PAGE_1 = {
50
- components: [{
51
- id: 'a',
52
- fieldId: 'a',
53
- label: 'Alpha',
54
- required: true
55
- }],
56
- formData: {}
57
- };
58
- var PAGE_2 = {
59
- components: [{
60
- id: 'c',
61
- fieldId: 'c',
62
- label: 'Charlie',
63
- required: true
64
- }],
65
- formData: {
66
- c: 'Delta'
67
- }
68
- };
69
- var ERRORS = [];
70
-
71
- var ON_ERROR = function ON_ERROR(errors) {
72
- ERRORS.push.apply(ERRORS, _toConsumableArray(errors));
73
- };
9
+ // Local imports
10
+ describe('components.FormRenderer.helpers.canCYASubmit', function () {
11
+ var ALPHA = {
12
+ id: 'a',
13
+ fieldId: 'a',
14
+ label: 'Alpha',
15
+ required: true
16
+ };
17
+ var CHARLIE = {
18
+ id: 'c',
19
+ fieldId: 'c',
20
+ label: 'Charlie',
21
+ required: true
22
+ };
74
23
 
75
- expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], ON_ERROR)).toBeFalsy();
76
- expect(ERRORS.length).toEqual(1);
77
- expect(ERRORS[0]).toEqual({
78
- id: 'a',
79
- error: 'Alpha is required'
80
- });
81
- });
82
- it('should return false when the second page is invalid and should have called the onErrors method appropriately', function () {
83
- var PAGE_1 = {
84
- components: [{
85
- id: 'a',
86
- fieldId: 'a',
87
- label: 'Alpha',
88
- required: true
89
- }],
90
- formData: {
91
- a: 'Bravo'
92
- }
93
- };
94
- var PAGE_2 = {
95
- components: [{
96
- id: 'c',
97
- fieldId: 'c',
98
- label: 'Charlie',
99
- required: true
100
- }],
101
- formData: {}
102
- };
103
- var ERRORS = [];
104
-
105
- var ON_ERROR = function ON_ERROR(errors) {
106
- ERRORS.push.apply(ERRORS, _toConsumableArray(errors));
107
- };
108
-
109
- expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], ON_ERROR)).toBeFalsy();
110
- expect(ERRORS.length).toEqual(1);
111
- expect(ERRORS[0]).toEqual({
112
- id: 'c',
113
- error: 'Charlie is required'
114
- });
115
- });
116
- it('should return false when the both pages are invalid and should have called the onErrors method appropriately', function () {
117
- var PAGE_1 = {
118
- components: [{
119
- id: 'a',
120
- fieldId: 'a',
121
- label: 'Alpha',
122
- required: true
123
- }],
124
- formData: {}
125
- };
126
- var PAGE_2 = {
127
- components: [{
128
- id: 'c',
129
- fieldId: 'c',
130
- label: 'Charlie',
131
- required: true
132
- }],
133
- formData: {}
134
- };
135
- var ERRORS = [];
136
-
137
- var ON_ERROR = function ON_ERROR(errors) {
138
- ERRORS.push.apply(ERRORS, _toConsumableArray(errors));
139
- };
140
-
141
- expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], ON_ERROR)).toBeFalsy();
142
- expect(ERRORS.length).toEqual(2);
143
- expect(ERRORS[0]).toEqual({
144
- id: 'a',
145
- error: 'Alpha is required'
146
- });
147
- expect(ERRORS[1]).toEqual({
148
- id: 'c',
149
- error: 'Charlie is required'
150
- });
151
- });
152
- });
24
+ var validatePages = function validatePages(pages) {
25
+ return pages.flatMap(function (page) {
26
+ return _Validate.default.page(page);
153
27
  });
28
+ };
29
+
30
+ it('should return true when all pages are valid', function () {
31
+ var PAGE_1 = {
32
+ components: [ALPHA],
33
+ formData: {
34
+ a: 'Bravo'
35
+ }
36
+ };
37
+ var PAGE_2 = {
38
+ components: [CHARLIE],
39
+ formData: {
40
+ c: 'Delta'
41
+ }
42
+ };
43
+ expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], validatePages)).toBeTruthy();
44
+ });
45
+ it('should return false when the first page is invalid', function () {
46
+ var PAGE_1 = {
47
+ components: [ALPHA],
48
+ formData: {}
49
+ };
50
+ var PAGE_2 = {
51
+ components: [CHARLIE],
52
+ formData: {
53
+ c: 'Delta'
54
+ }
55
+ };
56
+ expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], validatePages)).toBeFalsy();
57
+ });
58
+ it('should return false when the second page is invalid', function () {
59
+ var PAGE_1 = {
60
+ components: [ALPHA],
61
+ formData: {
62
+ a: 'Bravo'
63
+ }
64
+ };
65
+ var PAGE_2 = {
66
+ components: [CHARLIE],
67
+ formData: {}
68
+ };
69
+ expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], validatePages)).toBeFalsy();
70
+ });
71
+ it('should return false when the both pages are invalid', function () {
72
+ var PAGE_1 = {
73
+ components: [ALPHA],
74
+ formData: {}
75
+ };
76
+ var PAGE_2 = {
77
+ components: [CHARLIE],
78
+ formData: {}
79
+ };
80
+ expect((0, _canCYASubmit.default)([PAGE_1, PAGE_2], validatePages)).toBeFalsy();
154
81
  });
155
82
  });
@@ -47,7 +47,7 @@ var GroupAction = function GroupAction(_ref) {
47
47
  setAttrs((0, _getGroupActionAttributes.default)(group));
48
48
  }, [group, setAttrs]);
49
49
 
50
- if (!group.action) {
50
+ if (!(group !== null && group !== void 0 && group.action)) {
51
51
  return null;
52
52
  }
53
53
 
@@ -13,7 +13,9 @@ var _react = _interopRequireDefault(require("react"));
13
13
 
14
14
  var _GroupAction = _interopRequireDefault(require("./GroupAction"));
15
15
 
16
- var _RowAction = _interopRequireDefault(require("./RowAction"));
16
+ var _SummaryListRow = _interopRequireDefault(require("./SummaryListRow"));
17
+
18
+ var _SummaryListTitleRow = _interopRequireDefault(require("./SummaryListTitleRow"));
17
19
 
18
20
  require("./SummaryList.scss");
19
21
 
@@ -41,29 +43,40 @@ var SummaryList = function SummaryList(_ref) {
41
43
 
42
44
  var classes = _copReactComponents.Utils.classBuilder(classBlock, classModifiers, className);
43
45
 
46
+ var groupActionRow = null;
47
+
48
+ if (isGroup) {
49
+ var rowActions = rows.filter(function (r) {
50
+ return !!r.action;
51
+ });
52
+ groupActionRow = rowActions.length > 0 ? rowActions[0] : null;
53
+ }
54
+
44
55
  return /*#__PURE__*/_react.default.createElement("div", {
45
56
  className: "group-of-rows"
46
57
  }, /*#__PURE__*/_react.default.createElement("dl", _extends({}, attrs, {
47
58
  className: classes()
48
59
  }), rows.map(function (row) {
49
- var _row$component;
50
-
51
- return /*#__PURE__*/_react.default.createElement("div", {
52
- key: "".concat(row.pageId, "_").concat(row.fieldId),
53
- className: classes('row')
54
- }, /*#__PURE__*/_react.default.createElement("dt", {
55
- className: classes('key')
56
- }, row.key, !row.hasOwnProperty('required') && !((_row$component = row.component) !== null && _row$component !== void 0 && _row$component.required) && " (optional)", !row.hasOwnProperty('component') && row.hasOwnProperty('required') && !(row !== null && row !== void 0 && row.required) && " (optional)"), /*#__PURE__*/_react.default.createElement("dd", {
57
- className: classes('value')
58
- }, row.value), !noChangeAction && /*#__PURE__*/_react.default.createElement("dd", {
59
- className: classes('actions')
60
- }, row.action && /*#__PURE__*/_react.default.createElement(_RowAction.default, {
61
- row: row
62
- })));
60
+ var key = "".concat(row.pageId, "_").concat(row.full_path || row.fieldId);
61
+
62
+ if (row.type === 'title') {
63
+ return /*#__PURE__*/_react.default.createElement(_SummaryListTitleRow.default, {
64
+ key: key,
65
+ title: row.key,
66
+ classes: classes
67
+ });
68
+ }
69
+
70
+ return /*#__PURE__*/_react.default.createElement(_SummaryListRow.default, {
71
+ key: key,
72
+ row: row,
73
+ classes: classes,
74
+ showAction: !noChangeAction
75
+ });
63
76
  }), isGroup && /*#__PURE__*/_react.default.createElement("div", {
64
77
  className: "change-group-button"
65
78
  }, /*#__PURE__*/_react.default.createElement(_GroupAction.default, {
66
- group: rows[0]
79
+ group: groupActionRow
67
80
  }))));
68
81
  };
69
82
 
@@ -71,6 +84,7 @@ SummaryList.propTypes = {
71
84
  rows: _propTypes.default.arrayOf(_propTypes.default.shape({
72
85
  pageId: _propTypes.default.string.isRequired,
73
86
  fieldId: _propTypes.default.string.isRequired,
87
+ full_path: _propTypes.default.string,
74
88
  key: _propTypes.default.string.isRequired,
75
89
  value: _propTypes.default.any,
76
90
  action: _propTypes.default.shape({
@@ -80,10 +94,11 @@ SummaryList.propTypes = {
80
94
  onAction: _propTypes.default.func
81
95
  })
82
96
  })).isRequired,
97
+ noChangeAction: _propTypes.default.bool,
98
+ isGroup: _propTypes.default.bool,
83
99
  classBlock: _propTypes.default.string,
84
100
  classModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
85
- className: _propTypes.default.string,
86
- noChangeAction: _propTypes.default.bool
101
+ className: _propTypes.default.string
87
102
  };
88
103
  SummaryList.defaultProps = {
89
104
  classBlock: DEFAULT_CLASS,
@@ -1,13 +1,18 @@
1
1
  @import 'node_modules/govuk-frontend/govuk/_base';
2
2
  @import 'node_modules/govuk-frontend/govuk/components/summary-list/_summary-list';
3
3
 
4
- // .govuk-summary-list__actions {
5
- // .govuk-link {
6
- // float: right;
7
- // color: govuk-colour('blue');
8
- // cursor: pointer;
9
- // }
10
- // }
4
+ .govuk-summary-list__title {
5
+ width: 100%;
6
+ white-space: nowrap;
7
+ .govuk-heading-s {
8
+ margin-bottom: 10px;
9
+ }
10
+ &:not(:first-child) {
11
+ .govuk-heading-s {
12
+ margin-top: 20px;
13
+ }
14
+ }
15
+ }
11
16
 
12
17
  .changeRow {
13
18
  .govuk-link {
@@ -38,4 +43,3 @@
38
43
 
39
44
 
40
45
  }
41
-
@@ -35,15 +35,29 @@ describe('components', function () {
35
35
  return summaryList;
36
36
  };
37
37
 
38
+ var checkTitleRow = function checkTitleRow(summaryList, index) {
39
+ var row = summaryList.childNodes[index];
40
+ expect(row.tagName).toEqual('DIV');
41
+ expect(row.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__row"));
42
+ expect(row.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__title"));
43
+
44
+ var _row$childNodes = _slicedToArray(row.childNodes, 1),
45
+ heading = _row$childNodes[0];
46
+
47
+ expect(heading.tagName).toEqual('H3');
48
+ expect(heading.classList).toContain('govuk-heading-s');
49
+ return heading;
50
+ };
51
+
38
52
  var checkRow = function checkRow(summaryList, index) {
39
53
  var row = summaryList.childNodes[index];
40
54
  expect(row.tagName).toEqual('DIV');
41
55
  expect(row.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__row"));
42
56
 
43
- var _row$childNodes = _slicedToArray(row.childNodes, 3),
44
- key = _row$childNodes[0],
45
- value = _row$childNodes[1],
46
- actions = _row$childNodes[2];
57
+ var _row$childNodes2 = _slicedToArray(row.childNodes, 3),
58
+ key = _row$childNodes2[0],
59
+ value = _row$childNodes2[1],
60
+ actions = _row$childNodes2[2];
47
61
 
48
62
  expect(key.tagName).toEqual('DT');
49
63
  expect(key.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__key"));
@@ -59,9 +73,9 @@ describe('components', function () {
59
73
  expect(row.tagName).toEqual('DIV');
60
74
  expect(row.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__row"));
61
75
 
62
- var _row$childNodes2 = _slicedToArray(row.childNodes, 2),
63
- key = _row$childNodes2[0],
64
- value = _row$childNodes2[1];
76
+ var _row$childNodes3 = _slicedToArray(row.childNodes, 2),
77
+ key = _row$childNodes3[0],
78
+ value = _row$childNodes3[1];
65
79
 
66
80
  expect(key.tagName).toEqual('DT');
67
81
  expect(key.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__key"));
@@ -118,19 +132,23 @@ describe('components', function () {
118
132
  expect(actions.childNodes.length).toEqual(0);
119
133
  });
120
134
  });
121
- it('should handle rows with no actions and component values', function () {
135
+ it('should handle title rows', function () {
122
136
  var ID = 'test-id';
123
- var VALUES = ['Alpha component value', 'Bravo component value'];
124
137
  var ROWS = [{
138
+ pageId: 'p1',
139
+ fieldId: 'a',
140
+ type: 'title',
141
+ key: 'Title'
142
+ }, {
125
143
  pageId: 'p1',
126
144
  fieldId: 'a',
127
145
  key: 'Alpha',
128
- value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[0])
146
+ value: 'Alpha value'
129
147
  }, {
130
148
  pageId: 'p2',
131
149
  fieldId: 'b',
132
150
  key: 'Bravo',
133
- value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
151
+ value: 'Bravo value'
134
152
  }];
135
153
 
136
154
  var _render3 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
@@ -141,13 +159,62 @@ describe('components', function () {
141
159
 
142
160
  var summaryList = checkSummaryList(container, ID);
143
161
  expect(summaryList.childNodes.length).toEqual(ROWS.length);
144
- ROWS.forEach(function (row, index) {
162
+
163
+ var assessTitleRow = function assessTitleRow(row, index) {
164
+ var heading = checkTitleRow(summaryList, index);
165
+ expect(heading.textContent).toEqual(row.key);
166
+ };
167
+
168
+ var assessRow = function assessRow(row, index) {
145
169
  var _checkRow3 = checkRow(summaryList, index),
146
170
  _checkRow4 = _slicedToArray(_checkRow3, 3),
147
171
  key = _checkRow4[0],
148
172
  value = _checkRow4[1],
149
173
  actions = _checkRow4[2];
150
174
 
175
+ expect(key.textContent).toEqual("".concat(row.key, " (optional)"));
176
+ expect(value.textContent).toEqual(row.value);
177
+ expect(actions.childNodes.length).toEqual(0);
178
+ };
179
+
180
+ ROWS.forEach(function (row, index) {
181
+ if (row.type === 'title') {
182
+ assessTitleRow(row, index);
183
+ } else {
184
+ assessRow(row, index);
185
+ }
186
+ });
187
+ });
188
+ it('should handle rows with no actions and component values', function () {
189
+ var ID = 'test-id';
190
+ var VALUES = ['Alpha component value', 'Bravo component value'];
191
+ var ROWS = [{
192
+ pageId: 'p1',
193
+ fieldId: 'a',
194
+ key: 'Alpha',
195
+ value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[0])
196
+ }, {
197
+ pageId: 'p2',
198
+ fieldId: 'b',
199
+ key: 'Bravo',
200
+ value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
201
+ }];
202
+
203
+ var _render4 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
204
+ "data-testid": ID,
205
+ rows: ROWS
206
+ })),
207
+ container = _render4.container;
208
+
209
+ var summaryList = checkSummaryList(container, ID);
210
+ expect(summaryList.childNodes.length).toEqual(ROWS.length);
211
+ ROWS.forEach(function (row, index) {
212
+ var _checkRow5 = checkRow(summaryList, index),
213
+ _checkRow6 = _slicedToArray(_checkRow5, 3),
214
+ key = _checkRow6[0],
215
+ value = _checkRow6[1],
216
+ actions = _checkRow6[2];
217
+
151
218
  expect(key.textContent).toEqual("".concat(row.key, " (optional)"));
152
219
  expect(value.childNodes.length).toEqual(1);
153
220
  var valueDiv = value.childNodes[0];
@@ -184,20 +251,20 @@ describe('components', function () {
184
251
  }
185
252
  }];
186
253
 
187
- var _render4 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
254
+ var _render5 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
188
255
  "data-testid": ID,
189
256
  rows: ROWS
190
257
  })),
191
- container = _render4.container;
258
+ container = _render5.container;
192
259
 
193
260
  var summaryList = checkSummaryList(container, ID);
194
261
  expect(summaryList.childNodes.length).toEqual(ROWS.length);
195
262
  ROWS.forEach(function (row, index) {
196
- var _checkRow5 = checkRow(summaryList, index),
197
- _checkRow6 = _slicedToArray(_checkRow5, 3),
198
- key = _checkRow6[0],
199
- value = _checkRow6[1],
200
- actions = _checkRow6[2];
263
+ var _checkRow7 = checkRow(summaryList, index),
264
+ _checkRow8 = _slicedToArray(_checkRow7, 3),
265
+ key = _checkRow8[0],
266
+ value = _checkRow8[1],
267
+ actions = _checkRow8[2];
201
268
 
202
269
  expect(key.textContent).toEqual("".concat(row.key, " (optional)"));
203
270
  expect(value.textContent).toEqual(row.value);
@@ -225,12 +292,12 @@ describe('components', function () {
225
292
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
226
293
  }];
227
294
 
228
- var _render5 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
295
+ var _render6 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
229
296
  "data-testid": ID,
230
297
  rows: ROWS,
231
298
  noChangeAction: true
232
299
  })),
233
- container = _render5.container;
300
+ container = _render6.container;
234
301
 
235
302
  var summaryList = checkSummaryList(container, ID);
236
303
  expect(summaryList.childNodes.length).toEqual(ROWS.length);
@@ -268,20 +335,20 @@ describe('components', function () {
268
335
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[2])
269
336
  }];
270
337
 
271
- var _render6 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
338
+ var _render7 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
272
339
  "data-testid": ID,
273
340
  rows: ROWS,
274
341
  isGroup: ISGROUP
275
342
  })),
276
- container = _render6.container;
343
+ container = _render7.container;
277
344
 
278
345
  var summaryList = checkSummaryList(container, ID);
279
346
  expect(summaryList.childNodes.length).toEqual(ROWS.length + 1);
280
347
  ROWS.forEach(function (row, index) {
281
- var _checkRow7 = checkRow(summaryList, index),
282
- _checkRow8 = _slicedToArray(_checkRow7, 2),
283
- key = _checkRow8[0],
284
- value = _checkRow8[1];
348
+ var _checkRow9 = checkRow(summaryList, index),
349
+ _checkRow10 = _slicedToArray(_checkRow9, 2),
350
+ key = _checkRow10[0],
351
+ value = _checkRow10[1];
285
352
 
286
353
  expect(key.textContent).toEqual("".concat(row.key, " (optional)"));
287
354
  expect(value.childNodes.length).toEqual(1);
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _RowAction = _interopRequireDefault(require("./RowAction"));
13
+
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ // Global imports
17
+ // Local imports
18
+ var SummaryListRow = function SummaryListRow(_ref) {
19
+ var row = _ref.row,
20
+ classes = _ref.classes,
21
+ showAction = _ref.showAction;
22
+ return /*#__PURE__*/_react.default.createElement("div", {
23
+ className: classes('row')
24
+ }, /*#__PURE__*/_react.default.createElement("dt", {
25
+ className: classes('key')
26
+ }, row.key, !row.required && " (optional)"), /*#__PURE__*/_react.default.createElement("dd", {
27
+ className: classes('value')
28
+ }, row.value), showAction && /*#__PURE__*/_react.default.createElement("dd", {
29
+ className: classes('actions')
30
+ }, row.action && /*#__PURE__*/_react.default.createElement(_RowAction.default, {
31
+ row: row
32
+ })));
33
+ };
34
+
35
+ SummaryListRow.propTypes = {
36
+ row: _propTypes.default.shape({
37
+ key: _propTypes.default.string.isRequired,
38
+ required: _propTypes.default.bool,
39
+ value: _propTypes.default.any,
40
+ action: _propTypes.default.shape({
41
+ page: _propTypes.default.string,
42
+ label: _propTypes.default.string,
43
+ aria_suffix: _propTypes.default.string,
44
+ onAction: _propTypes.default.func
45
+ })
46
+ }).isRequired,
47
+ classes: _propTypes.default.func.isRequired,
48
+ showAction: _propTypes.default.bool
49
+ };
50
+ var _default = SummaryListRow;
51
+ exports.default = _default;