@ukhomeoffice/cop-react-form-renderer 5.74.6 → 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.
@@ -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 checkRowNoChangeActions = function checkRowNoChangeActions(summaryList, index) {
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, "__row"));
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
- value = _row$childNodes3[1];
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 _render8 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
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 = _render8.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 _render9 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
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 = _render9.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 headingRow = getHeadingRow(childPage.collection.heading, childPage.id, labelCount);
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 rowChangeAction = getChangeActionForPage(childPage, onAction, activeIds);
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "5.74.6",
3
+ "version": "5.75.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",