@ukhomeoffice/cop-react-form-renderer 6.15.12-alpha → 6.15.13

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 (48) hide show
  1. package/dist/components/FormRenderer/FormRenderer.js +36 -15
  2. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/cop-reassign-task-to-rcc.json +1 -0
  3. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +1 -0
  4. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +1 -0
  5. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +1 -0
  6. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +1 -0
  7. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +1 -0
  8. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +1 -0
  9. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +1 -0
  10. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +1 -0
  11. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +1 -0
  12. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +1 -0
  13. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +1 -0
  14. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +1 -0
  15. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +1 -0
  16. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +1 -0
  17. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +1 -0
  18. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +1 -0
  19. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +1 -0
  20. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +1 -0
  21. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +1 -0
  22. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-entire-collection.json +114 -0
  23. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +1 -0
  24. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +1 -0
  25. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +1 -0
  26. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +1 -0
  27. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +1 -0
  28. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +1 -0
  29. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +1 -0
  30. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +1 -0
  31. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-radio-component.json +201 -0
  32. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +1 -0
  33. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-variance-breach.json +4272 -0
  34. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-variance-breach-with-upload-files.json +1264 -0
  35. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-entire-collection.json +20 -0
  36. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-radio-component.json +45 -0
  37. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-entire-collection-removed.json +3 -0
  38. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-radio-component-removed.json +45 -0
  39. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +15 -3
  40. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +65 -33
  41. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +6 -0
  42. package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +20 -0
  43. package/dist/components/FormRenderer/onCYAAction.js +3 -3
  44. package/dist/components/FormRenderer/onCYAAction.test.js +2 -1
  45. package/dist/components/FormRenderer/onPageAction.js +2 -2
  46. package/dist/components/FormRenderer/onPageAction.test.js +2 -1
  47. package/dist/utils/CollectionPage/mergeCollectionPages.js +8 -2
  48. package/package.json +2 -1
@@ -39,6 +39,7 @@ const FormRenderer = _ref => {
39
39
  let {
40
40
  title,
41
41
  type,
42
+ cleanseHiddenData,
42
43
  components,
43
44
  pages,
44
45
  hub,
@@ -61,6 +62,7 @@ const FormRenderer = _ref => {
61
62
  }, /*#__PURE__*/_react.default.createElement(_context.ValidationContextProvider, null, /*#__PURE__*/_react.default.createElement(InternalFormRenderer, {
62
63
  title: title,
63
64
  type: type,
65
+ cleanseHiddenData: cleanseHiddenData,
64
66
  components: components,
65
67
  pages: pages,
66
68
  hub: hub,
@@ -84,6 +86,7 @@ const InternalFormRenderer = _ref2 => {
84
86
  let {
85
87
  title,
86
88
  type,
89
+ cleanseHiddenData,
87
90
  components,
88
91
  pages: _pages,
89
92
  hub: _hub,
@@ -126,6 +129,17 @@ const InternalFormRenderer = _ref2 => {
126
129
  validate
127
130
  } = (0, _hooks.useValidation)();
128
131
 
132
+ // Set focus to header for accessibility, Screen reader to anounce the page heading
133
+ const setFocusToHeading = () => {
134
+ if (document) {
135
+ const header = Array.from(document.getElementsByTagName('h1')).pop();
136
+ if (header && document.activeElement !== header) {
137
+ header.setAttribute('tabIndex', '-1');
138
+ header.focus();
139
+ }
140
+ }
141
+ };
142
+
129
143
  // Need to set submission data when going back
130
144
  window.onpopstate = e => {
131
145
  var _formState$page;
@@ -142,12 +156,23 @@ const InternalFormRenderer = _ref2 => {
142
156
  }
143
157
  clearErrors();
144
158
  setGoingBack(true);
145
- hooks.onGoingBack(e.state ? e.state : null);
159
+ hooks.onGoingBack.apply(hooks, [e.state ? e.state : null].concat(formState.page.formData));
146
160
  if (components && pages && data && (_formState$page = formState.page) !== null && _formState$page !== void 0 && _formState$page.formData && pagePoint === undefined) {
161
+ var _submissionData$formS;
147
162
  const submissionData = _utils.default.Format.form({
148
163
  pages,
149
164
  components
150
165
  }, _objectSpread(_objectSpread({}, data), formState.page.formData), _models.EventTypes.SUBMIT);
166
+ if (submissionData !== null && submissionData !== void 0 && (_submissionData$formS = submissionData.formStatus) !== null && _submissionData$formS !== void 0 && _submissionData$formS.taskPage) {
167
+ const object = submissionData.formStatus.tasks;
168
+ Object.keys(object).forEach(key => {
169
+ const value = object[key];
170
+ if (value.currentPage && !value.complete) {
171
+ delete object[key].currentPage;
172
+ }
173
+ });
174
+ delete submissionData.formStatus.taskPage;
175
+ }
151
176
  setData(submissionData);
152
177
  }
153
178
  };
@@ -178,6 +203,11 @@ const InternalFormRenderer = _ref2 => {
178
203
  setHub(_utils.default.Hub.get(type, _hub, components, _objectSpread({}, data)));
179
204
  }, [type, _hub, data, components, setHub]);
180
205
 
206
+ // Set focus to heading for accessibility
207
+ (0, _react.useEffect)(() => {
208
+ setFocusToHeading();
209
+ }, [formState]);
210
+
181
211
  // Form state.
182
212
  (0, _react.useEffect)(() => {
183
213
  var _formState$page2;
@@ -189,17 +219,6 @@ const InternalFormRenderer = _ref2 => {
189
219
  setFormState(_helpers.default.getFormState(pageId, pages, hub));
190
220
  }, [pages, hub, pageId, setFormState, type, goingBack, data, formState.page]);
191
221
 
192
- // page rendered page
193
- (0, _react.useEffect)(() => {
194
- if (document) {
195
- const element = document.getElementsByTagName("h1")[0];
196
- if (element) {
197
- element.setAttribute("tabIndex", "-1");
198
- element.focus();
199
- }
200
- }
201
- }, [formState.page]);
202
-
203
222
  // Call the onFormLoad hook just when this component first renders.
204
223
  (0, _react.useEffect)(() => {
205
224
  setPagePoint(undefined);
@@ -306,7 +325,7 @@ const InternalFormRenderer = _ref2 => {
306
325
  actions: (_formState$page$actio = formState.page.actions) === null || _formState$page$actio === void 0 ? void 0 : _formState$page$actio.filter(action => _utils.default.Component.show(action, data))
307
326
  }, formState.cya, {
308
327
  onAction: action => {
309
- (0, _onCYAAction.default)(setPagePoint, action, pages, validate, components, data, setData, type, pageId, currentTask, hooks, addErrors, hub, onPageChange, formState, submitting, setSubmitting);
328
+ (0, _onCYAAction.default)(setPagePoint, action, pages, validate, cleanseHiddenData, components, data, setData, type, pageId, currentTask, hooks, addErrors, hub, onPageChange, formState, submitting, setSubmitting);
310
329
  },
311
330
  onRowAction: onCYARowAction,
312
331
  summaryListClassModifiers: summaryListClassModifiers,
@@ -327,7 +346,7 @@ const InternalFormRenderer = _ref2 => {
327
346
  page: formState.page,
328
347
  pages: [].concat(pages),
329
348
  onAction: (action, patch, patchLabel) => {
330
- (0, _onPageAction.default)(action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors, submitting, setSubmitting, errors);
349
+ (0, _onPageAction.default)(action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, cleanseHiddenData, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors, submitting, setSubmitting, errors);
331
350
  },
332
351
  onChange: onChange,
333
352
  hashLink: hashLink,
@@ -340,7 +359,7 @@ const InternalFormRenderer = _ref2 => {
340
359
  pages: pages,
341
360
  onCollectionChange: onChange,
342
361
  onAction: (action, patch, patchLabel) => {
343
- (0, _onPageAction.default)(action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors, submitting, setSubmitting, errors);
362
+ (0, _onPageAction.default)(action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, cleanseHiddenData, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors, submitting, setSubmitting, errors);
344
363
  },
345
364
  hashLink: hashLink,
346
365
  classModifiers: formState.page.classModifiers,
@@ -374,6 +393,7 @@ const propTypes = {
374
393
  pages: _propTypes.default.arrayOf(_propTypes.default.shape({})).isRequired,
375
394
  summaryListClassModifiers: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.arrayOf(_propTypes.default.string)]),
376
395
  title: _propTypes.default.string,
396
+ cleanseHiddenData: _propTypes.default.bool,
377
397
  /** See <a href="/?path=/docs/f-json--page#formtypes">FormTypes</a>. */
378
398
  type: _propTypes.default.oneOf([_models.FormTypes.CYA, _models.FormTypes.FORM, _models.FormTypes.HUB, _models.FormTypes.TASK, _models.FormTypes.WIZARD, _models.FormTypes.TASK_CYA, _models.FormTypes.FORM_WITH_TASK]).isRequired,
379
399
  viewOnly: _propTypes.default.bool,
@@ -399,6 +419,7 @@ const defaultProps = {
399
419
  noChangeAction: false,
400
420
  summaryListClassModifiers: [],
401
421
  title: '',
422
+ cleanseHiddenData: false,
402
423
  viewOnly: true,
403
424
  hideBlankRows: false
404
425
  };
@@ -1,4 +1,5 @@
1
1
  {
2
+ "cleanseHiddenData": true,
2
3
  "cya": {
3
4
  "actions": [
4
5
  {
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "cleanseHiddenData": true,
2
3
  "cya": {
3
4
  "actions": [
4
5
  {
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "cop-make-your-mandatory-declarations",
3
+ "cleanseHiddenData": true,
3
4
  "title": "Make your mandatory declarations",
4
5
  "type": "form-with-task-list",
5
6
  "components": [
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -0,0 +1,114 @@
1
+ {
2
+ "id": "example-form",
3
+ "cleanseHiddenData": true,
4
+ "version": "0.0.1",
5
+ "name": "example-form",
6
+ "title": "Example form",
7
+ "type": "form",
8
+ "components": [
9
+ {
10
+ "id": "itemCategory",
11
+ "fieldId": "itemCategory",
12
+ "label": "Item category",
13
+ "type": "text"
14
+ },
15
+ {
16
+ "id": "itemSubCategory",
17
+ "fieldId": "itemSubCategory",
18
+ "label": "Item Sub category",
19
+ "type": "text"
20
+ },
21
+ {
22
+ "id": "abvDetails",
23
+ "fieldId": "abvDetails",
24
+ "label": "AbvDetails",
25
+ "type": "text"
26
+ },
27
+ {
28
+ "id": "firearmCheck",
29
+ "fieldId": "firearmCheck",
30
+ "label": "FirearmCheck",
31
+ "type": "text"
32
+ },
33
+ {
34
+ "id": "brandText",
35
+ "fieldId": "brandText",
36
+ "label": "BrandText",
37
+ "type": "text"
38
+ }
39
+ ],
40
+ "pages": [
41
+ {
42
+ "id": "item-seal-details",
43
+ "name": "item-seal-details",
44
+ "title": "Item seal details",
45
+ "components": [
46
+ {
47
+ "use": "itemCategory"
48
+ },
49
+ {
50
+ "use": "itemSubCategory"
51
+ }
52
+ ],
53
+ "collection": {
54
+ "show_when": {
55
+ "op": "=",
56
+ "field": "alpha",
57
+ "value": "NOT-alpha-value"
58
+ },
59
+ "name": "items",
60
+ "actionPosition": "inHeading",
61
+ "labels": {
62
+ "item": "Item ${index}"
63
+ }
64
+ }
65
+ },
66
+ {
67
+ "id": "alcohol",
68
+ "name": "alcohol",
69
+ "title": "Alcohol",
70
+ "collection": {
71
+ "name": "items",
72
+ "waitForFormData": true,
73
+ "heading": {
74
+ "text": "Alcohol",
75
+ "size": "m",
76
+ "changeLink": true
77
+ }
78
+ },
79
+ "components": [
80
+ {
81
+ "use": "brandText",
82
+ "label": "Model or brand"
83
+ },
84
+ {
85
+ "use": "abvDetails",
86
+ "label": ""
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ "id": "firearm",
92
+ "name": "firearm",
93
+ "title": "Firearm",
94
+ "collection": {
95
+ "name": "items",
96
+ "waitForFormData": true,
97
+ "heading": {
98
+ "text": "Firearm",
99
+ "size": "m",
100
+ "changeLink": true
101
+ }
102
+ },
103
+ "components": [
104
+ {
105
+ "use": "brandText",
106
+ "label": "Model or brand"
107
+ },
108
+ {
109
+ "use": "firearmCheck"
110
+ }
111
+ ]
112
+ }
113
+ ]
114
+ }
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "id": "example-form",
3
+ "cleanseHiddenData": true,
3
4
  "version": "0.0.1",
4
5
  "name": "example-form",
5
6
  "title": "Example form",