@ukhomeoffice/cop-react-form-renderer 2.8.4 → 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.
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +8 -12
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +11 -9
- package/dist/components/FormComponent/Collection.js +244 -0
- package/dist/components/FormComponent/Collection.scss +23 -0
- package/dist/components/FormComponent/Container.js +110 -0
- package/dist/components/FormComponent/Container.test.js +26 -26
- package/dist/components/FormComponent/FormComponent.js +65 -128
- package/dist/components/FormComponent/FormComponent.test.js +19 -19
- package/dist/components/FormComponent/helpers/getComponentError.js +31 -0
- package/dist/components/FormComponent/helpers/getComponentError.test.js +52 -0
- package/dist/components/FormComponent/helpers/index.js +15 -0
- package/dist/components/FormPage/FormPage.js +7 -11
- package/dist/components/FormPage/FormPage.test.js +12 -76
- package/dist/components/FormRenderer/FormRenderer.js +103 -44
- package/dist/components/FormRenderer/helpers/canActionProceed.js +3 -12
- package/dist/components/FormRenderer/helpers/canActionProceed.test.js +41 -65
- package/dist/components/FormRenderer/helpers/canCYASubmit.js +3 -24
- package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +72 -145
- package/dist/components/SummaryList/GroupAction.js +6 -2
- package/dist/components/SummaryList/SummaryList.js +33 -18
- package/dist/components/SummaryList/SummaryList.scss +12 -8
- package/dist/components/SummaryList/SummaryList.test.js +94 -27
- package/dist/components/SummaryList/SummaryListRow.js +51 -0
- package/dist/components/SummaryList/SummaryListTitleRow.js +30 -0
- package/dist/context/ValidationContext/ValidationContext.js +122 -0
- package/dist/context/ValidationContext/ValidationContext.test.js +98 -0
- package/dist/context/ValidationContext/index.js +23 -0
- package/dist/context/index.js +15 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/useValidation.js +19 -0
- package/dist/index.js +11 -5
- package/dist/json/group.json +1 -17
- package/dist/json/port.json +346 -0
- package/dist/json/sublocation.json +859 -0
- package/dist/json/terminal.json +81 -0
- package/dist/models/CollectionLabels.js +14 -0
- package/dist/models/ComponentTypes.js +2 -0
- package/dist/models/index.js +8 -0
- package/dist/setupTests.js +32 -0
- package/dist/utils/CheckYourAnswers/getCYARow.js +14 -0
- package/dist/utils/CheckYourAnswers/getCYARow.test.js +34 -11
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +1 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +89 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +194 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +9 -13
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +11 -4
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +58 -14
- package/dist/utils/Component/cleanAttributes.js +1 -1
- package/dist/utils/Component/getComponent.js +36 -3
- package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +92 -0
- package/dist/utils/Component/getDefaultValue.js +25 -0
- package/dist/utils/Component/getDefaultValue.test.js +53 -0
- package/dist/utils/Component/index.js +4 -1
- package/dist/utils/Meta/constants.js +10 -0
- package/dist/utils/Meta/documents/getDocuments.js +18 -0
- package/dist/utils/Meta/documents/getDocuments.test.js +43 -0
- package/dist/utils/Meta/documents/index.js +23 -0
- package/dist/utils/Meta/documents/setDocumentForField.js +36 -0
- package/dist/utils/Meta/documents/setDocumentForField.test.js +49 -0
- package/dist/utils/Meta/index.js +21 -0
- package/dist/utils/Validate/validateCollection.js +42 -0
- package/dist/utils/Validate/validateCollection.test.js +74 -0
- package/dist/utils/Validate/validateComponent.js +67 -48
- package/dist/utils/Validate/validateComponent.test.js +247 -188
- package/dist/utils/Validate/validateContainer.js +29 -0
- package/dist/utils/Validate/validateContainer.test.js +68 -0
- package/dist/utils/index.js +4 -1
- package/package.json +2 -2
|
@@ -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}
|
|
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,
|
|
33
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
});
|
|
@@ -21,6 +21,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
21
21
|
|
|
22
22
|
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; }
|
|
23
23
|
|
|
24
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
25
|
+
|
|
24
26
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
25
27
|
|
|
26
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."); }
|
|
@@ -45,11 +47,13 @@ var GroupAction = function GroupAction(_ref) {
|
|
|
45
47
|
setAttrs((0, _getGroupActionAttributes.default)(group));
|
|
46
48
|
}, [group, setAttrs]);
|
|
47
49
|
|
|
48
|
-
if (!group.action) {
|
|
50
|
+
if (!(group !== null && group !== void 0 && group.action)) {
|
|
49
51
|
return null;
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
return /*#__PURE__*/_react.default.createElement(_copReactComponents.Link,
|
|
54
|
+
return /*#__PURE__*/_react.default.createElement(_copReactComponents.Link, _extends({}, attrs, {
|
|
55
|
+
"aria-label": "".concat(group.action.label, " ").concat(group.action.aria_suffix)
|
|
56
|
+
}), group.action.label, group.action.aria_suffix && /*#__PURE__*/_react.default.createElement("span", {
|
|
53
57
|
className: "mobile-text govuk-link"
|
|
54
58
|
}, ' ', "".concat(group.action.aria_suffix)));
|
|
55
59
|
};
|
|
@@ -13,7 +13,9 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _GroupAction = _interopRequireDefault(require("./GroupAction"));
|
|
15
15
|
|
|
16
|
-
var
|
|
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
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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:
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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$
|
|
44
|
-
key = _row$
|
|
45
|
-
value = _row$
|
|
46
|
-
actions = _row$
|
|
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$
|
|
63
|
-
key = _row$
|
|
64
|
-
value = _row$
|
|
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
|
|
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:
|
|
146
|
+
value: 'Alpha value'
|
|
129
147
|
}, {
|
|
130
148
|
pageId: 'p2',
|
|
131
149
|
fieldId: 'b',
|
|
132
150
|
key: 'Bravo',
|
|
133
|
-
value:
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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
|
|
197
|
-
|
|
198
|
-
key =
|
|
199
|
-
value =
|
|
200
|
-
actions =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
282
|
-
|
|
283
|
-
key =
|
|
284
|
-
value =
|
|
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;
|