@ukhomeoffice/cop-react-form-renderer 4.79.0 → 4.80.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.
@@ -9,6 +9,7 @@ var _copReactComponents = require("@ukhomeoffice/cop-react-components");
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
  var _hooks = require("../../hooks");
12
+ var _models = require("../../models");
12
13
  var _utils = _interopRequireDefault(require("../../utils"));
13
14
  var _PageActions = _interopRequireDefault(require("../PageActions"));
14
15
  var _SummaryList = _interopRequireDefault(require("../SummaryList"));
@@ -78,7 +79,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
78
79
  var pagesWithMergedCollections = _utils.default.CollectionPage.mergePages(_pages);
79
80
  var pagesWithRows = pagesWithMergedCollections.map(function (page, index) {
80
81
  var rows = getRows(page, index);
81
- return rows.length > 0 ? _objectSpread(_objectSpread({}, page), {}, {
82
+ return rows !== null && rows !== void 0 && rows.length ? _objectSpread(_objectSpread({}, page), {}, {
82
83
  rows: rows
83
84
  }) : null;
84
85
  }).filter(function (p) {
@@ -92,17 +93,9 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
92
93
  };
93
94
  (0, _react.useEffect)(function () {
94
95
  var groupsList = function groupsList() {
95
- var groupIds = [];
96
- if (groups !== undefined) {
97
- if (groups.length) {
98
- groups.forEach(function (group) {
99
- var groupedPageId = group.pageId;
100
- groupIds.push(groupedPageId);
101
- });
102
- }
103
- ;
104
- }
105
- ;
96
+ var groupIds = Array.isArray(groups) ? groups.map(function (group) {
97
+ return group.pageId;
98
+ }) : [];
106
99
  setListOfGroups(groupIds);
107
100
  };
108
101
  groupsList();
@@ -127,19 +120,13 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
127
120
  if (override) {
128
121
  return override;
129
122
  }
130
- ;
131
123
  var isGroup = function isGroup(pageId) {
132
124
  return listOfGroups.includes(pageId);
133
125
  };
134
126
  var getGroupForPage = function getGroupForPage(pageId) {
135
- var groupAnswer;
136
- if (groups !== undefined) {
137
- groupAnswer = groups.find(function (group) {
138
- return group.pageId === pageId;
139
- });
140
- }
141
- ;
142
- return groupAnswer;
127
+ return groups === null || groups === void 0 ? void 0 : groups.find(function (group) {
128
+ return group.pageId === pageId;
129
+ });
143
130
  };
144
131
  return /*#__PURE__*/_react.default.createElement("div", {
145
132
  className: DEFAULT_CLASS
@@ -147,7 +134,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
147
134
  key: "heading"
148
135
  }, title), errors && errors.length > 0 && /*#__PURE__*/_react.default.createElement(_copReactComponents.ErrorSummary, {
149
136
  errors: errors
150
- }), type === 'task-list-cya' && pages.length > 0 && sections && sections.map(function (section) {
137
+ }), type === _models.FormTypes.TASK_CYA && pages.length > 0 && sections && sections.map(function (section) {
151
138
  return section.tasks.map(function (task) {
152
139
  var filterPages = pages.filter(function (page) {
153
140
  return task.pages.some(function (p) {
@@ -157,12 +144,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
157
144
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h3", {
158
145
  className: "govuk-heading-m govuk-!-margin-top-8 govuk-!-margin-bottom-0"
159
146
  }, filterPages.length > 0 && task.name), filterPages.map(function (page, pageIndex) {
160
- var hideActionButtons;
161
- if (isGroup(page.id)) {
162
- hideActionButtons = true;
163
- } else {
164
- hideActionButtons = noChangeAction;
165
- }
147
+ var hideActionButtons = isGroup(page.id) || noChangeAction;
166
148
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
167
149
  key: pageIndex
168
150
  }, !hide_page_titles && page.title && !isGroup(page.id) && /*#__PURE__*/_react.default.createElement("h4", {
@@ -176,20 +158,11 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
176
158
  }));
177
159
  }));
178
160
  });
179
- }), type !== 'task-list-cya' && pages && pages.map(function (page, pageIndex, array) {
161
+ }), type !== _models.FormTypes.TASK_CYA && pages && pages.map(function (page, pageIndex, array) {
180
162
  var pageMarginBottom = isLastPage(pageIndex) || isGroup(array[pageIndex].id) || isGroup(array[pageIndex + 1].id) ? DEFAULT_MARGIN_BOTTOM : listMarginBottom;
181
- var currentGroup;
182
- if (isGroup(page.id)) {
183
- currentGroup = getGroupForPage(page.id);
184
- }
185
- ;
163
+ var currentGroup = isGroup(page.id) ? getGroupForPage(page.id) : undefined;
186
164
  var className = "govuk-!-margin-bottom-".concat(pageMarginBottom);
187
- var hideActionButtons;
188
- if (isGroup(page.id)) {
189
- hideActionButtons = true;
190
- } else {
191
- hideActionButtons = noChangeAction;
192
- }
165
+ var hideActionButtons = isGroup(page.id) || noChangeAction;
193
166
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
194
167
  key: pageIndex
195
168
  }, !hide_page_titles && page.title && !isGroup(page.id) && /*#__PURE__*/_react.default.createElement(_copReactComponents.MediumHeading, null, _utils.default.interpolateString(page.title, page.formData)), isGroup(page.id) && /*#__PURE__*/_react.default.createElement("div", {
@@ -211,7 +184,7 @@ var CheckYourAnswers = function CheckYourAnswers(_ref) {
211
184
  };
212
185
  CheckYourAnswers.propTypes = {
213
186
  actions: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.string])),
214
- groups: _propTypes.default.shape([]),
187
+ groups: _propTypes.default.arrayOf(_propTypes.default.shape({})),
215
188
  hide_actions: _propTypes.default.bool,
216
189
  hide_page_titles: _propTypes.default.bool,
217
190
  hide_title: _propTypes.default.bool,
@@ -224,7 +197,7 @@ CheckYourAnswers.propTypes = {
224
197
  name: _propTypes.default.string.isRequired,
225
198
  tasks: _propTypes.default.arrayOf(_propTypes.default.shape({
226
199
  name: _propTypes.default.string.isRequired,
227
- pages: _propTypes.default.shape([]).isRequired,
200
+ pages: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
228
201
  state: _propTypes.default.string.isRequired
229
202
  })).isRequired
230
203
  })),
@@ -109,7 +109,7 @@ CollectionPage.propTypes = {
109
109
  name: _propTypes.default.string.isRequired
110
110
  }).isRequired,
111
111
  components: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object])).isRequired,
112
- actions: _propTypes.default.shape([]),
112
+ actions: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({}), _propTypes.default.string])),
113
113
  formData: _propTypes.default.shape({}).isRequired
114
114
  }).isRequired,
115
115
  onAction: _propTypes.default.func.isRequired,
@@ -150,7 +150,7 @@ var Collection = function Collection(_ref) {
150
150
  full_path: fullPath,
151
151
  components: config.item.map(function (component) {
152
152
  return _objectSpread(_objectSpread({}, component), {}, {
153
- readonly: config.readonly ? true : component.readonly,
153
+ readonly: !!(config !== null && config !== void 0 && config.readonly || component.readonly),
154
154
  label: _utils.default.interpolateString(component.label, _objectSpread(_objectSpread({}, item), {}, {
155
155
  index: labelCount
156
156
  })),
@@ -192,7 +192,7 @@ Collection.propTypes = {
192
192
  add: _propTypes.default.string,
193
193
  remove: _propTypes.default.string
194
194
  }),
195
- minimumEntries: _propTypes.default.string,
195
+ minimumEntries: _propTypes.default.number,
196
196
  readonly: _propTypes.default.bool,
197
197
  removeLocation: _propTypes.default.string,
198
198
  required: _propTypes.default.bool
@@ -200,7 +200,11 @@ Collection.propTypes = {
200
200
  formData: _propTypes.default.shape({}),
201
201
  onChange: _propTypes.default.func,
202
202
  onTopLevelChange: _propTypes.default.func,
203
- value: _propTypes.default.arrayOf(_propTypes.default.shape()),
203
+ value: _propTypes.default.oneOfType([_propTypes.default.node,
204
+ // not included in node
205
+ _propTypes.default.shape({
206
+ id: _propTypes.default.string
207
+ }), _propTypes.default.arrayOf(_propTypes.default.shape({}))]),
204
208
  wrap: _propTypes.default.bool
205
209
  };
206
210
  Collection.defaultProps = {
@@ -9,6 +9,7 @@ var _react = _interopRequireDefault(require("react"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _models = require("../../models");
11
11
  var _utils = _interopRequireDefault(require("../../utils"));
12
+ var _cleanAttributes = _interopRequireDefault(require("../../utils/Component/cleanAttributes"));
12
13
  var _FormComponent = _interopRequireDefault(require("./FormComponent"));
13
14
  var _excluded = ["container", "value", "formData", "onChange", "wrap", "onTopLevelChange"];
14
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -60,7 +61,8 @@ var Container = function Container(_ref) {
60
61
  }), formData);
61
62
  };
62
63
  var classes = _utils.default.classBuilder(DEFAULT_CLASS, [], container.className);
63
- return /*#__PURE__*/_react.default.createElement("div", _extends({}, attrs, {
64
+ var htmlAttrs = (0, _cleanAttributes.default)(attrs);
65
+ return /*#__PURE__*/_react.default.createElement("div", _extends({}, htmlAttrs, {
64
66
  className: classes(),
65
67
  id: container.id
66
68
  }), container.components && container.components.filter(shouldShow).map(function (component, index) {
@@ -72,7 +74,7 @@ var Container = function Container(_ref) {
72
74
  }, attrs, {
73
75
  component: _objectSpread(_objectSpread({}, component), {}, {
74
76
  full_path: fullPath,
75
- readonly: container.readonly ? true : component.readonly
77
+ readonly: !!(container.readonly || component.readonly)
76
78
  }),
77
79
  formData: formData,
78
80
  value: val || defaultValue,
@@ -98,7 +100,11 @@ Container.propTypes = {
98
100
  fullPath: _propTypes.default.string,
99
101
  onChange: _propTypes.default.func,
100
102
  onTopLevelChange: _propTypes.default.func,
101
- value: _propTypes.default.string,
103
+ value: _propTypes.default.oneOfType([_propTypes.default.node,
104
+ // not included in node
105
+ _propTypes.default.shape({
106
+ id: _propTypes.default.string
107
+ }), _propTypes.default.arrayOf(_propTypes.default.shape({}))]),
102
108
  wrap: _propTypes.default.bool
103
109
  };
104
110
  Container.defaultProps = {
@@ -132,9 +132,9 @@ var FormComponent = function FormComponent(_ref) {
132
132
  };
133
133
  FormComponent.propTypes = {
134
134
  component: _propTypes.default.shape({
135
- additionalValidation: _propTypes.default.shape([]),
135
+ additionalValidation: _propTypes.default.arrayOf(_propTypes.default.shape({})),
136
136
  allowMultiple: _propTypes.default.bool,
137
- content: _propTypes.default.shape({}),
137
+ content: _propTypes.default.string,
138
138
  cya_label: _propTypes.default.string,
139
139
  data: _propTypes.default.shape({
140
140
  options: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object])),
@@ -149,7 +149,11 @@ FormComponent.propTypes = {
149
149
  suffix: _propTypes.default.string,
150
150
  type: _propTypes.default.string
151
151
  }).isRequired,
152
- value: _propTypes.default.string,
152
+ value: _propTypes.default.oneOfType([_propTypes.default.node,
153
+ // not included in node
154
+ _propTypes.default.shape({
155
+ id: _propTypes.default.string
156
+ }), _propTypes.default.arrayOf(_propTypes.default.shape({}))]),
153
157
  formData: _propTypes.default.shape({}),
154
158
  wrap: _propTypes.default.bool,
155
159
  onChange: _propTypes.default.func,
@@ -69,7 +69,6 @@ var FormPage = function FormPage(_ref) {
69
69
  if (typeof onChange === 'function') {
70
70
  onChange(page.formData);
71
71
  }
72
- ;
73
72
  };
74
73
  (0, _react.useEffect)(function () {
75
74
  // eslint-disable-next-line no-useless-concat
@@ -115,7 +114,7 @@ FormPage.propTypes = {
115
114
  classBlock: _propTypes.default.string,
116
115
  classModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
117
116
  className: _propTypes.default.string,
118
- hashLink: _propTypes.default.string,
117
+ hashLink: _propTypes.default.bool,
119
118
  onAction: _propTypes.default.func.isRequired,
120
119
  // If passed in, this function will override the default
121
120
  // onPageChange functionality. Useful for anything that
@@ -127,7 +126,7 @@ FormPage.propTypes = {
127
126
  id: _propTypes.default.string.isRequired,
128
127
  title: _propTypes.default.string,
129
128
  components: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({})])).isRequired,
130
- actions: _propTypes.default.shape([]),
129
+ actions: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({}), _propTypes.default.string])),
131
130
  formData: _propTypes.default.shape({}).isRequired
132
131
  }).isRequired
133
132
  };
@@ -135,7 +134,7 @@ FormPage.defaultProps = {
135
134
  classBlock: DEFAULT_CLASS,
136
135
  classModifiers: [],
137
136
  className: '',
138
- hashLink: '',
137
+ hashLink: false,
139
138
  onChange: undefined,
140
139
  onTopLevelChange: undefined,
141
140
  onWrapperChange: undefined
@@ -22,10 +22,13 @@ var _onCYAAction = _interopRequireDefault(require("./onCYAAction"));
22
22
  var _onPageAction = _interopRequireDefault(require("./onPageAction"));
23
23
  var _onTaskAction2 = _interopRequireDefault(require("./onTaskAction"));
24
24
  require("./FormRenderer.scss");
25
+ var _excluded = ["noTaskCYAs", "nonSequential"];
25
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
27
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
28
  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; }
28
29
  function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
30
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
31
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
29
32
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
30
33
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
34
  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; }
@@ -218,8 +221,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
218
221
  setPagePoint(undefined);
219
222
  // In case of refresh the current task needs to be reset
220
223
  hooks.onFormLoad(function (currentTask) {
221
- var task = currentTask;
222
- setCurrentTask(task);
224
+ setCurrentTask(currentTask);
223
225
  });
224
226
  }, [hooks]);
225
227
  (0, _react.useEffect)(function () {
@@ -227,7 +229,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
227
229
  }, [_hub]);
228
230
 
229
231
  // Calling setData directly within the hooks.onSubmit success handler
230
- // resulted in a sychronisation error. Handling it in a useEffect appears
232
+ // resulted in a synchronisation error. Handling it in a useEffect appears
231
233
  // to be the way to deal with this... and it certainly seems to work.
232
234
  (0, _react.useEffect)(function () {
233
235
  if (submitted !== null && submitted !== void 0 && submitted.data) {
@@ -302,7 +304,6 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
302
304
  });
303
305
  });
304
306
  }
305
- ;
306
307
  if (page) {
307
308
  _handlers.default.cyaAction(page, pageId, onPageChange);
308
309
  }
@@ -312,6 +313,11 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
312
313
  var currentCYA = cya;
313
314
  currentCYA.actions = [_models.PageAction.TYPES.SAVE_AND_CONTINUE, _models.PageAction.TYPES.SAVE_AND_RETURN];
314
315
  }
316
+
317
+ // filter out invalid attribs
318
+ var _noCYA = hubDetails.noTaskCYAs,
319
+ _nonSeq = hubDetails.nonSequential,
320
+ taskDetails = _objectWithoutProperties(hubDetails, _excluded);
315
321
  return /*#__PURE__*/_react.default.createElement("div", {
316
322
  className: classes()
317
323
  }, title && !hideTitle && pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_copReactComponents.LargeHeading, null, title), formState.cya && /*#__PURE__*/_react.default.createElement(_CheckYourAnswers.default, _extends({
@@ -331,7 +337,7 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
331
337
  noGroupAction: (_formState$cya$hideGr = formState.cya.hideGroupActions) !== null && _formState$cya$hideGr !== void 0 ? _formState$cya$hideGr : false,
332
338
  sections: typeof hubDetails !== 'undefined' ? hubDetails.sections : [],
333
339
  type: type
334
- })), hub === _models.HubFormats.TASK && formState.pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_TaskList.default, _extends({}, hubDetails, {
340
+ })), hub === _models.HubFormats.TASK && formState.pageId === _models.FormPages.HUB && /*#__PURE__*/_react.default.createElement(_TaskList.default, _extends({}, taskDetails, {
335
341
  refNumber: data.businessKey,
336
342
  onTaskAction: function onTaskAction(task) {
337
343
  (0, _onTaskAction2.default)(task, pages, setCurrentTask, hubDetails, data, onPageChange);
@@ -357,7 +363,7 @@ var propTypes = {
357
363
  className: _propTypes.default.string,
358
364
  components: _propTypes.default.arrayOf(_propTypes.default.shape({})).isRequired,
359
365
  cya: _propTypes.default.shape({
360
- actions: _propTypes.default.shape([])
366
+ actions: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({}), _propTypes.default.string]))
361
367
  }),
362
368
  data: _propTypes.default.shape({
363
369
  formStatus: _propTypes.default.shape({
@@ -369,7 +375,7 @@ var propTypes = {
369
375
  hooks: _propTypes.default.shape({}),
370
376
  hub: _propTypes.default.shape({
371
377
  nonSequential: _propTypes.default.bool,
372
- sections: _propTypes.default.shape([])
378
+ sections: _propTypes.default.arrayOf(_propTypes.default.shape({}))
373
379
  }),
374
380
  newPageId: _propTypes.default.string,
375
381
  noChangeAction: _propTypes.default.bool,
@@ -28,7 +28,7 @@ var PageActions = function PageActions(_ref) {
28
28
  }));
29
29
  };
30
30
  PageActions.propTypes = {
31
- actions: _propTypes.default.shape([]).isRequired,
31
+ actions: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.shape({}), _propTypes.default.string])).isRequired,
32
32
  onAction: _propTypes.default.func.isRequired
33
33
  };
34
34
  var _default = PageActions;
@@ -34,7 +34,7 @@ var SummaryList = function SummaryList(_ref) {
34
34
  var rowActions = rows.filter(function (r) {
35
35
  return !!r.action;
36
36
  });
37
- groupActionRow = rowActions.length > 0 ? rowActions[0] : null;
37
+ groupActionRow = rowActions !== null && rowActions !== void 0 && rowActions.length ? rowActions[0] : null;
38
38
  }
39
39
  return /*#__PURE__*/_react.default.createElement("div", {
40
40
  className: "group-of-rows"
@@ -90,7 +90,7 @@ SummaryList.propTypes = {
90
90
  fieldId: _propTypes.default.string.isRequired,
91
91
  full_path: _propTypes.default.string,
92
92
  key: _propTypes.default.string.isRequired,
93
- value: _propTypes.default.string,
93
+ value: _propTypes.default.node,
94
94
  action: _propTypes.default.shape({
95
95
  page: _propTypes.default.string,
96
96
  label: _propTypes.default.string,
@@ -83,19 +83,20 @@ describe('components', function () {
83
83
  it('should handle rows with no actions and string values', function () {
84
84
  var ID = 'test-id';
85
85
  var ROWS = [{
86
+ key: 'a',
86
87
  pageId: 'p1',
87
88
  fieldId: 'a',
88
- key: 'Alpha',
89
89
  value: 'Alpha value'
90
90
  }, {
91
+ key: 'b',
91
92
  pageId: 'p2',
92
93
  fieldId: 'b',
93
- key: 'Bravo',
94
94
  value: 'Bravo value'
95
95
  }];
96
96
  var _render2 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
97
97
  "data-testid": ID,
98
- rows: ROWS
98
+ rows: ROWS,
99
+ noGroupAction: true
99
100
  })),
100
101
  container = _render2.container;
101
102
  var summaryList = checkSummaryList(container, ID);
@@ -114,19 +115,19 @@ describe('components', function () {
114
115
  it('should handle title rows', function () {
115
116
  var ID = 'test-id';
116
117
  var ROWS = [{
118
+ key: 'Title',
117
119
  pageId: 'p1',
118
120
  fieldId: 'a',
119
- type: 'title',
120
- key: 'Title'
121
+ type: 'title'
121
122
  }, {
123
+ key: 'b',
122
124
  pageId: 'p1',
123
- fieldId: 'a',
124
- key: 'Alpha',
125
+ fieldId: 'b',
125
126
  value: 'Alpha value'
126
127
  }, {
128
+ key: 'c',
127
129
  pageId: 'p2',
128
- fieldId: 'b',
129
- key: 'Bravo',
130
+ fieldId: 'c',
130
131
  value: 'Bravo value'
131
132
  }];
132
133
  var _render3 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
@@ -161,6 +162,7 @@ describe('components', function () {
161
162
  it('should handle action rows', function () {
162
163
  var ID = 'test-id';
163
164
  var ROWS = [{
165
+ key: 'a',
164
166
  pageId: 'p1',
165
167
  fieldId: 'a',
166
168
  type: 'action',
@@ -168,6 +170,7 @@ describe('components', function () {
168
170
  label: 'Do action'
169
171
  }
170
172
  }, {
173
+ key: 'b',
171
174
  pageId: 'p2',
172
175
  fieldId: 'b',
173
176
  type: 'action',
@@ -175,6 +178,7 @@ describe('components', function () {
175
178
  label: 'Do action'
176
179
  }
177
180
  }, {
181
+ key: 'c',
178
182
  pageId: 'p3',
179
183
  fieldId: 'c',
180
184
  type: 'action',
@@ -200,6 +204,7 @@ describe('components', function () {
200
204
  it('should hide actions rows if flag is given', function () {
201
205
  var ID = 'test-id';
202
206
  var ROWS = [{
207
+ key: 'a',
203
208
  pageId: 'p1',
204
209
  fieldId: 'a',
205
210
  type: 'action',
@@ -207,6 +212,7 @@ describe('components', function () {
207
212
  label: 'Do action'
208
213
  }
209
214
  }, {
215
+ key: 'b',
210
216
  pageId: 'p2',
211
217
  fieldId: 'b',
212
218
  type: 'action',
@@ -214,6 +220,7 @@ describe('components', function () {
214
220
  label: 'Do action'
215
221
  }
216
222
  }, {
223
+ key: 'c',
217
224
  pageId: 'p3',
218
225
  fieldId: 'c',
219
226
  type: 'action',
@@ -234,14 +241,14 @@ describe('components', function () {
234
241
  var ID = 'test-id';
235
242
  var VALUES = ['Alpha component value', 'Bravo component value'];
236
243
  var ROWS = [{
244
+ key: 'a',
237
245
  pageId: 'p1',
238
246
  fieldId: 'a',
239
- key: 'Alpha',
240
247
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[0])
241
248
  }, {
249
+ key: 'b',
242
250
  pageId: 'p2',
243
251
  fieldId: 'b',
244
- key: 'Bravo',
245
252
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
246
253
  }];
247
254
  var _render6 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
@@ -272,18 +279,18 @@ describe('components', function () {
272
279
  ON_ACTION_CALLS.push(row);
273
280
  };
274
281
  var ROWS = [{
282
+ key: 'a',
275
283
  pageId: 'p1',
276
284
  fieldId: 'a',
277
- key: 'Alpha',
278
285
  value: 'Alpha value',
279
286
  action: {
280
287
  label: 'Change A',
281
288
  onAction: ON_ACTION
282
289
  }
283
290
  }, {
291
+ key: 'b',
284
292
  pageId: 'p2',
285
293
  fieldId: 'b',
286
- key: 'Bravo',
287
294
  value: 'Bravo value',
288
295
  action: {
289
296
  label: 'Change B',
@@ -316,14 +323,14 @@ describe('components', function () {
316
323
  var ID = 'test-id';
317
324
  var VALUES = ['Alpha component value', 'Bravo component value'];
318
325
  var ROWS = [{
326
+ key: 'a',
319
327
  pageId: 'p1',
320
328
  fieldId: 'a',
321
- key: 'Alpha',
322
329
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[0])
323
330
  }, {
331
+ key: 'b',
324
332
  pageId: 'p2',
325
333
  fieldId: 'b',
326
- key: 'Bravo',
327
334
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
328
335
  }];
329
336
  var _render8 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
@@ -346,24 +353,27 @@ describe('components', function () {
346
353
  expect(valueDiv.textContent).toEqual(VALUES[index]);
347
354
  });
348
355
  });
349
- it('should render groups of rows corretly', function () {
356
+ it('should render groups of rows correctly', function () {
350
357
  var ID = 'test-id';
351
358
  var VALUES = ['Alpha component value', 'Bravo component value', 'Charlie component value'];
352
359
  var ISGROUP = true;
353
360
  var ROWS = [{
361
+ key: 'a',
354
362
  pageId: 'p1',
355
363
  fieldId: 'a',
356
- key: 'Alpha',
357
- value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[0])
364
+ value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[0]),
365
+ action: {
366
+ label: 'action'
367
+ }
358
368
  }, {
369
+ key: 'b',
359
370
  pageId: 'p1',
360
371
  fieldId: 'b',
361
- key: 'Bravo',
362
372
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[1])
363
373
  }, {
374
+ key: 'c',
364
375
  pageId: 'p1',
365
376
  fieldId: 'c',
366
- key: 'Charlie',
367
377
  value: /*#__PURE__*/_react2.default.createElement("div", null, VALUES[2])
368
378
  }];
369
379
  var _render9 = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_SummaryList.default, {
@@ -33,7 +33,7 @@ SummaryListRow.propTypes = {
33
33
  row: _propTypes.default.shape({
34
34
  key: _propTypes.default.string.isRequired,
35
35
  required: _propTypes.default.bool,
36
- value: _propTypes.default.string,
36
+ value: _propTypes.default.node,
37
37
  action: _propTypes.default.shape({
38
38
  page: _propTypes.default.string,
39
39
  label: _propTypes.default.string,
@@ -59,7 +59,7 @@ var Task = function Task(_ref) {
59
59
  Task.propTypes = {
60
60
  task: _propTypes.default.shape({
61
61
  name: _propTypes.default.string.isRequired,
62
- pages: _propTypes.default.shape([]).isRequired,
62
+ pages: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
63
63
  state: _propTypes.default.string,
64
64
  displayName: _propTypes.default.string
65
65
  }).isRequired,
@@ -127,14 +127,14 @@ TaskList.propTypes = {
127
127
  text: _propTypes.default.string
128
128
  }),
129
129
  onTaskAction: _propTypes.default.func,
130
- refTitle: _propTypes.default.string.isRequired,
131
- refNumber: _propTypes.default.string.isRequired,
130
+ refTitle: _propTypes.default.string,
131
+ refNumber: _propTypes.default.string,
132
132
  sections: _propTypes.default.arrayOf(_propTypes.default.shape({
133
133
  name: _propTypes.default.string.isRequired,
134
134
  label: _propTypes.default.string,
135
135
  tasks: _propTypes.default.arrayOf(_propTypes.default.shape({
136
136
  name: _propTypes.default.string.isRequired,
137
- pages: _propTypes.default.shape([]).isRequired,
137
+ pages: _propTypes.default.arrayOf(_propTypes.default.string).isRequired,
138
138
  state: _propTypes.default.string,
139
139
  displayName: _propTypes.default.string
140
140
  })).isRequired
@@ -149,7 +149,9 @@ TaskList.defaultProps = {
149
149
  id: '',
150
150
  incompleteTitle: DEFAULT_INCOMPLETE_TITLE,
151
151
  onTaskAction: undefined,
152
- notes: ''
152
+ notes: {},
153
+ refTitle: undefined,
154
+ refNumber: undefined
153
155
  };
154
156
  var _default = TaskList;
155
157
  exports.default = _default;
@@ -77,7 +77,7 @@ describe('context.ValidationContext', function () {
77
77
  })));
78
78
  });
79
79
  TestComponent.propTypes = {
80
- customErrors: _propTypes.default.shape([])
80
+ customErrors: _propTypes.default.arrayOf(_propTypes.default.shape({}))
81
81
  };
82
82
  TestComponent.defaultProps = {
83
83
  customErrors: null
@@ -10,7 +10,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
10
10
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
11
11
  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); }
12
12
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
13
- var JSON_ONLY_PROPERTIES = ['source', 'use', 'show_when', 'options', 'additionalValidation', 'full_path', 'formData'];
13
+ var JSON_ONLY_PROPERTIES = ['source', 'use', 'show_when', 'options', 'additionalValidation', 'full_path', 'fullPath', 'formData'];
14
14
 
15
15
  /**
16
16
  * This method removes and properties that are entirely specific to the JSON
@@ -22,6 +22,7 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
22
22
  function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
23
23
  var LIST_CLASS = 'govuk-list';
24
24
  var BODY_CLASS = 'govuk-body';
25
+ var INPUT_CLASS = 'govuk-input';
25
26
 
26
27
  /**
27
28
  * Separate function for each component type for the sake of
@@ -158,7 +159,10 @@ var getTextArea = function getTextArea(config) {
158
159
  };
159
160
  var getTextInput = function getTextInput(config) {
160
161
  var attrs = (0, _cleanAttributes.default)(config);
161
- return /*#__PURE__*/_react.default.createElement(_copReactComponents.TextInput, attrs);
162
+ var classes = _copReactComponents.Utils.classBuilder(INPUT_CLASS, attrs.fixedWidth ? [attrs.fixedWidth] : [], attrs.fluidWidth ? [attrs.fluidWidth] : undefined);
163
+ return /*#__PURE__*/_react.default.createElement(_copReactComponents.TextInput, _extends({}, attrs, {
164
+ className: classes()
165
+ }));
162
166
  };
163
167
  var getTime = function getTime(config) {
164
168
  var attrs = (0, _cleanAttributes.default)(config);
@@ -10,7 +10,7 @@ var _cleanAttributes = _interopRequireDefault(require("./cleanAttributes"));
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
11
  function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
12
12
  var wrapInFormGroup = function wrapInFormGroup(config, children) {
13
- var attrs = (0, _cleanAttributes.default)(config, ['fieldId', 'displayMenu']);
13
+ var attrs = (0, _cleanAttributes.default)(config, ['fieldId', 'displayMenu', 'showCharacterCount']);
14
14
  return /*#__PURE__*/_react.default.createElement(_copReactComponents.FormGroup, _extends({}, attrs, {
15
15
  onChange: null
16
16
  }), children);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ukhomeoffice/cop-react-form-renderer",
3
- "version": "4.79.0",
3
+ "version": "4.80.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "clean": "rimraf dist",