@ukhomeoffice/cop-react-form-renderer 3.26.3 → 3.32.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.
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +5 -2
- package/dist/components/CollectionPage/CollectionPage.js +149 -0
- package/dist/components/CollectionPage/CollectionPage.test.js +428 -0
- package/dist/components/CollectionPage/index.js +13 -0
- package/dist/components/FormPage/FormPage.js +6 -1
- package/dist/components/FormRenderer/FormRenderer.js +61 -17
- package/dist/components/PageActions/ActionButton.js +1 -1
- package/dist/components/TaskList/TaskList.js +11 -7
- package/dist/components/TaskList/TaskList.scss +26 -4
- package/dist/components/TaskList/TaskList.test.js +5 -5
- package/dist/models/PageAction.js +5 -1
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +85 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +107 -0
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +6 -0
- package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -0
- package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +10 -0
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +45 -0
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +41 -0
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +34 -0
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +54 -0
- package/dist/utils/CollectionPage/index.js +23 -0
- package/dist/utils/CollectionPage/mergeCollectionPages.js +69 -0
- package/dist/utils/CollectionPage/mergeCollectionPages.test.js +131 -0
- package/dist/utils/Validate/validatePage.js +16 -2
- package/dist/utils/Validate/validatePage.test.js +352 -206
- package/dist/utils/index.js +3 -0
- package/package.json +2 -2
|
@@ -23,6 +23,8 @@ var _utils = _interopRequireDefault(require("../../utils"));
|
|
|
23
23
|
|
|
24
24
|
var _CheckYourAnswers = _interopRequireDefault(require("../CheckYourAnswers"));
|
|
25
25
|
|
|
26
|
+
var _CollectionPage = _interopRequireDefault(require("../CollectionPage"));
|
|
27
|
+
|
|
26
28
|
var _FormPage = _interopRequireDefault(require("../FormPage"));
|
|
27
29
|
|
|
28
30
|
var _TaskList = _interopRequireDefault(require("../TaskList"));
|
|
@@ -289,11 +291,49 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
289
291
|
if (_helpers.default.canActionProceed(action, formState.page, validate.page)) {
|
|
290
292
|
patch = _helpers.default.cleanHiddenNestedData(patch, formState.page);
|
|
291
293
|
|
|
294
|
+
if (action.addToFormData) {
|
|
295
|
+
formState.page.formData[action.addToFormData.field] = action.addToFormData.value;
|
|
296
|
+
}
|
|
297
|
+
|
|
292
298
|
if (action.type === _models.PageAction.TYPES.NAVIGATE) {
|
|
293
299
|
_handlers.default.navigate(action, pageId, onPageChange);
|
|
294
300
|
} else {
|
|
295
|
-
|
|
296
|
-
|
|
301
|
+
var pageUpdate = function pageUpdate(next) {
|
|
302
|
+
return onPageChange(_helpers.default.getNextPageId(type, pages, pageId, action, next));
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
switch (action.type) {
|
|
306
|
+
case _models.PageAction.TYPES.SUBMIT:
|
|
307
|
+
setPagePoint('end');
|
|
308
|
+
break;
|
|
309
|
+
|
|
310
|
+
case _models.PageAction.TYPES.SAVE_AND_NAVIGATE:
|
|
311
|
+
pageUpdate = function pageUpdate() {
|
|
312
|
+
return _handlers.default.navigate(action, pageId, onPageChange);
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
break;
|
|
316
|
+
|
|
317
|
+
case _models.PageAction.TYPES.COLLECTION_ADD:
|
|
318
|
+
formState.page.formData["".concat(action.collection, "ActiveId")] = Date.now().toString();
|
|
319
|
+
|
|
320
|
+
pageUpdate = function pageUpdate() {
|
|
321
|
+
return _handlers.default.navigate(action, pageId, onPageChange);
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
break;
|
|
325
|
+
|
|
326
|
+
case _models.PageAction.TYPES.COLLECTION_DUPLICATE:
|
|
327
|
+
if (_utils.default.CollectionPage.duplicateActiveEntry(action.collection, formState.page.formData)) {
|
|
328
|
+
pageUpdate = function pageUpdate() {
|
|
329
|
+
return _handlers.default.navigate(action, pageId, onPageChange);
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
break;
|
|
334
|
+
|
|
335
|
+
default:
|
|
336
|
+
break;
|
|
297
337
|
} // Save draft or submit.
|
|
298
338
|
|
|
299
339
|
|
|
@@ -306,18 +346,6 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
306
346
|
|
|
307
347
|
if (patch) {
|
|
308
348
|
setData(submissionData);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
var pageUpdate = function pageUpdate(next) {
|
|
312
|
-
return onPageChange(_helpers.default.getNextPageId(type, pages, pageId, action, next));
|
|
313
|
-
}; // const navigablePages = currentTask?.fullPages || pages;
|
|
314
|
-
// let pageUpdate = (next) => onPageChange(helpers.getNextPageId(type, navigablePages, pageId, action, next));
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
if (action.type === _models.PageAction.TYPES.SAVE_AND_NAVIGATE) {
|
|
318
|
-
pageUpdate = function pageUpdate() {
|
|
319
|
-
return _handlers.default.navigate(action, pageId, onPageChange);
|
|
320
|
-
};
|
|
321
349
|
} // Now submit the data to the backend...
|
|
322
350
|
|
|
323
351
|
|
|
@@ -336,10 +364,23 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
336
364
|
}
|
|
337
365
|
}
|
|
338
366
|
}; // Handle navigation from "Check your answers".
|
|
367
|
+
// Passing a dataCallback allows changes to formData from the
|
|
368
|
+
// CYA screen. This is necessary to alow changing the active
|
|
369
|
+
// entry in page collections.
|
|
370
|
+
|
|
339
371
|
|
|
372
|
+
var onCYARowAction = function onCYARowAction(page, dataCallback) {
|
|
373
|
+
if (typeof dataCallback === 'function') {
|
|
374
|
+
var newData = dataCallback(_objectSpread({}, data));
|
|
340
375
|
|
|
341
|
-
|
|
342
|
-
|
|
376
|
+
if (newData) {
|
|
377
|
+
setData(newData);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if (page) {
|
|
382
|
+
_handlers.default.cyaAction(page, pageId, onPageChange);
|
|
383
|
+
}
|
|
343
384
|
}; //Kick off a task, gather required pages and move to the correct point
|
|
344
385
|
|
|
345
386
|
|
|
@@ -466,7 +507,10 @@ var InternalFormRenderer = function InternalFormRenderer(_ref2) {
|
|
|
466
507
|
refNumber: data['businessKey'],
|
|
467
508
|
refTitle: _hub.refTitle,
|
|
468
509
|
onTaskAction: onTaskAction
|
|
469
|
-
}), formState.page && !formState.cya && /*#__PURE__*/_react.default.createElement(_FormPage.default, {
|
|
510
|
+
}), formState.page && !formState.cya && !formState.page.collection && /*#__PURE__*/_react.default.createElement(_FormPage.default, {
|
|
511
|
+
page: formState.page,
|
|
512
|
+
onAction: onPageAction
|
|
513
|
+
}), formState.page && !formState.cya && formState.page.collection && /*#__PURE__*/_react.default.createElement(_CollectionPage.default, {
|
|
470
514
|
page: formState.page,
|
|
471
515
|
onAction: onPageAction
|
|
472
516
|
}));
|
|
@@ -42,7 +42,7 @@ var ActionButton = function ActionButton(_ref) {
|
|
|
42
42
|
className: action.className,
|
|
43
43
|
classModifiers: action.classModifiers,
|
|
44
44
|
start: action.start || false,
|
|
45
|
-
onClick: function
|
|
45
|
+
onClick: action.disabled ? function () {} : function () {
|
|
46
46
|
return onAction(action);
|
|
47
47
|
}
|
|
48
48
|
}), action.label || (actionLabel === null || actionLabel === void 0 ? void 0 : actionLabel.label) || DEFAULT_LABEL);
|
|
@@ -67,13 +67,17 @@ var TaskList = function TaskList(_ref) {
|
|
|
67
67
|
|
|
68
68
|
return /*#__PURE__*/_react.default.createElement("div", _extends({}, attrs, {
|
|
69
69
|
className: classes()
|
|
70
|
-
}), refNumber && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("
|
|
71
|
-
className: "
|
|
72
|
-
},
|
|
73
|
-
className: "
|
|
74
|
-
}, "".concat(
|
|
75
|
-
className: "govuk-
|
|
76
|
-
}, "
|
|
70
|
+
}), refNumber && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("p", {
|
|
71
|
+
className: "govuk-body govuk-!-margin-bottom-0"
|
|
72
|
+
}, /*#__PURE__*/_react.default.createElement("strong", {
|
|
73
|
+
className: "tasklist-summary"
|
|
74
|
+
}, "".concat(refTitle))), /*#__PURE__*/_react.default.createElement("p", {
|
|
75
|
+
className: "govuk-body govuk-!-font-weight-regular"
|
|
76
|
+
}, "".concat(refNumber))), numberOfSections !== numberOfCompleteSections && /*#__PURE__*/_react.default.createElement("p", {
|
|
77
|
+
className: "govuk-body govuk-!-margin-bottom-0"
|
|
78
|
+
}, /*#__PURE__*/_react.default.createElement("strong", {
|
|
79
|
+
className: "tasklist-summary"
|
|
80
|
+
}, "Incomplete form")), /*#__PURE__*/_react.default.createElement("p", {
|
|
77
81
|
className: "govuk-body govuk-!-margin-bottom-7"
|
|
78
82
|
}, "You have completed ".concat(numberOfCompleteSections, " of ").concat(numberOfSections, " sections")), sections.map(function (section, index) {
|
|
79
83
|
return /*#__PURE__*/_react.default.createElement(_react.Fragment, {
|
|
@@ -7,11 +7,13 @@
|
|
|
7
7
|
padding-left: 0;
|
|
8
8
|
margin-top: 0;
|
|
9
9
|
margin-bottom: 0;
|
|
10
|
+
|
|
10
11
|
@include govuk-media-query($from: tablet) {
|
|
11
12
|
min-width: 550px;
|
|
12
13
|
}
|
|
14
|
+
|
|
13
15
|
.hods-task-list__items {
|
|
14
|
-
|
|
16
|
+
font-size: 19px;
|
|
15
17
|
@include govuk-responsive-margin(9, 'bottom');
|
|
16
18
|
list-style: none;
|
|
17
19
|
padding-left: 0;
|
|
@@ -19,10 +21,20 @@
|
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
|
|
24
|
+
.tasklist-summary {
|
|
25
|
+
font-weight: 800;
|
|
26
|
+
}
|
|
27
|
+
|
|
22
28
|
.hods-task-list__section {
|
|
23
29
|
display: table;
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
font-size: 1.25rem;
|
|
31
|
+
font-weight: 800;
|
|
32
|
+
|
|
33
|
+
@include govuk-media-query($from: tablet) {
|
|
34
|
+
font-size: 1.5rem;
|
|
35
|
+
line-height: 1.875rem;
|
|
36
|
+
}
|
|
37
|
+
|
|
26
38
|
}
|
|
27
39
|
|
|
28
40
|
.hods-task-list__section-number {
|
|
@@ -40,6 +52,7 @@
|
|
|
40
52
|
padding-top: govuk-spacing(2);
|
|
41
53
|
padding-bottom: govuk-spacing(2);
|
|
42
54
|
@include govuk-clearfix;
|
|
55
|
+
|
|
43
56
|
&:first-child {
|
|
44
57
|
border-top: 1px solid $govuk-border-colour;
|
|
45
58
|
}
|
|
@@ -48,13 +61,20 @@
|
|
|
48
61
|
.hods-task-list__task-name {
|
|
49
62
|
display: block;
|
|
50
63
|
cursor: auto;
|
|
64
|
+
font-size: 1rem;
|
|
65
|
+
|
|
66
|
+
@include govuk-media-query($from: tablet) {
|
|
67
|
+
font-size: 1.1875rem;
|
|
68
|
+
}
|
|
69
|
+
|
|
51
70
|
@include govuk-media-query($from: 450px) {
|
|
52
71
|
float: left;
|
|
53
72
|
}
|
|
73
|
+
|
|
54
74
|
font-weight: normal;
|
|
55
75
|
}
|
|
56
76
|
|
|
57
|
-
.hods-task-reference-description{
|
|
77
|
+
.hods-task-reference-description {
|
|
58
78
|
@include govuk-media-query($from: 450px) {
|
|
59
79
|
float: left;
|
|
60
80
|
}
|
|
@@ -66,6 +86,8 @@
|
|
|
66
86
|
// avoid breaking task lists in existing prototypes.
|
|
67
87
|
.hods-task-list__tag,
|
|
68
88
|
.hods-task-list__task-completed {
|
|
89
|
+
letter-spacing: 0;
|
|
90
|
+
padding: 0.25rem 0.5rem;
|
|
69
91
|
margin-top: govuk-spacing(2);
|
|
70
92
|
margin-bottom: govuk-spacing(1);
|
|
71
93
|
|
|
@@ -56,13 +56,13 @@ describe('components', function () {
|
|
|
56
56
|
|
|
57
57
|
expect(container.childNodes.length).toEqual(1);
|
|
58
58
|
var referenceHeading = container.childNodes[0].childNodes[0];
|
|
59
|
-
expect(referenceHeading.tagName).toEqual('
|
|
59
|
+
expect(referenceHeading.tagName).toEqual('P');
|
|
60
60
|
expect(referenceHeading.textContent).toEqual('COP reference number');
|
|
61
61
|
var referenceNumber = container.childNodes[0].childNodes[1];
|
|
62
|
-
expect(referenceNumber.tagName).toEqual('
|
|
62
|
+
expect(referenceNumber.tagName).toEqual('P');
|
|
63
63
|
expect(referenceNumber.textContent).toEqual('123');
|
|
64
64
|
var incompleteForm = container.childNodes[0].childNodes[2];
|
|
65
|
-
expect(incompleteForm.tagName).toEqual('
|
|
65
|
+
expect(incompleteForm.tagName).toEqual('P');
|
|
66
66
|
expect(incompleteForm.textContent).toEqual('Incomplete form');
|
|
67
67
|
var numComplete = container.childNodes[0].childNodes[3];
|
|
68
68
|
expect(numComplete.tagName).toEqual('P');
|
|
@@ -123,10 +123,10 @@ describe('components', function () {
|
|
|
123
123
|
|
|
124
124
|
expect(container.childNodes[0].childNodes.length).toEqual(7);
|
|
125
125
|
var referenceHeading = container.childNodes[0].childNodes[0];
|
|
126
|
-
expect(referenceHeading.tagName).toEqual('
|
|
126
|
+
expect(referenceHeading.tagName).toEqual('P');
|
|
127
127
|
expect(referenceHeading.textContent).toEqual('COP reference number');
|
|
128
128
|
var referenceNumber = container.childNodes[0].childNodes[1];
|
|
129
|
-
expect(referenceNumber.tagName).toEqual('
|
|
129
|
+
expect(referenceNumber.tagName).toEqual('P');
|
|
130
130
|
expect(referenceNumber.textContent).toEqual('123');
|
|
131
131
|
var numComplete = container.childNodes[0].childNodes[2];
|
|
132
132
|
expect(numComplete.tagName).toEqual('P');
|
|
@@ -10,6 +10,8 @@ var _DefaultPageActions;
|
|
|
10
10
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
11
11
|
|
|
12
12
|
var TYPE_CANCEL = 'cancel';
|
|
13
|
+
var TYPE_COLLECTION_ADD = 'collectionAdd';
|
|
14
|
+
var TYPE_COLLECTION_DUPLICATE = 'collectionDuplicate';
|
|
13
15
|
var TYPE_NAVIGATE = 'navigate';
|
|
14
16
|
var TYPE_SAVE_AND_CONTINUE = 'saveAndContinue';
|
|
15
17
|
var TYPE_SAVE_AND_NAVIGATE = 'saveAndNavigate';
|
|
@@ -17,6 +19,8 @@ var TYPE_SAVE_AND_RETURN = 'saveAndReturn';
|
|
|
17
19
|
var TYPE_SUBMIT = 'submit';
|
|
18
20
|
var PageActionTypes = {
|
|
19
21
|
CANCEL: TYPE_CANCEL,
|
|
22
|
+
COLLECTION_ADD: TYPE_COLLECTION_ADD,
|
|
23
|
+
COLLECTION_DUPLICATE: TYPE_COLLECTION_DUPLICATE,
|
|
20
24
|
NAVIGATE: TYPE_NAVIGATE,
|
|
21
25
|
SAVE_AND_CONTINUE: TYPE_SAVE_AND_CONTINUE,
|
|
22
26
|
SAVE_AND_NAVIGATE: TYPE_SAVE_AND_NAVIGATE,
|
|
@@ -29,7 +33,7 @@ var DefaultPageActions = (_DefaultPageActions = {}, _defineProperty(_DefaultPage
|
|
|
29
33
|
validate: false,
|
|
30
34
|
label: 'Cancel',
|
|
31
35
|
classModifiers: 'secondary'
|
|
32
|
-
}), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
|
|
36
|
+
}), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_ADD, undefined), _defineProperty(_DefaultPageActions, TYPE_COLLECTION_DUPLICATE, undefined), _defineProperty(_DefaultPageActions, TYPE_NAVIGATE, undefined), _defineProperty(_DefaultPageActions, TYPE_SAVE_AND_CONTINUE, {
|
|
33
37
|
type: TYPE_SAVE_AND_CONTINUE,
|
|
34
38
|
validate: true,
|
|
35
39
|
label: 'Save and continue'
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _copReactComponents = require("@ukhomeoffice/cop-react-components");
|
|
9
|
+
|
|
10
|
+
var _models = require("../../models");
|
|
11
|
+
|
|
12
|
+
var _getCYARowsForContainer = _interopRequireDefault(require("./getCYARowsForContainer"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
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; }
|
|
19
|
+
|
|
20
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
|
+
|
|
22
|
+
var getChangeActionForItem = function getChangeActionForItem(page, item, onAction) {
|
|
23
|
+
return function (row) {
|
|
24
|
+
var changeCallback = function changeCallback(data) {
|
|
25
|
+
data["".concat(page.collection.name, "ActiveId")] = item.id;
|
|
26
|
+
return data;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
onAction(row, changeCallback);
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var getContainerForPage = function getContainerForPage(page, item, labelCount, full_path) {
|
|
34
|
+
return {
|
|
35
|
+
id: item.id,
|
|
36
|
+
fieldId: item.id,
|
|
37
|
+
type: _models.ComponentTypes.CONTAINER,
|
|
38
|
+
required: true,
|
|
39
|
+
full_path: full_path,
|
|
40
|
+
components: page.components.map(function (component) {
|
|
41
|
+
return _objectSpread(_objectSpread({}, component), {}, {
|
|
42
|
+
label: _copReactComponents.Utils.interpolateString(component.label, _objectSpread(_objectSpread({}, item), {}, {
|
|
43
|
+
index: labelCount
|
|
44
|
+
})),
|
|
45
|
+
full_path: "".concat(full_path, ".").concat(component.fieldId)
|
|
46
|
+
});
|
|
47
|
+
})
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
var getTitleRowForItem = function getTitleRowForItem(page, item, pageId, labelCount, full_path) {
|
|
52
|
+
var labels = _objectSpread(_objectSpread({}, _models.CollectionLabels), page.collection.labels);
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
pageId: pageId,
|
|
56
|
+
fieldId: 'Title',
|
|
57
|
+
full_path: "".concat(full_path, ".Title"),
|
|
58
|
+
key: _copReactComponents.Utils.interpolateString(labels.item, _objectSpread(_objectSpread({}, item), {}, {
|
|
59
|
+
index: labelCount
|
|
60
|
+
})),
|
|
61
|
+
type: 'title'
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
var getCYARowsForCollectionPage = function getCYARowsForCollectionPage(page, onAction) {
|
|
66
|
+
var _page$formData, _page$formData$page$c;
|
|
67
|
+
|
|
68
|
+
var rows = [];
|
|
69
|
+
(_page$formData = page.formData) === null || _page$formData === void 0 ? void 0 : (_page$formData$page$c = _page$formData[page.collection.name]) === null || _page$formData$page$c === void 0 ? void 0 : _page$formData$page$c.forEach(function (item, index) {
|
|
70
|
+
var labelCount = index + 1;
|
|
71
|
+
var full_path = "".concat(page.collection.name, "[").concat(index, "]");
|
|
72
|
+
var container = getContainerForPage(page, item, labelCount, full_path);
|
|
73
|
+
var itemChangeAction = getChangeActionForItem(page, item, onAction);
|
|
74
|
+
var containerRows = (0, _getCYARowsForContainer.default)(page, container, item, itemChangeAction);
|
|
75
|
+
var titleRow = getTitleRowForItem(page, item, page.id, labelCount, full_path);
|
|
76
|
+
rows = rows.concat(titleRow);
|
|
77
|
+
rows = rows.concat(containerRows);
|
|
78
|
+
});
|
|
79
|
+
return rows.filter(function (row) {
|
|
80
|
+
return !!row;
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
var _default = getCYARowsForCollectionPage;
|
|
85
|
+
exports.default = _default;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _getCYARowsForCollectionPage = _interopRequireDefault(require("./getCYARowsForCollectionPage"));
|
|
4
|
+
|
|
5
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
|
|
7
|
+
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; }
|
|
8
|
+
|
|
9
|
+
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; }
|
|
10
|
+
|
|
11
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
12
|
+
|
|
13
|
+
describe('utils.CheckYourAnswers.getCYARowsForCollectionPage', function () {
|
|
14
|
+
var TEXT_COMP = {
|
|
15
|
+
id: 'testText',
|
|
16
|
+
fieldId: 'testText',
|
|
17
|
+
label: 'Test text',
|
|
18
|
+
type: 'text'
|
|
19
|
+
};
|
|
20
|
+
var MASTER_PAGE = {
|
|
21
|
+
id: 'page1',
|
|
22
|
+
collection: {
|
|
23
|
+
name: 'collection',
|
|
24
|
+
labels: {
|
|
25
|
+
item: 'Collection entry ${index}'
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
title: 'Collection',
|
|
29
|
+
components: [TEXT_COMP]
|
|
30
|
+
};
|
|
31
|
+
it('should return an empty array if the collection has no entries', function () {
|
|
32
|
+
var FORM_DATA = {};
|
|
33
|
+
|
|
34
|
+
var PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
35
|
+
formData: FORM_DATA
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
var ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null);
|
|
39
|
+
expect(ROWS.length).toEqual(0);
|
|
40
|
+
});
|
|
41
|
+
it('should format titles correctly when collection.labels.item is specified', function () {
|
|
42
|
+
var FORM_DATA = {
|
|
43
|
+
collection: [{
|
|
44
|
+
id: '01',
|
|
45
|
+
testText: 'value'
|
|
46
|
+
}]
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
var PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
50
|
+
formData: FORM_DATA
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
var ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null);
|
|
54
|
+
expect(ROWS.length).toEqual(2); // Title row + component row
|
|
55
|
+
|
|
56
|
+
expect(ROWS[0].key).toEqual('Collection entry 1');
|
|
57
|
+
});
|
|
58
|
+
it('should provide default titles if collection.labels.item is not specified', function () {
|
|
59
|
+
var FORM_DATA = {
|
|
60
|
+
collection: [{
|
|
61
|
+
id: '01',
|
|
62
|
+
testText: 'value'
|
|
63
|
+
}]
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
var PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
67
|
+
collection: _objectSpread(_objectSpread({}, MASTER_PAGE.collection), {}, {
|
|
68
|
+
labels: {}
|
|
69
|
+
}),
|
|
70
|
+
formData: FORM_DATA
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
var ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null);
|
|
74
|
+
expect(ROWS.length).toEqual(2); // Title row + component row
|
|
75
|
+
|
|
76
|
+
expect(ROWS[0].key).toEqual('Item 1');
|
|
77
|
+
});
|
|
78
|
+
it('should return correctly formatted rows for mutliple entries', function () {
|
|
79
|
+
var FORM_DATA = {
|
|
80
|
+
collection: [{
|
|
81
|
+
id: '01',
|
|
82
|
+
testText: 'value'
|
|
83
|
+
}, {
|
|
84
|
+
id: '02',
|
|
85
|
+
testText: 'value'
|
|
86
|
+
}]
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
var PAGE = _objectSpread(_objectSpread({}, MASTER_PAGE), {}, {
|
|
90
|
+
formData: FORM_DATA
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
var ROWS = (0, _getCYARowsForCollectionPage.default)(PAGE, null);
|
|
94
|
+
expect(ROWS.length).toEqual(4); // Title row + component row for each item
|
|
95
|
+
|
|
96
|
+
expect(ROWS[0].type).toEqual('title');
|
|
97
|
+
expect(ROWS[0].key).toEqual('Collection entry 1'); // Formatted according to collection.labels.item
|
|
98
|
+
|
|
99
|
+
expect(ROWS[1].value).toEqual('value');
|
|
100
|
+
expect(ROWS[1].key).toEqual('Test text');
|
|
101
|
+
expect(ROWS[2].type).toEqual('title');
|
|
102
|
+
expect(ROWS[2].key).toEqual('Collection entry 2'); // Formatted according to collection.labels.item
|
|
103
|
+
|
|
104
|
+
expect(ROWS[3].value).toEqual('value');
|
|
105
|
+
expect(ROWS[3].key).toEqual('Test text');
|
|
106
|
+
});
|
|
107
|
+
});
|
|
@@ -11,6 +11,8 @@ var _FormPage = _interopRequireDefault(require("../FormPage"));
|
|
|
11
11
|
|
|
12
12
|
var _getCYARow = _interopRequireDefault(require("./getCYARow"));
|
|
13
13
|
|
|
14
|
+
var _getCYARowsForCollectionPage = _interopRequireDefault(require("./getCYARowsForCollectionPage"));
|
|
15
|
+
|
|
14
16
|
var _getCYARowForGroup2 = _interopRequireDefault(require("./getCYARowForGroup"));
|
|
15
17
|
|
|
16
18
|
var _getCYARowsForCollection = _interopRequireDefault(require("./getCYARowsForCollection"));
|
|
@@ -35,6 +37,10 @@ var getCYARowsForPage = function getCYARowsForPage(page, onAction) {
|
|
|
35
37
|
if (_FormPage.default.showCYA(page, page.formData)) {
|
|
36
38
|
var _page$groups;
|
|
37
39
|
|
|
40
|
+
if (page.collection) {
|
|
41
|
+
return (0, _getCYARowsForCollectionPage.default)(page, onAction);
|
|
42
|
+
}
|
|
43
|
+
|
|
38
44
|
var rows = page.components.filter(function (c) {
|
|
39
45
|
return (0, _showComponentCYA.default)(c, page.formData);
|
|
40
46
|
}).flatMap(function (component) {
|
|
@@ -33,6 +33,10 @@ var showComponentCYA = function showComponentCYA(options, data) {
|
|
|
33
33
|
return false;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
if (options.hasOwnProperty('show_on_cya') && !options.show_on_cya) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
36
40
|
if (options.type === _models.ComponentTypes.CONTAINER) {
|
|
37
41
|
return _Container.default.show(options, data);
|
|
38
42
|
}
|
|
@@ -13,6 +13,11 @@ describe('utils', function () {
|
|
|
13
13
|
it('should not show when there are no options', function () {
|
|
14
14
|
expect((0, _showComponentCYA.default)(null, null)).toBeFalsy();
|
|
15
15
|
});
|
|
16
|
+
it('should not show when show_on_cya is defined and falsy', function () {
|
|
17
|
+
expect((0, _showComponentCYA.default)({
|
|
18
|
+
show_on_cya: false
|
|
19
|
+
})).toBeFalsy();
|
|
20
|
+
});
|
|
16
21
|
it('should not show when it is a heading type', function () {
|
|
17
22
|
expect((0, _showComponentCYA.default)({
|
|
18
23
|
type: _models.ComponentTypes.HEADING
|
|
@@ -34,6 +39,11 @@ describe('utils', function () {
|
|
|
34
39
|
disabled: true
|
|
35
40
|
}, null)).toBeFalsy();
|
|
36
41
|
});
|
|
42
|
+
it('should show when show_on_cya is defined and truthy', function () {
|
|
43
|
+
expect((0, _showComponentCYA.default)({
|
|
44
|
+
show_on_cya: true
|
|
45
|
+
})).toBeTruthy();
|
|
46
|
+
});
|
|
37
47
|
it('should show when it hidden but not disabled', function () {
|
|
38
48
|
expect((0, _showComponentCYA.default)({
|
|
39
49
|
hidden: true
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _getCollectionPageActiveIndex = _interopRequireDefault(require("./getCollectionPageActiveIndex"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
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; }
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
|
|
16
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Duplicates the currently active entry in a named collection's data.
|
|
20
|
+
* Once duplicated, the new entry is set as the active entry.
|
|
21
|
+
* @param {string} collectionName The name of the collection.
|
|
22
|
+
* @param {object} formData A page's form data containing the collection's data.
|
|
23
|
+
* @return true if the entry ws successfully duplicated, false if not.
|
|
24
|
+
*/
|
|
25
|
+
var duplicateCollectionPageActiveEntry = function duplicateCollectionPageActiveEntry(collectionName, formData) {
|
|
26
|
+
var _formData$collectionN;
|
|
27
|
+
|
|
28
|
+
var currentIndex = (0, _getCollectionPageActiveIndex.default)(collectionName, formData);
|
|
29
|
+
var currentEntry = (_formData$collectionN = formData[collectionName]) === null || _formData$collectionN === void 0 ? void 0 : _formData$collectionN[currentIndex];
|
|
30
|
+
|
|
31
|
+
if (!currentEntry) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var newEntry = _objectSpread(_objectSpread({}, currentEntry), {}, {
|
|
36
|
+
id: Date.now().toString()
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
formData[collectionName].push(newEntry);
|
|
40
|
+
formData["".concat(collectionName, "ActiveId")] = newEntry.id;
|
|
41
|
+
return true;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
var _default = duplicateCollectionPageActiveEntry;
|
|
45
|
+
exports.default = _default;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _duplicateCollectionPageActiveEntry = _interopRequireDefault(require("./duplicateCollectionPageActiveEntry"));
|
|
4
|
+
|
|
5
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
+
|
|
7
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
|
|
9
|
+
describe('utils.CollectionPage.duplicateCollectionPageActiveEntry', function () {
|
|
10
|
+
var COLLECTION_NAME = 'testCollection';
|
|
11
|
+
var OBJ = {
|
|
12
|
+
id: '1',
|
|
13
|
+
value: 'value'
|
|
14
|
+
};
|
|
15
|
+
it('should duplicate the active entry if one exists', function () {
|
|
16
|
+
var _FORM_DATA;
|
|
17
|
+
|
|
18
|
+
var FORM_DATA = (_FORM_DATA = {}, _defineProperty(_FORM_DATA, "".concat(COLLECTION_NAME, "ActiveId"), '1'), _defineProperty(_FORM_DATA, COLLECTION_NAME, [OBJ]), _FORM_DATA);
|
|
19
|
+
(0, _duplicateCollectionPageActiveEntry.default)(COLLECTION_NAME, FORM_DATA);
|
|
20
|
+
expect(FORM_DATA[COLLECTION_NAME].length).toEqual(2);
|
|
21
|
+
expect(FORM_DATA[COLLECTION_NAME][1].value).toEqual(FORM_DATA[COLLECTION_NAME][0].value);
|
|
22
|
+
expect(FORM_DATA[COLLECTION_NAME][1].id).toBeTruthy();
|
|
23
|
+
expect(FORM_DATA[COLLECTION_NAME][1].id === '1').toBeFalsy();
|
|
24
|
+
expect(FORM_DATA["".concat(COLLECTION_NAME, "ActiveId")]).toBeTruthy();
|
|
25
|
+
expect(FORM_DATA["".concat(COLLECTION_NAME, "ActiveId")] === '1').toBeFalsy();
|
|
26
|
+
});
|
|
27
|
+
it('should do nothing if there is no active entry', function () {
|
|
28
|
+
var _FORM_DATA2;
|
|
29
|
+
|
|
30
|
+
var FORM_DATA = (_FORM_DATA2 = {}, _defineProperty(_FORM_DATA2, "".concat(COLLECTION_NAME, "ActiveId"), '2'), _defineProperty(_FORM_DATA2, COLLECTION_NAME, [OBJ]), _FORM_DATA2);
|
|
31
|
+
(0, _duplicateCollectionPageActiveEntry.default)(COLLECTION_NAME, FORM_DATA);
|
|
32
|
+
expect(FORM_DATA[COLLECTION_NAME].length).toEqual(1);
|
|
33
|
+
expect(FORM_DATA[COLLECTION_NAME][0]).toEqual(OBJ);
|
|
34
|
+
expect(FORM_DATA["".concat(COLLECTION_NAME, "ActiveId")]).toEqual('2'); // Shouldn't have changed.
|
|
35
|
+
});
|
|
36
|
+
it('should do nothing if the collection does not exist', function () {
|
|
37
|
+
var FORM_DATA = {};
|
|
38
|
+
(0, _duplicateCollectionPageActiveEntry.default)(COLLECTION_NAME, FORM_DATA);
|
|
39
|
+
expect(FORM_DATA).toEqual({});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Gets the index of the active entry in a named collection's data.
|
|
10
|
+
* @param {string} collectionName The name of the collection.
|
|
11
|
+
* @param {object} formData A page's form data containing the collection's data.
|
|
12
|
+
* @returns The index of the active entry, or null if there isn't one.
|
|
13
|
+
*/
|
|
14
|
+
var getCollectionPageActiveIndex = function getCollectionPageActiveIndex(collectionName, formData) {
|
|
15
|
+
var _formData$collectionN;
|
|
16
|
+
|
|
17
|
+
if (!collectionName) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var id = formData === null || formData === void 0 ? void 0 : formData["".concat(collectionName, "ActiveId")];
|
|
22
|
+
|
|
23
|
+
if (!id) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var activeIndex = (_formData$collectionN = formData[collectionName]) === null || _formData$collectionN === void 0 ? void 0 : _formData$collectionN.findIndex(function (item) {
|
|
28
|
+
return item.id === id;
|
|
29
|
+
});
|
|
30
|
+
return activeIndex > -1 ? activeIndex : null;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var _default = getCollectionPageActiveIndex;
|
|
34
|
+
exports.default = _default;
|