@ukhomeoffice/cop-react-form-renderer 6.6.1 → 6.11.1

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.
Files changed (45) hide show
  1. package/dist/components/CheckYourAnswers/Answer.js +11 -5
  2. package/dist/components/CheckYourAnswers/Answer.test.js +67 -14
  3. package/dist/components/CheckYourAnswers/CheckYourAnswers.js +9 -5
  4. package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +156 -64
  5. package/dist/components/CollectionSummary/CollectionSummary.js +20 -3
  6. package/dist/components/CollectionSummary/CollectionSummary.test.js +66 -20
  7. package/dist/components/CollectionSummary/RenderListView.js +2 -2
  8. package/dist/components/CollectionSummary/SummaryCard.js +17 -6
  9. package/dist/components/CollectionSummary/SummaryCard.test.js +94 -37
  10. package/dist/components/CollectionSummary/SummaryCardDetails.js +78 -34
  11. package/dist/components/CollectionSummary/SummaryCardDetails.scss +9 -0
  12. package/dist/components/CollectionSummary/SummaryCardDetails.test.js +206 -10
  13. package/dist/components/FormComponent/Container.js +2 -1
  14. package/dist/components/FormComponent/Container.test.js +69 -0
  15. package/dist/components/FormComponent/helpers/getComponentFieldSet.js +1 -1
  16. package/dist/components/FormRenderer/FormRenderer.js +1 -0
  17. package/dist/components/SummaryList/SummaryList.js +8 -0
  18. package/dist/components/SummaryList/SummaryList.scss +15 -0
  19. package/dist/components/SummaryList/SummaryList.test.js +67 -7
  20. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +53 -0
  21. package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +38 -0
  22. package/dist/components/TaskList/TaskList.js +22 -5
  23. package/dist/components/TaskList/TaskList.scss +24 -0
  24. package/dist/components/TaskList/TaskList.test.js +160 -16
  25. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +27 -12
  26. package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +145 -0
  27. package/dist/utils/CheckYourAnswers/{getComponentRowForCYA.js → getSummaryListRowForDetails.js} +10 -5
  28. package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +56 -0
  29. package/dist/utils/CollectionPage/getQuickEditPage.js +2 -1
  30. package/dist/utils/CollectionPage/getQuickEditPage.test.js +8 -0
  31. package/dist/utils/CollectionPage/mergeCollectionPages.js +10 -1
  32. package/dist/utils/CollectionPage/mergeCollectionPages.test.js +6 -6
  33. package/dist/utils/Component/elevateNestedComponents.js +2 -1
  34. package/dist/utils/Component/elevateNestedComponents.test.js +38 -0
  35. package/dist/utils/Component/optionIsSelected.js +5 -0
  36. package/dist/utils/Component/optionIsSelected.test.js +26 -0
  37. package/dist/utils/Operate/getLength.js +50 -0
  38. package/dist/utils/Operate/getLength.test.js +89 -0
  39. package/dist/utils/Operate/runPageOperations.js +2 -0
  40. package/dist/utils/Validate/validateComponent.js +7 -2
  41. package/dist/utils/Validate/validateComponent.test.js +31 -0
  42. package/dist/utils/Validate/validateTime.js +8 -0
  43. package/dist/utils/Validate/validateTime.test.js +46 -0
  44. package/package.json +1 -1
  45. package/dist/utils/CheckYourAnswers/getComponentRowForCYA.test.js +0 -41
@@ -73,6 +73,52 @@ describe('components.CollectionSummary.CollectionSummary', function () {
73
73
  expect(summary.children[0].id).toEqual("".concat(CONFIG.fieldId, ".summaryCard").concat(FORM_DATA.testCollection[0].id));
74
74
  expect(summary.children[1].id).toEqual("".concat(CONFIG.fieldId, ".summaryCard").concat(FORM_DATA.testCollection[1].id));
75
75
  });
76
+ it('should focus on the most recently duplicated item', function () {
77
+ var customConfig = {
78
+ id: 'testSummary',
79
+ fieldId: 'testSummary',
80
+ collectionName: 'testCollection',
81
+ card: {
82
+ title: 'Title',
83
+ deleteAction: {
84
+ label: 'Delete'
85
+ },
86
+ changeAction: {
87
+ label: 'Change label',
88
+ page: 'testPage',
89
+ aria_label: [{
90
+ text: 'testText'
91
+ }]
92
+ }
93
+ },
94
+ quickEdit: true,
95
+ focusOn: true
96
+ };
97
+ var customFormData = {
98
+ testCollectionActiveId: '001',
99
+ testCollection: [{
100
+ id: '000',
101
+ testText: 'value',
102
+ isDuplicate: true
103
+ }, {
104
+ id: '001',
105
+ isDuplicate: true
106
+ }]
107
+ };
108
+ var _renderWithValidation2 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
109
+ config: customConfig,
110
+ formData: customFormData,
111
+ onAction: ON_ACTION
112
+ })),
113
+ container = _renderWithValidation2.container;
114
+ var changeButtons = container.querySelectorAll('[data-testid="change-button"]');
115
+ var firstDuplicatedItem = changeButtons[0];
116
+ var lastDuplicatedItem = changeButtons[changeButtons.length - 1];
117
+ expect(lastDuplicatedItem).toBeDefined();
118
+ expect(document.activeElement).toEqual(lastDuplicatedItem);
119
+ expect(lastDuplicatedItem.id).toEqual('testSummary.summaryCard001.changeButton');
120
+ expect(document.activeElement).not.toEqual(firstDuplicatedItem);
121
+ });
76
122
  it('should correctly queue errors found when validating entries', function () {
77
123
  var ErrorCheckComponent = function ErrorCheckComponent() {
78
124
  var _useValidation = (0, _hooks.useValidation)(),
@@ -81,24 +127,24 @@ describe('components.CollectionSummary.CollectionSummary', function () {
81
127
  return e.error;
82
128
  }));
83
129
  };
84
- var _renderWithValidation2 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ErrorCheckComponent, null), /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
130
+ var _renderWithValidation3 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(ErrorCheckComponent, null), /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
85
131
  config: CONFIG,
86
132
  formData: FORM_DATA,
87
133
  onAction: ON_ACTION,
88
134
  pages: PAGES
89
135
  }))),
90
- container = _renderWithValidation2.container;
136
+ container = _renderWithValidation3.container;
91
137
  var errorChecker = container.children[0];
92
138
  expect(errorChecker.textContent).toContain('queuedErrors is an array of length 1');
93
139
  expect(errorChecker.textContent).toContain('testText is required');
94
140
  });
95
141
  it('should render a confirmation when a SummaryCard\'s delete button is pressed', function () {
96
- var _renderWithValidation3 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
142
+ var _renderWithValidation4 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
97
143
  config: CONFIG,
98
144
  formData: FORM_DATA,
99
145
  onAction: ON_ACTION
100
146
  })),
101
- container = _renderWithValidation3.container;
147
+ container = _renderWithValidation4.container;
102
148
  var summary = checkSetup(container);
103
149
  expect(summary.children.length).toEqual(2);
104
150
  var card = summary.children[0];
@@ -122,12 +168,12 @@ describe('components.CollectionSummary.CollectionSummary', function () {
122
168
  title: 'Title'
123
169
  }
124
170
  };
125
- var _renderWithValidation4 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
171
+ var _renderWithValidation5 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
126
172
  config: CONFIG_WITH_BUTTON,
127
173
  formData: FORM_DATA,
128
174
  onAction: ON_ACTION
129
175
  })),
130
- container = _renderWithValidation4.container;
176
+ container = _renderWithValidation5.container;
131
177
  var summary = checkSetup(container);
132
178
  expect(summary.children.length).toEqual(3); // The button and a card for each item.
133
179
  expect(summary.children[0].id).toEqual("".concat(CONFIG_WITH_BUTTON.fieldId, ".addButton"));
@@ -146,12 +192,12 @@ describe('components.CollectionSummary.CollectionSummary', function () {
146
192
  title: 'Title'
147
193
  }
148
194
  };
149
- var _renderWithValidation5 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
195
+ var _renderWithValidation6 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
150
196
  config: CONFIG_WITH_BUTTON,
151
197
  formData: FORM_DATA,
152
198
  onAction: ON_ACTION
153
199
  })),
154
- container = _renderWithValidation5.container;
200
+ container = _renderWithValidation6.container;
155
201
  var summary = checkSetup(container);
156
202
  expect(summary.children.length).toEqual(3); // The button and a card for each item.
157
203
  expect(summary.children[0].id).toEqual("".concat(CONFIG_WITH_BUTTON.fieldId, ".addButton"));
@@ -159,12 +205,12 @@ describe('components.CollectionSummary.CollectionSummary', function () {
159
205
  expect(summary.children[0].tagName).toEqual('BUTTON');
160
206
  });
161
207
  it('should apply the expected class name to the summary card when delete button is pressed', function () {
162
- var _renderWithValidation6 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
208
+ var _renderWithValidation7 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
163
209
  config: CONFIG,
164
210
  formData: FORM_DATA,
165
211
  onAction: ON_ACTION
166
212
  })),
167
- container = _renderWithValidation6.container;
213
+ container = _renderWithValidation7.container;
168
214
  var summary = checkSetup(container);
169
215
  expect(summary.children.length).toEqual(2);
170
216
  var card = summary.children[0];
@@ -175,12 +221,12 @@ describe('components.CollectionSummary.CollectionSummary', function () {
175
221
  expect(card.className).toContain('deleting-summary-card');
176
222
  });
177
223
  it('should focus on the delete button in the confirmation panel', function () {
178
- var _renderWithValidation7 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
224
+ var _renderWithValidation8 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
179
225
  config: CONFIG,
180
226
  formData: FORM_DATA,
181
227
  onAction: ON_ACTION
182
228
  })),
183
- container = _renderWithValidation7.container;
229
+ container = _renderWithValidation8.container;
184
230
  var summary = checkSetup(container);
185
231
  expect(summary.children.length).toEqual(2);
186
232
  var card = summary.children[0];
@@ -191,12 +237,12 @@ describe('components.CollectionSummary.CollectionSummary', function () {
191
237
  expect(document.activeElement).toEqual(confirmButton);
192
238
  });
193
239
  it('should have the role "alert" in the confirmation panel', function () {
194
- var _renderWithValidation8 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
240
+ var _renderWithValidation9 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
195
241
  config: CONFIG,
196
242
  formData: FORM_DATA,
197
243
  onAction: ON_ACTION
198
244
  })),
199
- container = _renderWithValidation8.container;
245
+ container = _renderWithValidation9.container;
200
246
  var summary = checkSetup(container);
201
247
  expect(summary.children.length).toEqual(2);
202
248
  var card = summary.children[0];
@@ -216,14 +262,14 @@ describe('components.CollectionSummary.CollectionSummary', function () {
216
262
  displayFields: ['testText']
217
263
  }
218
264
  });
219
- var _renderWithValidation9 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
265
+ var _renderWithValidation10 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
220
266
  config: listViewConfig,
221
267
  formData: FORM_DATA,
222
268
  onAction: ON_ACTION,
223
269
  pages: PAGES
224
270
  })),
225
- container = _renderWithValidation9.container,
226
- getByText = _renderWithValidation9.getByText;
271
+ container = _renderWithValidation10.container,
272
+ getByText = _renderWithValidation10.getByText;
227
273
  var summary = checkSetup(container);
228
274
  expect(summary.children.length).toEqual(2);
229
275
  var card = summary.children[0];
@@ -248,14 +294,14 @@ describe('components.CollectionSummary.CollectionSummary', function () {
248
294
  message: 'Test confirmation message with index number ${index}'
249
295
  }
250
296
  });
251
- var _renderWithValidation10 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
297
+ var _renderWithValidation11 = (0, _setupTests.renderWithValidation)( /*#__PURE__*/_react.default.createElement(_CollectionSummary.default, {
252
298
  config: listViewConfig,
253
299
  formData: FORM_DATA,
254
300
  onAction: ON_ACTION,
255
301
  pages: PAGES
256
302
  })),
257
- container = _renderWithValidation10.container,
258
- getByText = _renderWithValidation10.getByText;
303
+ container = _renderWithValidation11.container,
304
+ getByText = _renderWithValidation11.getByText;
259
305
  var summary = checkSetup(container);
260
306
  expect(summary.children.length).toEqual(2);
261
307
  var card = summary.children[0];
@@ -8,7 +8,7 @@ var _copReactComponents = require("@ukhomeoffice/cop-react-components");
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _utils = _interopRequireDefault(require("../../utils"));
11
- var _getComponentRowForCYA = _interopRequireDefault(require("../../utils/CheckYourAnswers/getComponentRowForCYA"));
11
+ var _getSummaryListRowForDetails = _interopRequireDefault(require("../../utils/CheckYourAnswers/getSummaryListRowForDetails"));
12
12
  var _Condition = _interopRequireDefault(require("../../utils/Condition"));
13
13
  require("./RenderListView.scss");
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -95,7 +95,7 @@ var RenderListView = function RenderListView(_ref) {
95
95
  if (!component) {
96
96
  return null;
97
97
  }
98
- return (0, _getComponentRowForCYA.default)(childPage, component, listClass, entryData);
98
+ return (0, _getSummaryListRowForDetails.default)(childPage, component, listClass, entryData);
99
99
  });
100
100
  }
101
101
  return null;
@@ -47,7 +47,7 @@ var DEFAULT_DUPLICATE_BUTTON_LABEL = exports.DEFAULT_DUPLICATE_BUTTON_LABEL = 'D
47
47
  var DEFAULT_DETAILS_TITLE = exports.DEFAULT_DETAILS_TITLE = 'Full details';
48
48
  var DEFAULT_CHANGE_BUTTON_CLASS = exports.DEFAULT_CHANGE_BUTTON_CLASS = 'secondary';
49
49
  var SummaryCard = function SummaryCard(_ref) {
50
- var _config$changeAction2, _config$changeAction3, _config$changeAction4, _config$deleteAction, _config$deleteAction2, _config$duplicateActi, _config$duplicateActi2;
50
+ var _config$changeAction2, _config$changeAction3, _config$changeAction4, _config$deleteAction, _config$deleteAction2, _config$duplicateActi, _config$duplicateActi2, _config$fullDetails;
51
51
  var id = _ref.id,
52
52
  entryData = _ref.entryData,
53
53
  config = _ref.config,
@@ -178,6 +178,7 @@ var SummaryCard = function SummaryCard(_ref) {
178
178
  }, _utils.default.FormPage.getConditionalText(config.details, entryData))), /*#__PURE__*/_react.default.createElement("div", {
179
179
  className: classes('header-actions')
180
180
  }, config.quickEdit && /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
181
+ "data-testid": "quickedit-button",
181
182
  id: "".concat(id, ".quickEditButton"),
182
183
  onClick: function onClick() {
183
184
  return setQuickEdit(function (prevState) {
@@ -186,16 +187,19 @@ var SummaryCard = function SummaryCard(_ref) {
186
187
  },
187
188
  classModifiers: "primary",
188
189
  disabled: quickEdit,
189
- name: "QuickEdit"
190
+ name: "QuickEdit",
191
+ autoFocus: config.focusOn
190
192
  }, DEFAULT_EDIT_LABEL), config.changeAction && typeof onFullEdit === 'function' && /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
191
193
  id: "".concat(id, ".changeButton"),
194
+ "data-testid": "change-button",
192
195
  onClick: function onClick() {
193
196
  var _config$changeAction;
194
197
  return onFullEdit((_config$changeAction = config.changeAction) === null || _config$changeAction === void 0 ? void 0 : _config$changeAction.page, entryData.id);
195
198
  },
196
199
  classModifiers: ((_config$changeAction2 = config.changeAction) === null || _config$changeAction2 === void 0 ? void 0 : _config$changeAction2.classModifiers) || DEFAULT_CHANGE_BUTTON_CLASS,
197
200
  "aria-label": _utils.default.FormPage.getConditionalText((_config$changeAction3 = config.changeAction) === null || _config$changeAction3 === void 0 ? void 0 : _config$changeAction3.aria_label, entryData),
198
- name: "Change"
201
+ name: "Change",
202
+ autoFocus: config.focusOn
199
203
  }, ((_config$changeAction4 = config.changeAction) === null || _config$changeAction4 === void 0 ? void 0 : _config$changeAction4.label) || DEFAULT_CHANGE_BUTTON_LABEL), config.deleteAction && typeof onDelete === 'function' && /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
200
204
  id: "".concat(id, ".deleteButton"),
201
205
  onClick: function onClick() {
@@ -205,13 +209,15 @@ var SummaryCard = function SummaryCard(_ref) {
205
209
  "aria-label": _utils.default.FormPage.getConditionalText((_config$deleteAction = config.deleteAction) === null || _config$deleteAction === void 0 ? void 0 : _config$deleteAction.aria_label, entryData),
206
210
  name: "Delete"
207
211
  }, ((_config$deleteAction2 = config.deleteAction) === null || _config$deleteAction2 === void 0 ? void 0 : _config$deleteAction2.label) || DEFAULT_DELETE_BUTTON_LABEL), config.duplicateAction && typeof onDuplicate === 'function' && /*#__PURE__*/_react.default.createElement(_copReactComponents.Button, {
212
+ "data-testid": "duplicate-button",
208
213
  id: "".concat(id, ".duplicateButton"),
209
214
  onClick: function onClick() {
210
215
  onDuplicate(entryData);
211
216
  },
212
217
  classModifiers: "secondary",
213
218
  "aria-label": _utils.default.FormPage.getConditionalText((_config$duplicateActi = config.duplicateAction) === null || _config$duplicateActi === void 0 ? void 0 : _config$duplicateActi.aria_label, entryData),
214
- name: "Duplicate"
219
+ name: "Duplicate",
220
+ autoFocus: config.focusOn
215
221
  }, ((_config$duplicateActi2 = config.duplicateAction) === null || _config$duplicateActi2 === void 0 ? void 0 : _config$duplicateActi2.label) || DEFAULT_DUPLICATE_BUTTON_LABEL))), quickEdit && quickEditPage && /*#__PURE__*/_react.default.createElement(_FormPage.default, {
216
222
  page: quickEditPage,
217
223
  onAction: function onAction(action, patch) {
@@ -227,7 +233,8 @@ var SummaryCard = function SummaryCard(_ref) {
227
233
  masterPage: masterPage,
228
234
  childCollections: childCollections,
229
235
  formData: formData,
230
- entryData: entryData
236
+ entryData: entryData,
237
+ optionalFieldPlaceholder: ((_config$fullDetails = config.fullDetails) === null || _config$fullDetails === void 0 ? void 0 : _config$fullDetails.optionalFieldPlaceholder) || ''
231
238
  }))));
232
239
  };
233
240
  SummaryCard.propTypes = {
@@ -261,7 +268,11 @@ SummaryCard.propTypes = {
261
268
  }))
262
269
  }),
263
270
  detailsTitle: _propTypes.default.string,
264
- listView: _propTypes.default.bool
271
+ listView: _propTypes.default.bool,
272
+ focusOn: _propTypes.default.bool,
273
+ fullDetails: _propTypes.default.shape({
274
+ optionalFieldPlaceholder: _propTypes.default.string
275
+ })
265
276
  }).isRequired,
266
277
  masterPage: _propTypes.default.shape({
267
278
  childPages: _propTypes.default.arrayOf(_propTypes.default.shape({