@ukhomeoffice/cop-react-form-renderer 5.90.2 → 5.91.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.
@@ -7,6 +7,7 @@ exports.default = exports.DEFAULT_TITLE = exports.DEFAULT_LIST_CLASS = exports.D
7
7
  var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _react = _interopRequireDefault(require("react"));
10
+ var _BannerStrip = _interopRequireDefault(require("./BannerStrip"));
10
11
  var _utils = _interopRequireDefault(require("../../utils"));
11
12
  var _getSummaryListRowForDetails = _interopRequireDefault(require("../../utils/CheckYourAnswers/getSummaryListRowForDetails"));
12
13
  var _Condition = _interopRequireDefault(require("../../utils/Condition"));
@@ -37,18 +38,24 @@ var RenderListView = function RenderListView(_ref) {
37
38
  masterPage = _ref.masterPage,
38
39
  classModifiers = _ref.classModifiers,
39
40
  optionalFieldPlaceholder = _ref.optionalFieldPlaceholder;
40
- var classes = _copReactComponents.Utils.classBuilder(DEFAULT_CLASS, classModifiers);
41
+ var classes = _copReactComponents.Utils.classBuilder(DEFAULT_CLASS, classModifiers, config.className);
41
42
  var listClass = _copReactComponents.Utils.classBuilder(DEFAULT_LIST_CLASS);
42
43
  return /*#__PURE__*/_react.default.createElement("div", {
43
44
  className: classes(),
44
45
  id: id
45
46
  }, /*#__PURE__*/_react.default.createElement("div", {
46
47
  className: classes('title-wrapper', [], 'dark')
48
+ }, /*#__PURE__*/_react.default.createElement("div", {
49
+ className: classes('title-content')
47
50
  }, /*#__PURE__*/_react.default.createElement("h2", {
48
51
  className: classes('title')
49
52
  }, _copReactComponents.Utils.interpolateString(config.title || DEFAULT_TITLE, _objectSpread(_objectSpread({}, entryData), {}, {
50
53
  index: entryData.index + 1
51
- }))), /*#__PURE__*/_react.default.createElement("ul", {
54
+ }))), config.banners && /*#__PURE__*/_react.default.createElement(_BannerStrip.default, {
55
+ id: "BannerStrip".concat(entryData.id),
56
+ banners: config.banners,
57
+ formData: entryData
58
+ })), /*#__PURE__*/_react.default.createElement("ul", {
52
59
  className: classes('actions')
53
60
  }, /*#__PURE__*/_react.default.createElement("li", {
54
61
  className: classes('action')
@@ -110,6 +117,8 @@ RenderListView.propTypes = {
110
117
  index: _propTypes.default.number.isRequired
111
118
  }).isRequired,
112
119
  config: _propTypes.default.shape({
120
+ className: _propTypes.default.string,
121
+ banners: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({})])),
113
122
  title: _propTypes.default.string,
114
123
  changeAction: _propTypes.default.shape({
115
124
  label: _propTypes.default.string,
@@ -183,6 +183,10 @@ $govuk-font-family: 'Roboto', arial, sans-serif;
183
183
  &--deleting-summary-card {
184
184
  background-color: #FCF0EE;
185
185
  }
186
+
187
+ &.error {
188
+ border-left: 7px solid red;
189
+ }
186
190
  }
187
191
 
188
192
  .govuk-summary-card__title-wrapper {
@@ -213,6 +217,11 @@ $govuk-font-family: 'Roboto', arial, sans-serif;
213
217
  }
214
218
  }
215
219
 
220
+ .govuk-summary-card__title-content {
221
+ display: flex;
222
+ flex-direction: column;
223
+ }
224
+
216
225
  .govuk-summary-card__actions {
217
226
  @include govuk-typography-responsive($size: 19);
218
227
  @include govuk-typography-weight-bold;
@@ -6,10 +6,13 @@ var _setupTests = require("../../setupTests");
6
6
  var _RenderListView = _interopRequireDefault(require("./RenderListView"));
7
7
  var _models = require("../../models");
8
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
- // Global imports.
10
-
9
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
14
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // Global imports.
11
15
  // Local imports.
12
-
13
16
  describe('components.CollectionSummary.RenderListView', function () {
14
17
  var ENTRY = {
15
18
  id: '001',
@@ -78,6 +81,13 @@ describe('components.CollectionSummary.RenderListView', function () {
78
81
  label: 'Delete label'
79
82
  }
80
83
  };
84
+ var CONFIG_ERROR = _objectSpread({
85
+ className: 'error',
86
+ banners: [{
87
+ "text": "MORE DETAILS NEEDED",
88
+ "classModifiers": ["red"]
89
+ }]
90
+ }, CONFIG);
81
91
  var ID = 'testListView';
82
92
  var onChangeArgs = [];
83
93
  var onChangeCalls = 0;
@@ -180,6 +190,33 @@ describe('components.CollectionSummary.RenderListView', function () {
180
190
  // Check if the index is rendered as expected in the title
181
191
  expect(title.textContent).toContain("Title text ".concat(ENTRY.index + 1));
182
192
  });
193
+ it('should render an Error Tag with Error className when passed an error in the Banner and ClassName', function () {
194
+ var _renderWithValidation3 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react2.default.createElement(_RenderListView.default, {
195
+ id: ID,
196
+ entryData: ENTRY,
197
+ config: CONFIG_ERROR,
198
+ onFullEdit: ON_CHANGE,
199
+ onDelete: ON_DELETE,
200
+ masterPage: MASTER_PAGE,
201
+ getComponentRow: getComponentRow
202
+ })),
203
+ container = _renderWithValidation3.container;
204
+ var listViewDiv = checkSetup(container);
205
+
206
+ // Check className
207
+ expect(listViewDiv.classList).toContain('error');
208
+
209
+ // Check for presence of Banner Strip
210
+ var bannerStrip = listViewDiv.querySelector('.hods-form-banner-strip');
211
+ expect(bannerStrip).not.toBeNull();
212
+ expect(bannerStrip.id).toEqual('BannerStrip001');
213
+
214
+ // Check for presence of Error Tag with correct tagName, className, and Text content
215
+ var errorTag = listViewDiv.querySelector('.hods-form-banner-strip__tag--red');
216
+ expect(errorTag).not.toBeNull();
217
+ expect(errorTag.tagName).toBe('STRONG');
218
+ expect(errorTag.innerHTML).toContain('MORE DETAILS NEEDED');
219
+ });
183
220
  describe('Action buttons in RenderListView', function () {
184
221
  beforeEach(function () {
185
222
  onChangeArgs = [];
@@ -188,7 +225,7 @@ describe('components.CollectionSummary.RenderListView', function () {
188
225
  onDeleteCalls = 0;
189
226
  });
190
227
  it('should render and handle action buttons correctly', function () {
191
- var _renderWithValidation3 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react2.default.createElement(_RenderListView.default, {
228
+ var _renderWithValidation4 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react2.default.createElement(_RenderListView.default, {
192
229
  id: ID,
193
230
  entryData: ENTRY,
194
231
  config: CONFIG,
@@ -197,7 +234,7 @@ describe('components.CollectionSummary.RenderListView', function () {
197
234
  masterPage: MASTER_PAGE,
198
235
  getComponentRow: getComponentRow
199
236
  })),
200
- container = _renderWithValidation3.container;
237
+ container = _renderWithValidation4.container;
201
238
  var listViewDiv = container.querySelector('.govuk-summary-card');
202
239
  expect(listViewDiv).not.toBeNull();
203
240
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "5.90.2",
3
+ "version": "5.91.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",