@ukhomeoffice/cop-react-form-renderer 6.15.11-alpha → 6.15.11
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.
- package/dist/components/FormComponent/FormComponent.js +6 -0
- package/dist/components/FormComponent/helpers/addLabel.js +3 -2
- package/dist/components/FormPage/FormPage.js +20 -7
- package/dist/components/FormPage/FormPage.test.js +53 -0
- package/dist/components/FormRenderer/FormRenderer.js +8 -3
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/cop-reassign-task-to-rcc.json +446 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-nested-radio-component.json +201 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +1 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-variance-breach.json +4272 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-carrier.json +407 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-variance-breach-with-upload-files.json +1264 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-nested-radio-component.json +45 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/reassign-to-rcc.json +72 -0
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-nested-radio-component-removed.json +45 -0
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +32 -18
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +73 -31
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.js +15 -7
- package/dist/components/FormRenderer/onCYAAction.js +3 -3
- package/dist/components/FormRenderer/onCYAAction.test.js +2 -1
- package/dist/components/FormRenderer/onPageAction.js +2 -2
- package/dist/components/FormRenderer/onPageAction.test.js +2 -1
- package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +2 -1
- package/package.json +5 -4
|
@@ -28,7 +28,7 @@ const addValue = (key, value, multiMap) => {
|
|
|
28
28
|
*
|
|
29
29
|
* @param {Object} payload Javascript object from which the node will be deleted. Updated by the method.
|
|
30
30
|
* @param {String} path A string containing a decimal point delimited path specifying the node to delete.
|
|
31
|
-
* @return
|
|
31
|
+
* @return {void}, obj above updated.
|
|
32
32
|
*/
|
|
33
33
|
exports.addValue = addValue;
|
|
34
34
|
const deleteNodeByPath = (payload, path) => {
|
|
@@ -88,15 +88,20 @@ const getNestedQuestionPath = (optionPath, nestedFieldId) => {
|
|
|
88
88
|
/**
|
|
89
89
|
* If the component has options, go through each option removing the data for any nested fields.
|
|
90
90
|
* Required as nested options are in the payload at the same heirarchical level.
|
|
91
|
+
*
|
|
92
|
+
* There are occasions when a field shouldn't be removed from the payload, eg if a form is being used for 2 purposes
|
|
93
|
+
* eg the cop-reassign-task-to-rcc.json, and the field is only being hidden for display purposes. Allow these fields
|
|
94
|
+
* to be preserved with a property on the component.
|
|
91
95
|
|
|
92
96
|
* @param {Object} payload Javascript object from which the node will be deleted. Updated by the method.
|
|
93
97
|
* @param {String} path A string containing a decimal point delimited path specifying the node to delete.
|
|
94
98
|
* @param {Object} component The form component representing the path being deleted
|
|
95
|
-
* @return
|
|
99
|
+
* @return {void}, obj above updated.
|
|
96
100
|
*/
|
|
97
101
|
exports.getNestedQuestionPath = getNestedQuestionPath;
|
|
98
102
|
const deleteNodeAndOptions = (payload, path, component) => {
|
|
99
103
|
var _component$data;
|
|
104
|
+
if (component.preserveInPayload) return;
|
|
100
105
|
deleteNodeByPath(payload, path);
|
|
101
106
|
// If the component has options, go through each option removing the data for any nested fields. Required as nested options are in the payload at the same heirarchical level.
|
|
102
107
|
if (component !== null && component !== void 0 && (_component$data = component.data) !== null && _component$data !== void 0 && _component$data.options) {
|
|
@@ -115,7 +120,7 @@ const deleteNodeAndOptions = (payload, path, component) => {
|
|
|
115
120
|
* but added by the renderer to find the activeId. If so, remove these objects entirely as they have been pruned.
|
|
116
121
|
*
|
|
117
122
|
* @param {Array} array Array of objects. Each object which has only 1 remaining field called 'id' should be removed.
|
|
118
|
-
* @return
|
|
123
|
+
* @return {void}, array above updated.
|
|
119
124
|
*/
|
|
120
125
|
exports.deleteNodeAndOptions = deleteNodeAndOptions;
|
|
121
126
|
const removeObjectWithOnlySingleIdField = array => {
|
|
@@ -238,11 +243,13 @@ exports.isShowEntity = isShowEntity;
|
|
|
238
243
|
const findComponentDefinitionInForm = (pageComponentDef, componentByIdMap, componentByFieldIdMap) => {
|
|
239
244
|
var _ref, _componentByIdMap$get;
|
|
240
245
|
const componentInForm = (_ref = (_componentByIdMap$get = componentByIdMap.get(pageComponentDef.use)) !== null && _componentByIdMap$get !== void 0 ? _componentByIdMap$get : componentByFieldIdMap.get(pageComponentDef.use)) !== null && _ref !== void 0 ? _ref : pageComponentDef;
|
|
246
|
+
|
|
247
|
+
// Create clone of component, so processing can make changes to it without changing the form
|
|
248
|
+
const componentInFormClone = JSON.parse(JSON.stringify(componentInForm));
|
|
241
249
|
if (pageComponentDef.use && pageComponentDef.show_when) {
|
|
242
|
-
|
|
250
|
+
componentInFormClone.show_when = pageComponentDef.show_when;
|
|
243
251
|
}
|
|
244
|
-
|
|
245
|
-
return JSON.parse(JSON.stringify(componentInForm));
|
|
252
|
+
return componentInFormClone;
|
|
246
253
|
};
|
|
247
254
|
|
|
248
255
|
/**
|
|
@@ -254,7 +261,7 @@ const findComponentDefinitionInForm = (pageComponentDef, componentByIdMap, compo
|
|
|
254
261
|
* @param {*} component The component definition being deleted that needs corresponding meta data also deleted
|
|
255
262
|
* @param {*} collectionDataObject The payload containing the file data being deleted (for which the corresponding meta needs deleting)
|
|
256
263
|
* @param {*} formData The entire payload, which will include the meta section
|
|
257
|
-
* @returns
|
|
264
|
+
* @returns {void}, as the formData will be updated in situ
|
|
258
265
|
*/
|
|
259
266
|
exports.findComponentDefinitionInForm = findComponentDefinitionInForm;
|
|
260
267
|
const deleteCorrespondingMetaInfo = (component, collectionDataObject, formData) => {
|
|
@@ -335,6 +342,7 @@ const removeEmptyArraysAndUnusedCollectionIDs = payload => {
|
|
|
335
342
|
* When the counter reaches 1 we know all other occurences of the component have been resolved
|
|
336
343
|
* so it is safe to delete.
|
|
337
344
|
*
|
|
345
|
+
*
|
|
338
346
|
* @param {*} payload The form payload from which to delete the component data
|
|
339
347
|
* @param {*} path The payload path of the component
|
|
340
348
|
* @param {*} component The component whose data we should attempt to delete
|
|
@@ -18,7 +18,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
18
18
|
*
|
|
19
19
|
* @param {*} action
|
|
20
20
|
*/
|
|
21
|
-
const onCYAAction = (setPagePoint, action, pages, validate, components, data, setData, type, pageId, currentTask, hooks, addErrors, hub, onPageChange, formState, submitting, setSubmitting) => {
|
|
21
|
+
const onCYAAction = (setPagePoint, action, pages, validate, cleanseHiddenData, components, data, setData, type, pageId, currentTask, hooks, addErrors, hub, onPageChange, formState, submitting, setSubmitting) => {
|
|
22
22
|
// Check to see whether the action is able to proceed, which in
|
|
23
23
|
// in the case of a submission will validate the fields in the page.
|
|
24
24
|
if (action.type === _models.PageAction.TYPES.SUBMIT && hub !== _models.HubFormats.TASK) {
|
|
@@ -36,7 +36,7 @@ const onCYAAction = (setPagePoint, action, pages, validate, components, data, se
|
|
|
36
36
|
pages,
|
|
37
37
|
components
|
|
38
38
|
};
|
|
39
|
-
_helpers.default.clearOutUncompletedRoutes(formPagesAndComponents, submissionData);
|
|
39
|
+
_helpers.default.clearOutUncompletedRoutes(cleanseHiddenData, formPagesAndComponents, submissionData);
|
|
40
40
|
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, submissionData, currentTask, true);
|
|
41
41
|
setData(submissionData);
|
|
42
42
|
// Now submit the data to the backend...
|
|
@@ -80,7 +80,7 @@ const onCYAAction = (setPagePoint, action, pages, validate, components, data, se
|
|
|
80
80
|
pages,
|
|
81
81
|
components
|
|
82
82
|
};
|
|
83
|
-
_helpers.default.clearOutUncompletedRoutes(formPagesAndComponents, submissionData);
|
|
83
|
+
_helpers.default.clearOutUncompletedRoutes(cleanseHiddenData, formPagesAndComponents, submissionData);
|
|
84
84
|
submissionData.formStatus = _helpers.default.getSubmissionStatus(type, pages, pageId, action, submissionData, currentTask, true);
|
|
85
85
|
setData(submissionData);
|
|
86
86
|
// Now submit the data to the backend...
|
|
@@ -57,7 +57,7 @@ jest.mock('./helpers', () => ({
|
|
|
57
57
|
this.getSubmissionStatusCalls = 0;
|
|
58
58
|
},
|
|
59
59
|
clearOutUncompletedRoutesCalls: 0,
|
|
60
|
-
clearOutUncompletedRoutes(formPagesAndComponents, formData) {
|
|
60
|
+
clearOutUncompletedRoutes(cleanseHiddenData, formPagesAndComponents, formData) {
|
|
61
61
|
this.clearOutUncompletedRoutesCalls += 1;
|
|
62
62
|
return formData;
|
|
63
63
|
}
|
|
@@ -170,6 +170,7 @@ describe('components.FormRenderer.onCYAAction', () => {
|
|
|
170
170
|
},
|
|
171
171
|
pages: PAGES,
|
|
172
172
|
validate: () => {},
|
|
173
|
+
cleanseHiddenData: true,
|
|
173
174
|
components: COMPONENTS,
|
|
174
175
|
data: {},
|
|
175
176
|
setData: mockSetData,
|
|
@@ -19,7 +19,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
19
19
|
// (patch captures payload-ready field name and value,
|
|
20
20
|
// patchLabel captures non-ID values
|
|
21
21
|
// for display purposes after submission.)
|
|
22
|
-
const onPageAction = (action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors, submitting, setSubmitting, existingErrors) => {
|
|
22
|
+
const onPageAction = (action, patch, patchLabel, hooks, data, formState, validate, onPageChange, type, cleanseHiddenData, pages, components, pageId, setPagePoint, currentTask, setData, hubDetails, setSubmitted, addErrors, submitting, setSubmitting, existingErrors) => {
|
|
23
23
|
// Save a copy of data in case submit errors and we need to revert
|
|
24
24
|
const preSubmitData = _objectSpread({}, data);
|
|
25
25
|
const form = formState;
|
|
@@ -112,7 +112,7 @@ const onPageAction = (action, patch, patchLabel, hooks, data, formState, validat
|
|
|
112
112
|
components
|
|
113
113
|
};
|
|
114
114
|
if (action.type === _models.PageAction.TYPES.SUBMIT) {
|
|
115
|
-
_helpers.default.clearOutUncompletedRoutes(formPagesAndComponents, submissionData);
|
|
115
|
+
_helpers.default.clearOutUncompletedRoutes(cleanseHiddenData, formPagesAndComponents, submissionData);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
// In case of hub-and-spoke if patchLabel has changed then
|
|
@@ -47,7 +47,7 @@ jest.mock('./helpers', () => ({
|
|
|
47
47
|
return patch;
|
|
48
48
|
},
|
|
49
49
|
clearOutUncompletedRoutesCalls: 0,
|
|
50
|
-
clearOutUncompletedRoutes(formPagesAndComponents, formData) {
|
|
50
|
+
clearOutUncompletedRoutes(cleanseHiddenData, formPagesAndComponents, formData) {
|
|
51
51
|
this.clearOutUncompletedRoutesCalls += 1;
|
|
52
52
|
return formData;
|
|
53
53
|
},
|
|
@@ -229,6 +229,7 @@ describe('components.FormRenderer.onPageAction', () => {
|
|
|
229
229
|
validate: MOCK_VALIDATE,
|
|
230
230
|
onPageChange: mockOnPageChange,
|
|
231
231
|
type: _models.FormTypes.FORM_WITH_TASK,
|
|
232
|
+
cleanseHiddenData: true,
|
|
232
233
|
pages: PAGES,
|
|
233
234
|
components: COMPONENTS,
|
|
234
235
|
pageId: 'alpha',
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ukhomeoffice/cop-react-form-renderer",
|
|
3
|
-
"version": "6.15.11
|
|
3
|
+
"version": "6.15.11",
|
|
4
4
|
"private": false,
|
|
5
5
|
"scripts": {
|
|
6
6
|
"clean": "rimraf dist",
|
|
7
7
|
"test": "react-scripts test",
|
|
8
8
|
"test:coverage": "yarn test --coverage --watchAll=false",
|
|
9
9
|
"lint": "eslint --ext .js,.jsx src",
|
|
10
|
+
"lint:fix": "eslint --ext .js,.jsx src --fix",
|
|
10
11
|
"storybook:start": "start-storybook --docs -s src/assets --no-manager-cache -p 6007",
|
|
11
12
|
"storybook:build": "build-storybook --docs -s src/assets",
|
|
12
13
|
"storybook": "yarn storybook:start",
|
|
@@ -16,12 +17,12 @@
|
|
|
16
17
|
"yalc-publish": "yarn compile-with-maps && cp -r src dist/src && yalc publish --push"
|
|
17
18
|
},
|
|
18
19
|
"dependencies": {
|
|
19
|
-
"@ukhomeoffice/cop-react-components": "4.7.
|
|
20
|
+
"@ukhomeoffice/cop-react-components": "4.7.16",
|
|
20
21
|
"axios": "^0.23.0",
|
|
21
22
|
"dayjs": "^1.11.0",
|
|
22
23
|
"govuk-frontend": "^5.0.0",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
24
|
+
"uuid": "^8.1.0",
|
|
25
|
+
"web-vitals": "^1.0.1"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
28
|
"@babel/cli": "^7.15.4",
|