@ukhomeoffice/cop-react-form-renderer 5.74.5 → 5.75.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/SummaryList/SummaryList.js +7 -0
- package/dist/components/SummaryList/SummaryList.scss +15 -0
- package/dist/components/SummaryList/SummaryList.test.js +67 -7
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +48 -0
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +38 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +11 -6
- package/dist/utils/Component/optionIsSelected.js +5 -0
- package/dist/utils/Component/optionIsSelected.test.js +26 -0
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
10
10
|
var _GroupAction = _interopRequireDefault(require("./GroupAction"));
|
|
11
11
|
var _SummaryListRow = _interopRequireDefault(require("./SummaryListRow"));
|
|
12
12
|
var _SummaryListHeadingRow = _interopRequireDefault(require("./SummaryListHeadingRow"));
|
|
13
|
+
var _SummaryListHeadingRowWithAction = _interopRequireDefault(require("./SummaryListHeadingRowWithAction"));
|
|
13
14
|
var _SummaryListTitleRow = _interopRequireDefault(require("./SummaryListTitleRow"));
|
|
14
15
|
require("./SummaryList.scss");
|
|
15
16
|
var _excluded = ["rows", "noChangeAction", "noGroupAction", "isGroup", "classBlock", "classModifiers", "className"]; // Global imports
|
|
@@ -59,6 +60,12 @@ var SummaryList = function SummaryList(_ref) {
|
|
|
59
60
|
classes: classes
|
|
60
61
|
});
|
|
61
62
|
}
|
|
63
|
+
if (row.type === 'headingWithAction') {
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement(_SummaryListHeadingRowWithAction.default, {
|
|
65
|
+
row: row,
|
|
66
|
+
classes: classes
|
|
67
|
+
});
|
|
68
|
+
}
|
|
62
69
|
if (row.type === 'action') {
|
|
63
70
|
return noChangeAction ? null : /*#__PURE__*/_react.default.createElement("div", {
|
|
64
71
|
key: "".concat(key, "-actions")
|
|
@@ -33,6 +33,21 @@
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
.govuk-summary-list__headingWithAction {
|
|
37
|
+
display: table-row;
|
|
38
|
+
width: 100%;
|
|
39
|
+
white-space: nowrap;
|
|
40
|
+
.heading-text, .heading-action {
|
|
41
|
+
padding-bottom: 10px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
&:not(:first-child) {
|
|
45
|
+
.heading-text, .heading-action {
|
|
46
|
+
padding-top: 20px;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
36
51
|
.changeRow {
|
|
37
52
|
.govuk-link {
|
|
38
53
|
float: right;
|
|
@@ -56,13 +56,26 @@ describe('components', function () {
|
|
|
56
56
|
expect(actions.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__actions"));
|
|
57
57
|
return [key, value, actions];
|
|
58
58
|
};
|
|
59
|
-
var
|
|
59
|
+
var checkHeadingRowWithAction = function checkHeadingRowWithAction(summaryList, index) {
|
|
60
60
|
var row = summaryList.childNodes[index];
|
|
61
61
|
expect(row.tagName).toEqual('DIV');
|
|
62
|
-
expect(row.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "
|
|
62
|
+
expect(row.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__headingWithAction"));
|
|
63
63
|
var _row$childNodes3 = _slicedToArray(row.childNodes, 2),
|
|
64
64
|
key = _row$childNodes3[0],
|
|
65
|
-
|
|
65
|
+
action = _row$childNodes3[1];
|
|
66
|
+
expect(key.tagName).toEqual('TD');
|
|
67
|
+
expect(key.classList).toContain('heading-text');
|
|
68
|
+
expect(action.tagName).toEqual('TD');
|
|
69
|
+
expect(action.classList).toContain('heading-action');
|
|
70
|
+
return [key, action];
|
|
71
|
+
};
|
|
72
|
+
var checkRowNoChangeActions = function checkRowNoChangeActions(summaryList, index) {
|
|
73
|
+
var row = summaryList.childNodes[index];
|
|
74
|
+
expect(row.tagName).toEqual('DIV');
|
|
75
|
+
expect(row.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__row"));
|
|
76
|
+
var _row$childNodes4 = _slicedToArray(row.childNodes, 2),
|
|
77
|
+
key = _row$childNodes4[0],
|
|
78
|
+
value = _row$childNodes4[1];
|
|
66
79
|
expect(key.tagName).toEqual('DT');
|
|
67
80
|
expect(key.classList).toContain("".concat(_SummaryList.DEFAULT_CLASS, "__key"));
|
|
68
81
|
expect(value.tagName).toEqual('DD');
|
|
@@ -320,6 +333,53 @@ describe('components', function () {
|
|
|
320
333
|
expect(ON_ACTION_CALLS[index]).toEqual(row);
|
|
321
334
|
});
|
|
322
335
|
});
|
|
336
|
+
it('should handle heading rows with actions', function () {
|
|
337
|
+
var ID = 'test-id';
|
|
338
|
+
var ON_ACTION_CALLS = [];
|
|
339
|
+
var ON_ACTION = function ON_ACTION(row) {
|
|
340
|
+
ON_ACTION_CALLS.push(row);
|
|
341
|
+
};
|
|
342
|
+
var ROWS = [{
|
|
343
|
+
key: 'a',
|
|
344
|
+
pageId: 'p1',
|
|
345
|
+
type: 'headingWithAction',
|
|
346
|
+
size: 'm',
|
|
347
|
+
action: {
|
|
348
|
+
label: 'Change A',
|
|
349
|
+
onAction: ON_ACTION
|
|
350
|
+
}
|
|
351
|
+
}, {
|
|
352
|
+
key: 'b',
|
|
353
|
+
pageId: 'p2',
|
|
354
|
+
type: 'headingWithAction',
|
|
355
|
+
size: 'm',
|
|
356
|
+
action: {
|
|
357
|
+
label: 'Change B',
|
|
358
|
+
onAction: ON_ACTION
|
|
359
|
+
}
|
|
360
|
+
}];
|
|
361
|
+
var _render8 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
362
|
+
"data-testid": ID,
|
|
363
|
+
rows: ROWS
|
|
364
|
+
})),
|
|
365
|
+
container = _render8.container;
|
|
366
|
+
var summaryList = checkSummaryList(container, ID);
|
|
367
|
+
expect(summaryList.childNodes.length).toEqual(ROWS.length);
|
|
368
|
+
ROWS.forEach(function (row, index) {
|
|
369
|
+
var _checkHeadingRowWithA = checkHeadingRowWithAction(summaryList, index),
|
|
370
|
+
_checkHeadingRowWithA2 = _slicedToArray(_checkHeadingRowWithA, 2),
|
|
371
|
+
key = _checkHeadingRowWithA2[0],
|
|
372
|
+
actions = _checkHeadingRowWithA2[1];
|
|
373
|
+
expect(key.textContent).toEqual("".concat(row.key));
|
|
374
|
+
var a = actions.childNodes[0];
|
|
375
|
+
expect(a.textContent).toEqual(row.action.label);
|
|
376
|
+
_react.fireEvent.click(a, {});
|
|
377
|
+
expect(ON_ACTION_CALLS.length).toEqual(index + 1);
|
|
378
|
+
expect(ON_ACTION_CALLS[index]).toEqual({
|
|
379
|
+
action: row.action
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
});
|
|
323
383
|
it('should handle rows with component values and actions set to hidden', function () {
|
|
324
384
|
var ID = 'test-id';
|
|
325
385
|
var VALUES = ['Alpha component value', 'Bravo component value'];
|
|
@@ -334,12 +394,12 @@ describe('components', function () {
|
|
|
334
394
|
fieldId: 'b',
|
|
335
395
|
value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
|
|
336
396
|
}];
|
|
337
|
-
var
|
|
397
|
+
var _render9 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
338
398
|
"data-testid": ID,
|
|
339
399
|
rows: ROWS,
|
|
340
400
|
noChangeAction: true
|
|
341
401
|
})),
|
|
342
|
-
container =
|
|
402
|
+
container = _render9.container;
|
|
343
403
|
var summaryList = checkSummaryList(container, ID);
|
|
344
404
|
expect(summaryList.childNodes.length).toEqual(ROWS.length);
|
|
345
405
|
ROWS.forEach(function (row, index) {
|
|
@@ -377,12 +437,12 @@ describe('components', function () {
|
|
|
377
437
|
fieldId: 'c',
|
|
378
438
|
value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[2])
|
|
379
439
|
}];
|
|
380
|
-
var
|
|
440
|
+
var _render10 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
|
|
381
441
|
"data-testid": ID,
|
|
382
442
|
rows: ROWS,
|
|
383
443
|
isGroup: ISGROUP
|
|
384
444
|
})),
|
|
385
|
-
container =
|
|
445
|
+
container = _render10.container;
|
|
386
446
|
var summaryList = checkSummaryList(container, ID);
|
|
387
447
|
expect(summaryList.childNodes.length).toEqual(ROWS.length + 1);
|
|
388
448
|
ROWS.forEach(function (row, index) {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _copReactComponents = require("@ukhomeoffice/cop-react-components");
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _RowAction = _interopRequireDefault(require("./RowAction"));
|
|
11
|
+
require("./SummaryListHeadingRowWithAction.scss");
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
// Global imports
|
|
14
|
+
|
|
15
|
+
// Local imports
|
|
16
|
+
|
|
17
|
+
// Styles
|
|
18
|
+
|
|
19
|
+
var SummaryListHeadingRowWithAction = function SummaryListHeadingRowWithAction(_ref) {
|
|
20
|
+
var row = _ref.row,
|
|
21
|
+
classes = _ref.classes;
|
|
22
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
23
|
+
className: classes('headingWithAction')
|
|
24
|
+
}, /*#__PURE__*/_react.default.createElement("td", {
|
|
25
|
+
className: "heading-text",
|
|
26
|
+
colSpan: "2"
|
|
27
|
+
}, row.size === 's' && /*#__PURE__*/_react.default.createElement(_copReactComponents.SmallHeading, null, row.key), row.size === 'm' && /*#__PURE__*/_react.default.createElement(_copReactComponents.MediumHeading, null, row.key)), /*#__PURE__*/_react.default.createElement("td", {
|
|
28
|
+
className: "heading-action"
|
|
29
|
+
}, /*#__PURE__*/_react.default.createElement(_RowAction.default, {
|
|
30
|
+
row: {
|
|
31
|
+
action: row.action
|
|
32
|
+
}
|
|
33
|
+
})));
|
|
34
|
+
};
|
|
35
|
+
SummaryListHeadingRowWithAction.propTypes = {
|
|
36
|
+
classes: _propTypes.default.func.isRequired,
|
|
37
|
+
row: _propTypes.default.shape({
|
|
38
|
+
key: _propTypes.default.string.isRequired,
|
|
39
|
+
size: _propTypes.default.string,
|
|
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
|
+
};
|
|
48
|
+
var _default = exports.default = SummaryListHeadingRowWithAction;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.heading-with-action {
|
|
2
|
+
flex-direction: row;
|
|
3
|
+
width: 100%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.heading-text {
|
|
7
|
+
display: table-cell;
|
|
8
|
+
column-span: 2;
|
|
9
|
+
width: 80%;
|
|
10
|
+
|
|
11
|
+
.govuk-heading-m, .govuk-heading-s {
|
|
12
|
+
margin-bottom: 0;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.heading-action {
|
|
17
|
+
display: table-cell;
|
|
18
|
+
width: 20%;
|
|
19
|
+
text-align: right;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@media screen and (max-width: 640px) {
|
|
23
|
+
.heading-with-action {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
width: 100%;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.heading-text {
|
|
30
|
+
width: 100%
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.heading-action {
|
|
34
|
+
margin-bottom: govuk-spacing(3);
|
|
35
|
+
width: 20%;
|
|
36
|
+
text-align: left;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -56,7 +56,7 @@ var getTitleRowForItem = function getTitleRowForItem(page, item, pageId, labelCo
|
|
|
56
56
|
size: page.collection.titleSize || 's'
|
|
57
57
|
};
|
|
58
58
|
};
|
|
59
|
-
var getHeadingRow = function getHeadingRow(config, pageId, labelCount) {
|
|
59
|
+
var getHeadingRow = function getHeadingRow(config, pageId, labelCount, changeAction) {
|
|
60
60
|
if (config.text === '') {
|
|
61
61
|
return null;
|
|
62
62
|
}
|
|
@@ -65,8 +65,12 @@ var getHeadingRow = function getHeadingRow(config, pageId, labelCount) {
|
|
|
65
65
|
fieldId: "heading".concat(labelCount),
|
|
66
66
|
full_path: "heading".concat(labelCount),
|
|
67
67
|
key: config.text,
|
|
68
|
-
type: 'heading',
|
|
69
|
-
size: config.size || 's'
|
|
68
|
+
type: changeAction === null ? 'heading' : 'headingWithAction',
|
|
69
|
+
size: config.size || 's',
|
|
70
|
+
action: changeAction === null ? null : {
|
|
71
|
+
onAction: changeAction,
|
|
72
|
+
label: 'Change'
|
|
73
|
+
}
|
|
70
74
|
};
|
|
71
75
|
};
|
|
72
76
|
var getCollectionNameHeading = function getCollectionNameHeading(page, titleName) {
|
|
@@ -152,13 +156,14 @@ var getCYARowsForChildPages = function getCYARowsForChildPages(childPages, item,
|
|
|
152
156
|
// to be done here as the show_when checks could rely upon item-level
|
|
153
157
|
// data.
|
|
154
158
|
if ((0, _showFormPageCYA.default)(childPage, _objectSpread(_objectSpread({}, childPage.formData), item))) {
|
|
159
|
+
var changeAction = getChangeActionForPage(childPage, onAction, activeIds);
|
|
155
160
|
if (childPage.collection.heading) {
|
|
156
|
-
var
|
|
161
|
+
var headingAction = childPage.collection.heading.changeLink ? changeAction : null;
|
|
162
|
+
var headingRow = getHeadingRow(childPage.collection.heading, childPage.id, labelCount, headingAction);
|
|
157
163
|
rows = rows.concat(headingRow);
|
|
158
164
|
}
|
|
159
165
|
var container = getContainerForPage(childPage, item, labelCount, fullPath);
|
|
160
|
-
var
|
|
161
|
-
var containerRows = (0, _getCYARowsForContainer.default)(childPage, container, _objectSpread(_objectSpread({}, childPage.formData), item), rowChangeAction, fnOverride);
|
|
166
|
+
var containerRows = (0, _getCYARowsForContainer.default)(childPage, container, _objectSpread(_objectSpread({}, childPage.formData), item), changeAction, fnOverride);
|
|
162
167
|
rows = rows.concat(containerRows);
|
|
163
168
|
}
|
|
164
169
|
}
|
|
@@ -14,6 +14,11 @@ exports.default = void 0;
|
|
|
14
14
|
*/
|
|
15
15
|
var optionIsSelected = function optionIsSelected(componentValue, option) {
|
|
16
16
|
if (Array.isArray(componentValue)) {
|
|
17
|
+
if (option.refdata_match) {
|
|
18
|
+
return componentValue.some(function (v) {
|
|
19
|
+
return v.id === option.refdata_match.id;
|
|
20
|
+
});
|
|
21
|
+
}
|
|
17
22
|
return componentValue.includes(option.value);
|
|
18
23
|
}
|
|
19
24
|
return componentValue === option.value;
|
|
@@ -11,6 +11,20 @@ describe('utils.Component.isSelected', function () {
|
|
|
11
11
|
value: SELECTED_VALUE
|
|
12
12
|
}, {
|
|
13
13
|
value: NOT_SELECTED_VALUE
|
|
14
|
+
}, {
|
|
15
|
+
refdata_match: {
|
|
16
|
+
id: 99
|
|
17
|
+
},
|
|
18
|
+
nested: {
|
|
19
|
+
value: true
|
|
20
|
+
}
|
|
21
|
+
}, {
|
|
22
|
+
refdata_match: {
|
|
23
|
+
id: 100
|
|
24
|
+
},
|
|
25
|
+
nested: {
|
|
26
|
+
value: true
|
|
27
|
+
}
|
|
14
28
|
}];
|
|
15
29
|
var COMPONENT = {
|
|
16
30
|
id: 'a',
|
|
@@ -29,6 +43,18 @@ describe('utils.Component.isSelected', function () {
|
|
|
29
43
|
expect((0, _optionIsSelected.default)(PAGE.formData[COMPONENT.id], OPTIONS[0])).toEqual(true);
|
|
30
44
|
expect((0, _optionIsSelected.default)(PAGE.formData[COMPONENT.id], OPTIONS[1])).toEqual(false);
|
|
31
45
|
});
|
|
46
|
+
it('should properly identify which option is selected for checkboxes using refdata_match', function () {
|
|
47
|
+
var PAGE = {
|
|
48
|
+
formData: {
|
|
49
|
+
a: [{
|
|
50
|
+
id: 99
|
|
51
|
+
}]
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
COMPONENT.type = 'checkboxes';
|
|
55
|
+
expect((0, _optionIsSelected.default)(PAGE.formData[COMPONENT.id], OPTIONS[2])).toEqual(true);
|
|
56
|
+
expect((0, _optionIsSelected.default)(PAGE.formData[COMPONENT.id], OPTIONS[3])).toEqual(false);
|
|
57
|
+
});
|
|
32
58
|
it('should properly identify which option is selected for radios', function () {
|
|
33
59
|
var PAGE = {
|
|
34
60
|
formData: {
|